このドキュメントでは、Google Distributed Cloud(GDC)のエアギャップ Kubernetes クラスタの Kubernetes バージョンをアップグレードする方法について説明します。クラスタに最新の Kubernetes の機能と修正を組み込むには、クラスタの定期的なアップグレードを計画する必要があります。
このドキュメントは、組織内の Kubernetes リソースの管理を担当するプラットフォーム管理者グループ内の IT 管理者、セキュリティ エンジニア、ネットワーク管理者などのユーザーを対象としています。詳細については、GDC エアギャップの対象ユーザーに関するドキュメントをご覧ください。
始める前に
kubectl CLI をインストールします。詳細については、コンポーネントをインストールするをご覧ください。
ターゲット ゾーンの管理 API サーバーの kubeconfig ファイルを生成します。詳細については、ゾーン Kubernetes クラスタ リソースをご覧ください。
使用可能なアップグレード バージョンを一覧表示するために必要な権限を取得するには、組織の IAM 管理者に User Cluster Admin(
user-cluster-admin)ロールの付与を依頼してください。標準クラスタを管理していて、プラットフォーム管理者グループからユーザー クラスタ管理者ロールを取得できない場合は、利用可能な Kubernetes アップグレード バージョンのリストを提供するよう依頼する必要があります。
クラスタのアップグレードを構成するために必要な権限を取得するには、組織の IAM 管理者に Standard クラスタ管理者(
standard-cluster-admin)ロールの付与を依頼してください。
Kubernetes クラスタをアップグレードする
UserClusterUpgradeRequest API を使用して、既存の Kubernetes クラスタをアップグレードします。
API を使用して Kubernetes クラスタをアップグレードする手順は次のとおりです。
UserClusterMetadataオブジェクトのkubernetesVersion値を出力して、使用可能な Kubernetes アップグレード バージョンを一覧表示します。kubectl --kubeconfig MANAGEMENT_API_SERVER \ get userclustermetadata -o=custom-columns='TARGET_VERSION:.spec.kubernetesVersion'MANAGEMENT_API_SERVERは、管理 API サーバーの kubeconfig ファイルへのパスに置き換えます。このコマンドは、使用可能な Kubernetes バージョンのリストを返します。
TARGET_VERSION 1.30.1000-gke.85クラスタのアップグレード先の Kubernetes バージョンを、前の出力からメモします。次の手順のアップグレード リクエストで指定する
targetVersionは、これらの使用可能なバージョンのいずれかである必要があります。UserClusterUpgradeRequestリソースを作成して、クラスタのアップグレードをリクエストします。kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: cluster.gdc.goog/v1 kind: UserClusterUpgradeRequest metadata: name: CLUSTER_NAME namespace: CLUSTER_NAMESPACE spec: clusterRef: name: CLUSTER_NAME targetVersion: TARGET_VERSION EOF次のように置き換えます。
MANAGEMENT_API_SERVER: 管理 API サーバーの kubeconfig ファイルのパス。CLUSTER_NAME: アップグレードする Kubernetes クラスタの名前(user-vm-2など)。CLUSTER_NAMESPACE: Kubernetes クラスタの Namespace。共有クラスタの場合は、platform名前空間を使用します。Standard クラスタの場合は、クラスタのプロジェクト Namespace を使用します。TARGET_VERSION: 前の手順で特定したアップグレードのターゲット バージョン(1.30.1000-gke.85など)。
Kubernetes クラスタの平均アップグレード時間は約 20 分です。
UserClusterUpgradeRequestリソースをモニタリングして、クラスタのアップグレードを確認します。kubectl --kubeconfig MANAGEMENT_API_SERVER \ describe userclusterupgraderequest CLUSTER_NAME \ -n CLUSTER_NAMESPACE次のように置き換えます。
MANAGEMENT_API_SERVER: 管理 API サーバーの kubeconfig ファイルのパス。CLUSTER_NAME: アップグレードする Kubernetes クラスタの名前(user-vm-2など)。CLUSTER_NAMESPACE: Kubernetes クラスタの Namespace。共有クラスタの場合は、platform名前空間を使用します。Standard クラスタの場合は、クラスタのプロジェクト Namespace を使用します。
出力の
Specセクションを調べます。Current VersionとTarget Versionが含まれます。Current VersionとTarget Versionが異なる場合、アップグレードはまだ進行中です。Spec: ... Current Version: 1.29.500-gke.60 Target Version: 1.30.1000-gke.85 Status: Conditions: - Message: Upgrade is in progress Reason: UpgradeInProgress Status: "False" Type: SucceededSucceeded条件のステータスがTrueで、Current VersionがTarget Versionと一致する場合、アップグレードは完了し、成功しています。Succeeded条件のステータスがFalseの場合、アップグレードは失敗しています。Kubernetes クラスタのアップグレードに関連するエラーが発生した場合は、インフラストラクチャ オペレーター グループにお問い合わせください。
アップグレード後にクラスタ サブコンポーネントを確認する
Kubernetes クラスタが正常にアップグレードされたら、クラスタのすべてのサブコンポーネントが正常であることを確認することをおすすめします。
クラスタ内のサブコンポーネントの障害を確認します。
ReconciliationErrorメッセージが表示されているサブコンポーネントがないことを確認します。kubectl --kubeconfig MANAGEMENT_API_SERVER \ get subcomponent -n CLUSTER_NAME -o json | jq -r \ '.items[] | select(.status.conditions[]?.reason == "ReconciliationError") | select(.status.featureDisabled != true) | "Sub-Component: \(.metadata.name) - \(.status.conditions[]?.message)"'出力にサブコンポーネントが返された場合は、インフラストラクチャ オペレーター グループにお問い合わせください。
Reconcilingメッセージが表示されているサブコンポーネントがないことを確認します。kubectl --kubeconfig MANAGEMENT_API_SERVER \ get subcomponent -n CLUSTER_NAME -o json | jq -r \ '.items[] | select(.status.conditions[]?.reason == "Reconciling") | select(.status.featureDisabled != true) | select( "\(.status)" | contains("PreinstallPending") | not) | "Sub-Component: \(.metadata.name) - \(.status.conditions[]?.message)"'3 つのコントロール プレーン ノードと 3 つのワーカーノードを持つ Kubernetes クラスタの場合、アップグレードには約 20 分かかります。20 分経ってもサブコンポーネントが
Reconciling状態のままの場合は、インフラストラクチャ オペレーター グループにお問い合わせください。