アップグレード ステージ: AnthosBareMetal

このステージでは、Kubernetes クラスタの Kubernetes バージョンとアドオンがアップグレードされます。このステージでは、アップグレード タスク mz-location-upgrade も実行されます。

クラスタのアップグレードは、クラスタの 1 つのノードで一度に実行されます。クラスタ アップグレードの大まかな手順は次のとおりです。

  1. プリフライト チェックが実行され、ノードのアップグレードの準備が整っていることが確認されます。
  2. アップグレードの準備のためにノードがドレインされます
  3. ノードの Kubernetes バージョンがアップグレードされます。
  4. ノードのアップグレードが正常に完了したことを確認するために、フライト後チェックが実行されます。
  5. ノードの InventoryMachine リソースが maintenance から削除されます。これにより、ノードは Pod を再び受け入れる準備が整います。

ノードのドレイン プロセス

ノードのドレインとは、そのノードで実行されているすべてのワークロードをそのノードから正常に移動することです。これは次のステップで構成されます。

  1. ノードの InventoryMachine リソースは maintenance の下に配置されます。
  2. BaremetalMachine リソースは maintenance の下に配置されます。
  3. Kubernetes ノードが baremetal.cluster.gke.io/maintenance: NoSchedule で taint されている
  4. ベアメタルノードの場合、ノードで実行されている仮想マシンは、maintenance でその仮想マシンの InventoryMachine を設定することで、ドレインの準備が整います。
  5. Kubernetes ノードで実行されている Pod は正常に強制排除されます。各 Pod には、正常に終了するまでに最大 80 分が与えられます。

管理クラスタの kubeconfig、クラスタ名、Namespace を取得する

このステージの問題をトリアージするには、管理クラスタの KUBECONFIG と、アップグレード中のクラスタの名前と Namespace が必要です。ORG_NAME に、アップグレードをモニタリングする組織を設定します。

export ORG_NAME=ORG_NAME

ステージ名で指定されたクラスタに基づいて、次のいずれかを選択します。

  1. ステージ名: root-admin/AnthosBareMetal

    export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export CLUSTER_NAME="root-admin"
    export CLUSTER_NAMESPACE="root"
    
  2. ステージ名: org-admin/AnthosBareMetal

    export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export CLUSTER_NAME="${ORG_NAME}-admin"
    export CLUSTER_NAMESPACE="${ORG_NAME}"
    
  3. ステージ名: system/AnthosBareMetal

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME="${ORG_NAME}-system"
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    
  4. ステージ名: service/AnthosBareMetal

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME="g-${ORG_NAME}-shared-service"
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    
  5. ユーザー クラスタのアップグレード

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME=USER_CLUSTER_NAME
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    

モニタリングするリソース

  1. ABM クラスタ リソース clusters.baremetal.cluster.gke.io

      kubectl get cluster -n "${CLUSTER_NAMESPACE}" "${CLUSTER_NAME}" --kubeconfig=${ADMIN_KUBECONFIG}
    

    出力例

    NAME         ABM VERSION       DESIRED ABM VERSION   CLUSTER STATE
    root-admin   1.29.400-gke.86   1.29.400-gke.86       Running
    
  2. ABM BaremetalMachine リソース

      kubectl get baremetalmachines -n "${CLUSTER_NAMESPACE}" --kubeconfig=${ADMIN_KUBECONFIG}
    

    出力例

    NAME       CLUSTER      READY   INSTANCEID             MACHINE    ABM VERSION       DESIRED ABM VERSION
    10.8.0.2   root-admin   true    baremetal://10.8.0.2   10.8.0.2   1.29.400-gke.86   1.29.400-gke.86
    10.8.0.3   root-admin   true    baremetal://10.8.0.3   10.8.0.3   1.29.400-gke.86   1.29.400-gke.86
    10.8.0.4   root-admin   true    baremetal://10.8.0.4   10.8.0.4   1.29.400-gke.86   1.29.400-gke.86
    

    ABM VERSIONDESIRED ABM VERSION と異なるマシンがある場合、または READYtrue と等しくない場合は、-o yaml フラグを使用してマシンの詳細を取得します。

  3. ノードがメンテナンス モードへの移行またはメンテナンス モードからの移行に失敗した場合のヘルスチェック。

      export MACHINE_IP=MACHINE_IP
      kubectl get healthchecks -n kube-system --kubeconfig=${ADMIN_KUBECONFIG}
    

    出力例

    NAMESPACE     NAME                                                 COMPONENT   NAMESPACE   STATUS    LAST_COMPLETED
    kube-system   bm-system-10.8.0.2-machine                                                   Healthy   14m
    kube-system   bm-system-10.8.0.3-machine                                                   Healthy   14m
    kube-system   bm-system-10.8.0.4-machine                                                   Healthy   5m43s
    kube-system   bm-system-add-ons-add-ons                                                    Healthy   46m
    kube-system   bm-system-add-ons-configdrift                                                Healthy   46m
    

    ヘルスチェックが異常と表示された場合は、-o yaml フラグを使用して詳細を確認します。

  4. エラーを確認するコントローラのログ

      export MACHINE_IP=MACHINE_IP
      kubectl logs -n kube-system -l baremetal.cluster.gke.io/lifecycle-controller-component=true | grep ${MACHINE_IP}
      kubectl logs -n capi-system -l baremetal.cluster.gke.io/lifecycle-controller-component=true | grep ${MACHINE_IP}
    
  5. このステージで実行中または失敗したアップグレード タスクがないか確認します。

    export KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    kubectl get upgradetaskrequests -n gpc-system -o json | jq '.items[] | select(.status.conditions[].status=="Unknown") | .metadata.name'
    

    出力例

    "upg-task-org-1-os-node-upgrade-task-whg8v"
    
    export KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export UPGRADE_TASK=$(kubectl get upgradetaskrequests -n gpc-system -o json | jq -r '.items[] | select(.status.conditions[].status=="Unknown") | .metadata.name')
    kubectl get upgradetaskrequests -n gpc-system "${UPGRADE_TASK}" -o yaml 
    

    出力例

    status:
      conditions:
      - lastTransitionTime: "2024-09-25T16:26:33Z"
        message: job gpc-system/v1.13.0-os-7cf810d7a5-upg-task-org-1-os-node-upgra-4n5t6
          is running
        observedGeneration: 1
        reason: JobRunning
        status: Unknown
        type: Succeeded
      upgradeTaskResponse:
        name: upg-task-org-1-os-node-upgrade-task-whg8v-v1.13.0-os-7cf810d7a5
    

    出力に実行中のジョブが表示された場合は、ジョブの説明を取得するか、Pod ログでエラーを確認します。