仮想ノード上の Pod としてデプロイされたアプリケーションをイテレーションする際、バグ修正や新機能追加のためにコンテナイメージの更新が必要になることがあります。サービスの中断を避けるため、更新中も Pod の IP アドレスを維持する必要がある場合が多いです。このガイドでは、kubectl コマンドを使用して、Elastic Container Instance (ECI) Pod の IP アドレスを変更せずにコンテナイメージを更新する方法を説明します。
前提条件
新しいコンテナイメージを準備し、イメージリポジトリにプッシュ済みであること。
手順
この例では、Nginx Pod のコンテナイメージを、Pod の IP アドレスを維持したまま nginx:1.7.9 から nginx:1.9.6 に更新します。
この例を実行するには、クラスターの Virtual Private Cloud (VPC) にインターネット NAT ゲートウェイと SNAT ルールが設定されていることを確認してください。これにより、インターネット経由でイメージをプルできます。
ECI 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: nginxPod 情報を照会します。
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 patchコマンドを実行して、コンテナイメージのタグを直接更新します。kubectl patch pod nginx -p '{"spec":{"containers":[{"name": "nginx","image": "nginx:1.9.6"}]}}'kubectl edit
kubectl editコマンドを実行して Pod マニフェストを編集し、コンテナイメージのタグを更新します。kubectl edit pod/nginx -o yamlkubectl apply
nginx.yaml設定ファイルを開き、コンテナイメージのタグを更新してから、kubectl applyコマンドを実行して変更を適用します。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 のイメージタグを確認します。
kubectl get pod/nginx -n default -o=custom-columns='IMAGE:spec.containers[*].image'出力から、コンテナイメージが
nginx:1.9.6に更新されたことがわかります。IMAGE nginx:1.9.6