如何为运行中的Kubernetes pod打补丁?

译文
云计算
运行中的Kubernetes pod没必要为了更改而拆除。使用patch选项,为pod添加新容器实际上非常容易。

【51CTO.com快译】Kubernetes是市面上强大、灵活的容器集群管理器之一。有了这个工具,你几乎可以做任何要做的事情。为已经部署的pod打补丁就是Kubernetes提供的这样一项功能。

如何为运行中的Kubernetes pod打补丁?

比如说,假设你部署了一个含有Nginx容器的pod,但随后又想把Regis和MySQL容器添加进来。你无需把一切拆除下来并重新调整配置文件,只需运行patch命令即可添加新容器。

下面介绍如何做到这一点。虽然该例子很简单,但会演示patch选项如何与kubectl命令协同使用。

你需要什么?

完成这项工作只需要运行中的Kubernetes集群。

想搞清楚如何部署集群,请查看这篇教程:《如何在Ubuntu服务器上部署Kubernetes集群?》。一旦启动并运行了集群,我们可以继续下一步了。

如何部署Kubernetes服务?

我们要做的第一件事是部署Kubernetes服务。使用以下命令创建一个新目录:

  1. mkdir ~/patch-demo 

使用以下命令进入到该新目录:

  1. cd ~/patch-demo 

现在,为含有带基本模板的Nginx和两个副本的服务部署创建一个YAML文件。使用以下命令创建该文件:

  1. nano deployment-patch.yaml 

在该文件中,粘贴以下内容:

  1. apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 
  2. kind: Deployment 
  3. metadata: 
  4.   name: patch-demo 
  5. spec: 
  6.   replicas: 2 
  7.   selector: 
  8.     matchLabels: 
  9.       app: nginx 
  10.   template: 
  11.     metadata: 
  12.       labels: 
  13.         app: nginx 
  14.     spec: 
  15.       containers: 
  16.       - name: patch-demo-ctr 
  17.         image: nginx 
  18.       tolerations: 
  19.       - effect: NoSchedule 
  20.         key: dedicated 
  21.         value: test-team 

保存并关闭文件。使用以下命令部署该配置:

  1. kubectl apply -f deployment-patch.yaml 

现在你可以通过执行以下命令看到该pod处于运行中:

  1. kubectl get pods 

该patch-demo补丁将被列为运行中(图A)。

如何为运行中的Kubernetes pod打补丁?
图A. 我们的Kubernetes patch-demo pod已启动并在运行中

如何为运行中的服务打补丁?

现在,我们将创建一个战略性合并补丁文件,该文件将为pod添加Redis容器。使用以下命令创建补丁文件:

  1. nano patch-file.yaml 

在该文件中,粘贴以下内容:

  1. spec: 
  2.   template: 
  3.     spec: 
  4.       containers: 
  5.       - name: patch-demo-ctr-2 
  6.         image: redis 

保存并关闭文件。

为了给运行中的服务打补丁,执行以下命令:

  1. kubectl patch deployment patch-demo --patch "$(cat patch-file.yaml)" 

该实例中发生的是,部署将终止旧pod,创建新pod。

你可以继续这一步。比如说,假设你想把MySQL添加进来。用以下命令创建另一个补丁文件:

  1. nano patch-file-2.yaml 

在该文件中,粘贴以下内容:

  1. spec: 
  2.   template: 
  3.     spec: 
  4.       containers: 
  5.       - name: patch-demo-ctr-3 
  6.         image: mysql 

保存并关闭文件,重新运行patch命令,就像这样:

  1. kubectl patch deployment patch-demo --patch "$(cat patch-file-2.yaml)" 

如果你执行该命令:

  1. kubectl get deployment patch-demo --output yaml 

会看到Nginx、Redis和MySQL都在pod中(图B)。

如何为运行中的Kubernetes pod打补丁?

图B. 我们的Kubernetes pod现包括所有三个映像

对于该补丁系统,你无法做到的一件事就是为pod扩增副本的数量。为此,你要使用scale命令,就像这样:

  1. kubectl scale --replicas=4 deployment patch-demo 

或者你可以把它缩减至0来删除pod,就像这样:

  1. kubectl scale --replicas=0 deployment patch-demo 

这就是为运行中的Kubernetes服务打补丁的一切。虽然这篇教程很基础,但你会发现有了patch命令,你几乎可以做一切事情。

原文标题:How to patch a running Kubernetes pod,作者:Jack Wallen

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

责任编辑:未丽燕 来源: 51CTO.com
相关推荐

2011-05-17 14:34:24

2009-10-20 10:40:23

补丁远程系统

2010-03-08 11:35:22

2023-10-19 19:42:25

IstioPodkubernetes

2016-01-05 13:27:37

2015-12-31 14:17:00

2022-09-22 12:11:38

PodKubernetes

2015-01-05 14:24:12

2021-06-30 09:11:17

KubernetesDevtronK8S

2024-06-19 09:33:05

2009-03-03 11:23:21

2021-11-22 08:00:00

Kubernetes容器集群

2020-11-30 12:15:26

KubernetesPodLinux

2022-06-27 05:48:24

Kubernetes容器

2021-07-14 13:30:44

KubernetesLinux文件

2019-11-20 09:15:53

KubernetesPod

2024-01-03 10:12:07

Kubernetesdeploymentpod

2010-07-29 16:44:18

系统管理员系统更新安全补丁

2023-02-09 16:47:34

KubernetesPod优先级

2011-07-21 16:44:04

点赞
收藏

51CTO技术栈公众号