このドキュメントでは、アップグレードの準備としてスタンドアロン ツールを実行する方法について説明します。バージョン 1.9 以降の Google Distributed Cloud の管理クラスタまたはユーザー クラスタをアップグレードする前に、アップグレード準備ツールを実行することをおすすめします。
このツールの実行には、このドキュメント内にある、ハードコードされたセキュア ハッシュ アルゴリズム(SHA)を使用する bash スクリプトを使用します。このドキュメントは、ツールのリリースごとに新しい SHA で更新されます。このスクリプトは、アップグレード先のバージョンに応じて、特定のバージョンのプリフライト チェックを実行する Kubernetes Job を作成します。
アップグレード前のチェック
このツールは、ユーザー クラスタをアップグレードする前に、次の項目を確認します。
カテゴリ | 説明 |
---|---|
クラスタの状態 |
|
構成 |
|
このツールは、管理クラスタをアップグレードする前に、次の項目を確認します。
カテゴリ | 説明 |
---|---|
クラスタの状態 | 管理クラスタのすべての名前空間で PodDisruptionBudgets (PDB)を検証します。 |
構成 |
|
ツールの実行を準備する
まだアップグレードしていない場合、管理ワークステーションをアップグレードします。
OS イメージを vSphere にインポートしていない場合は、
gkectl prepare
を実行してインポートします。gkectl prepare \ --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
次のように置き換えます。
TARGET_VERSION
: アップグレードする Google Distributed Cloud のパッチ バージョン。バージョン番号の形式は、1.13.10-gke.42
のように完全なパッチ バージョンにする必要があります。ADMIN_CLUSTER_KUBECONFIG
: 管理クラスタの kubeconfig ファイルのパス。
非公開レジストリを使用している場合は、提供された Docker ダイジェストを含むプリフライト コンテナ イメージをダウンロードし、非公開レジストリにイメージをアップロードします。非公開レジストリを使用しない場合は、次のステップに進みます。
export SRC_IMAGE=gcr.io/gke-on-prem-release/preflight@sha256:9704315c6637750a014d0079ca04a8f97d0ca3735e175020377107c3181f6234 export DST_IMAGE=REGISTRY_ADDRESS/preflight:$(date +%Y-%m%d-%H%M%S) docker pull $SRC_IMAGE docker tag $SRC_IMAGE $DST_IMAGE docker push $DST_IMAGE
REGISTRY_ADDRESS
は、非公開レジストリのアドレスに置き換えます。次の bash スクリプトで、これらのプレースホルダの値を次のように設定します。
ADMIN_CLUSTER_KUBECONFIG
: 管理クラスタの kubeconfig ファイルのパス。REGISTRY_ADDRESS
: 管理クラスタが限定公開レジストリを使用している場合、これは前の手順で指定した限定公開レジストリのアドレスです。非公開レジストリを使用しない場合は、一般公開レジストリ(gcr.io/gke-on-prem-release
)を指定します。
#!/bin/bash UPGRADE_TARGET_VERSION=${1} CLUSTER_NAME=${2} ADMIN_KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG REGISTRY_ADDRESS=REGISTRY_ADDRESS pre_upgrade_namespace=kube-system if [[ -z "$CLUSTER_NAME" ]] then echo "Running the pre-ugprade tool before admin cluster upgrade" else echo "Running the pre-ugprade tool before user cluster upgrade" pre_upgrade_namespace=$CLUSTER_NAME-gke-onprem-mgmt fi kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: pre-upgrade-job namespace: $pre_upgrade_namespace EOF kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: creationTimestamp: null name: pre-upgrade-job-rolebinding-in-$pre_upgrade_namespace roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: onprem-user-cluster-controller-role subjects: - kind: ServiceAccount name: pre-upgrade-job namespace: $pre_upgrade_namespace EOF kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF apiVersion: batch/v1 kind: Job metadata: name: pre-upgrade-$(date +%Y-%m%d-%H%M%S) namespace: $pre_upgrade_namespace labels: onprem.cluster.gke.io/job-usage: preflight spec: ttlSecondsAfterFinished: 2592000 backoffLimit: 2 template: metadata: labels: onprem.cluster.gke.io/pod-usage: preflight spec: containers: - name: preflight image: $REGISTRY_ADDRESS/preflight@sha256:9704315c6637750a014d0079ca04a8f97d0ca3735e175020377107c3181f6234 imagePullPolicy: Always command: - /preflight - --upgrade-target-version - "$UPGRADE_TARGET_VERSION" - --cluster-name - "$CLUSTER_NAME" - --scenario - pre-upgrade restartPolicy: Never serviceAccountName: pre-upgrade-job imagePullSecrets: - name: private-registry-creds EOF
上記の bash スクリプトを
pre-upgrade.sh
というファイルに保存し、次のように実行可能にします。chmod +x pre-upgrade.sh
スクリプトを実行する
スクリプトの実行時に指定する引数は、ユーザー クラスタと管理クラスタのどちらをアップグレードするかによって異なります。
- 管理クラスタをアップグレードする前に、次のようにスクリプトを実行します。
./pre-upgrade.sh TARGET_VERSION
- ユーザー クラスタをアップグレードする前に、次のようにスクリプトを実行します。
./pre-upgrade.sh TARGET_VERSION USER_CLUSTER_NAME
USER_CLUSTER_NAME
は、アップグレードするユーザー クラスタの名前に置き換えます。出力は次のようになります。
job.batch/pre-upgrade-2023-0822-213551 created
ジョブによって制御されている Pod で次のコマンドを実行して、検証結果のリストを取得します。
kubectl logs -n JOB_NAMESPACE jobs/JOB_NAME \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
次のように置き換えます。
JOB_NAME
: スクリプトが前の手順から出力するジョブの名前。JOB_NAMESPACE
: 設定する値は、管理クラスタとユーザー クラスタのどちらをアップグレードするかによって異なります。管理クラスタをアップグレードする場合は、kube-system
を指定します。ユーザー クラスタをアップグレードする場合は、USER_CLUSTER_NAME-gke-onprem-mgmt
を指定します。
ジョブが完了するか、バックオフの制限に達して失敗するまで数分待ちます。結果で、ステータスが
Warning
、Unknown
、Failure
のチェックについてReason
を調べて、問題を解決できるかどうかを確認します。クラスタをアップグレードする前に、次のコマンドを実行してジョブを削除します。
kubectl delete jobs JOB_NAME -n JOB_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG