如何為運行中的Kubernetes pod打補丁?
譯文【51CTO.com快譯】Kubernetes是市面上強大、靈活的容器集群管理器之一。有了這個工具,你幾乎可以做任何要做的事情。為已經(jīng)部署的pod打補丁就是Kubernetes提供的這樣一項功能。
比如說,假設你部署了一個含有Nginx容器的pod,但隨后又想把Regis和MySQL容器添加進來。你無需把一切拆除下來并重新調(diào)整配置文件,只需運行patch命令即可添加新容器。
下面介紹如何做到這一點。雖然該例子很簡單,但會演示patch選項如何與kubectl命令協(xié)同使用。
你需要什么?
完成這項工作只需要運行中的Kubernetes集群。
想搞清楚如何部署集群,請查看這篇教程:《如何在Ubuntu服務器上部署Kubernetes集群?》。一旦啟動并運行了集群,我們可以繼續(xù)下一步了。
如何部署Kubernetes服務?
我們要做的第一件事是部署Kubernetes服務。使用以下命令創(chuàng)建一個新目錄:
- mkdir ~/patch-demo
使用以下命令進入到該新目錄:
- cd ~/patch-demo
現(xiàn)在,為含有帶基本模板的Nginx和兩個副本的服務部署創(chuàng)建一個YAML文件。使用以下命令創(chuàng)建該文件:
- nano deployment-patch.yaml
在該文件中,粘貼以下內(nèi)容:
- apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
- kind: Deployment
- metadata:
- name: patch-demo
- spec:
- replicas: 2
- selector:
- matchLabels:
- app: nginx
- template:
- metadata:
- labels:
- app: nginx
- spec:
- containers:
- - name: patch-demo-ctr
- image: nginx
- tolerations:
- - effect: NoSchedule
- key: dedicated
- value: test-team
保存并關閉文件。使用以下命令部署該配置:
- kubectl apply -f deployment-patch.yaml
現(xiàn)在你可以通過執(zhí)行以下命令看到該pod處于運行中:
- kubectl get pods
該patch-demo補丁將被列為運行中(圖A)。
圖A. 我們的Kubernetes patch-demo pod已啟動并在運行中
如何為運行中的服務打補丁?
現(xiàn)在,我們將創(chuàng)建一個戰(zhàn)略性合并補丁文件,該文件將為pod添加Redis容器。使用以下命令創(chuàng)建補丁文件:
- nano patch-file.yaml
在該文件中,粘貼以下內(nèi)容:
- spec:
- template:
- spec:
- containers:
- - name: patch-demo-ctr-2
- image: redis
保存并關閉文件。
為了給運行中的服務打補丁,執(zhí)行以下命令:
- kubectl patch deployment patch-demo --patch "$(cat patch-file.yaml)"
該實例中發(fā)生的是,部署將終止舊pod,創(chuàng)建新pod。
你可以繼續(xù)這一步。比如說,假設你想把MySQL添加進來。用以下命令創(chuàng)建另一個補丁文件:
- nano patch-file-2.yaml
在該文件中,粘貼以下內(nèi)容:
- spec:
- template:
- spec:
- containers:
- - name: patch-demo-ctr-3
- image: mysql
保存并關閉文件,重新運行patch命令,就像這樣:
- kubectl patch deployment patch-demo --patch "$(cat patch-file-2.yaml)"
如果你執(zhí)行該命令:
- kubectl get deployment patch-demo --output yaml
會看到Nginx、Redis和MySQL都在pod中(圖B)。
對于該補丁系統(tǒng),你無法做到的一件事就是為pod擴增副本的數(shù)量。為此,你要使用scale命令,就像這樣:
- kubectl scale --replicas=4 deployment patch-demo
或者你可以把它縮減至0來刪除pod,就像這樣:
- kubectl scale --replicas=0 deployment patch-demo
這就是為運行中的Kubernetes服務打補丁的一切。雖然這篇教程很基礎,但你會發(fā)現(xiàn)有了patch命令,你幾乎可以做一切事情。
原文標題:How to patch a running Kubernetes pod,作者:Jack Wallen
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】