問題のトラブルシューティングや Pod の機能を向上させるために Pod を更新する場合、Pod のイメージを変更する必要がある場合があります。このプロセス中に、ビジネスの継続性を確保するために、Pod の IP アドレスを変更することはできません。このトピックでは、kubectl コマンドを使用して Pod のコンテナイメージを更新し、Pod の IP アドレスを変更しない方法について説明します。
前提条件
更新するイメージが準備され、イメージリポジトリにアップロードされていること。
手順
次の例では、kubectl コマンドを使用してコンテナイメージを nginx:1.7.9
から nginx:1.9.6
に更新し、NGINX を実行する Pod の IP アドレスを変更しない方法について説明します。
次の例の手順を実行するには、インターネット NAT ゲートウェイが作成され、クラスタが属する VPC に対して SNAT が構成されていることを確認してください。これにより、インターネット経由でイメージをプルできます。
Elastic Container Instance ベースの Pod を作成します。
kubectl create -f nginx.yaml
次のコードは、nginx.yaml のコンテンツの例を示しています。使用されるコンテナイメージは
nginx:1.7.9
です。apiVersion: v1 kind: Pod metadata: name: nginx namespace: default labels: 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 のイメージタグをクエリします。
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 コマンドを実行して、イメージタグを変更します。
kubectl patch pod nginx -p '{"spec":{"containers":[{"name": "nginx","image": "nginx:1.9.6"}]}}'
kubectl edit
kubectl edit コマンドを実行して Pod を編集し、イメージタグを変更します。
kubectl edit pod/nginx -o yaml
kubectl apply
Pod の nginx.yaml 設定ファイルを開き、イメージタグを変更してから、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 であることを示しています。これは、イメージを更新する前の Pod の IP アドレスと同じです。
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 のイメージタグをクエリします。
kubectl get pod/nginx -n default -o=custom-columns='IMAGE:spec.containers[*].image'
次の出力例は、Pod のコンテナイメージが
nginx:1.9.6
に更新されたことを示しています。IMAGE nginx:1.9.6