對於部署在虛擬節點上的Pod應用,在應用迭代過程中,因為解決bug或者增加功能特性而製作新的鏡像後,您可能需要修改鏡像,同時為了不影響業務,需要保持Pod的IP不變。本文介紹如何通過kubectl命令修改Pod的容器鏡像,並保持Pod的IP不變。
前提條件
已準備好要更新的鏡像,且已將鏡像上傳到鏡像倉庫中。
操作步驟
下文以部署Nginx的Pod為例,介紹如何通過kubectl命令,將容器鏡像從nginx:1.7.9
修改為nginx:1.9.6
,並保持Pod的IP不變。
體驗以下樣本請確保叢集所屬VPC已建立公網NAT Gateway並配置SNAT,以便可以拉取公網鏡像。
建立一個ECI Pod。
kubectl create -f nginx.yaml
nginx.yaml的內容樣本如下,使用的容器鏡像為
nginx:1.7.9
。apiVersion: v1 kind: Pod metadata: name: nginx namespace: default alibabacloud.com/eci: "true" spec: containers: - image: nginx:1.7.9 imagePullPolicy: Always name: nginx
查詢Pod資訊。
查詢Pod的IP。
kubectl get pod/nginx -n default -o wide
返回樣本如下,可以看到Pod的IP為172.16.22.193。
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 5m5s 172.16.22.193 virtual-kubelet-cn-beijing-e <none> <none>
查詢Pod的鏡像tag。
kubectl get pod/nginx -n default -o=custom-columns='IMAGE:spec.containers[*].image'
返回樣本如下,可以查看Pod的容器鏡像為
nginx:1.7.9
。IMAGE nginx:1.7.9
選擇以下一種方式修改鏡像。
kubectl patch
執行kubectl命令直接修改容器鏡像tag。
kubectl patch pod nginx -p '{"spec":{"containers":[{"name": "nginx","image": "nginx:1.9.6"}]}}'
kubectl edit
執行kubectl edit命令編輯Pod,直接修改容器鏡像tag。
kubectl edit pod/nginx -o yaml
kubectl apply
開啟Pod對應的nginx.yaml設定檔,修改容器鏡像tag,然後執行kubectl apply命令重新部署Pod。
kubectl apply -f nginx.yaml
查看修改後的Pod資訊。
查詢Pod的IP。
kubectl get pod/nginx -n default -o wide
返回樣本如下,可以看到Pod的IP與修改前一致,為172.16.22.193。
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 1 19m 172.16.22.193 virtual-kubelet-cn-beijing-e <none> <none>
查詢Pod的鏡像tag。
kubectl get pod/nginx -n default -o=custom-columns='IMAGE:spec.containers[*].image'
返回樣本如下,可以查看Pod的容器鏡像已經修改為
nginx:1.9.6
。IMAGE nginx:1.9.6