すべてのプロダクト
Search
ドキュメントセンター

Elastic Container Instance:Pod の IP アドレスを変更せずに Pod のイメージを更新する

最終更新日:Dec 28, 2024

問題のトラブルシューティングや Pod の機能を向上させるために Pod を更新する場合、Pod のイメージを変更する必要がある場合があります。このプロセス中に、ビジネスの継続性を確保するために、Pod の IP アドレスを変更することはできません。このトピックでは、kubectl コマンドを使用して Pod のコンテナイメージを更新し、Pod の IP アドレスを変更しない方法について説明します。

前提条件

更新するイメージが準備され、イメージリポジトリにアップロードされていること。

手順

次の例では、kubectl コマンドを使用してコンテナイメージを nginx:1.7.9 から nginx:1.9.6 に更新し、NGINX を実行する Pod の IP アドレスを変更しない方法について説明します。

説明

次の例の手順を実行するには、インターネット NAT ゲートウェイが作成され、クラスタが属する VPC に対して SNAT が構成されていることを確認してください。これにより、インターネット経由でイメージをプルできます。

  1. 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
  2. Pod の情報をクエリします。

    1. 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>
    2. Pod のイメージタグをクエリします。

      kubectl get pod/nginx -n default -o=custom-columns='IMAGE:spec.containers[*].image'

      次の出力例は、Pod のコンテナイメージが nginx:1.7.9 であることを示しています。

      IMAGE
      nginx:1.7.9
  3. 次のいずれかの方法を使用して、コンテナイメージを更新します。

    • 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 
  4. イメージを更新した後、Pod の情報を表示します。

    1. 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>
    2. Pod のイメージタグをクエリします。

      kubectl get pod/nginx -n default -o=custom-columns='IMAGE:spec.containers[*].image'

      次の出力例は、Pod のコンテナイメージが nginx:1.9.6 に更新されたことを示しています。

      IMAGE
      nginx:1.9.6