このドキュメントでは、クラスタノードのドレインが Pod Disruption Budget(PDB)に違反している場合のタイムアウト値を構成する方法について説明します。
ノードがドレインされたら、ノード上の Pod はすべて停止する必要があります。デフォルトでは、Pod の停止が PDB に違反している場合、ノードのドレインはブロックされます。
場合によっては、PDB 違反によってノードのドレインがブロックされる最大時間を構成したほうが良い場合もあります。たとえば、クラスタの更新やアップグレードを開始する前にタイムアウト値を構成したい場合や、現在 PDB 違反によってドレインがブロックされているノードのタイムアウト値を構成する必要がある場合などです。
タイムアウト値を設定する
各ノードは Machine オブジェクトによって表されます。
クラスタの Machine オブジェクトをリストします。
kubectl --kubeconfig CLUSTER_KUBECONFIG get machines
CLUSTR_KUBECONIFG は、クラスタの kubeconfig ファイルのパスに置き換えます。
出力例:
my-node-pool-7f864959cd-cw472 my-node-pool-7f864959cd-kh86m my-node-pool-7f864959cd-wtpvx
Machine オブジェクトを開いて編集します。
kubectl --kubeconfig CLUSTER_KUBECONFIG edit machine MACHINE_NAME
MACHINE_NAME は、Machine オブジェクトの名前に置き換えます。
エディタで、次のアノテーションを追加します。
onprem.cluster.gke.io/pdb-violation-timeout: TIMEOUT
TIMEOUT は、タイムアウト時間を指定する文字列に置き換えます。有効な単位は s、m、h です時間の値は、1h、1h30m、10m、100s のように指定します。
タイムアウト値を 0 に設定すると、PDB 違反はタイムアウトしなくなります。これはデフォルトの動作と同じです。
例:
apiVersion: cluster.k8s.io/v1alpha1 kind: Machine metadata: annotations: kubelet-version: 1.23.5-gke.1502 onprem.cluster.gke.io/gke-on-prem-version: 1.12.0-gke.430 vm-ip-address: 203.0.113.2 onprem.cluster.gke.io/pdb-violation-timeout: "5m"
編集セッションを閉じます。
ローリング アップデート
ローリング アップデートでは、まず新しいサージマシンが作成されます。その後、古いノードはドレインされ、すべての Pod が強制排除されると、古いマシン オブジェクトとノード オブジェクトの両方が削除されます。PDB 違反タイムアウト アノテーションは、新しく作成された Machine オブジェクトには保持されません。