PDB 違反タイムアウトを構成する

このドキュメントでは、クラスタノードのドレインが 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

マシン オブジェクトを開いて編集します。

kubectl --kubeconfig CLUSTER_KUBECONFIG edit machine MACHINE_NAME

MACHINE_NAME は、マシン オブジェクトの名前に置き換えます。

エディタで、次のアノテーションを追加します。

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 違反タイムアウト アノテーションは、新しく作成されたマシン オブジェクトには保持されません。