第4章 MCO 関連のカスタムリソースの設定
MCO は MachineConfig
オブジェクトを管理する以外にも、2 つのカスタムリソース (CR)(KubeletConfig
および ContainerRuntimeConfig
) を管理します。これらの CR を使用すると、kubelet および CRI-O コンテナーランタイムサービスの動作に影響を与えるノードレベルの設定を変更できます。
4.1. kubelet パラメーターを編集するための KubeletConfig CR の作成 リンクのコピーリンクがクリップボードにコピーされました!
kubelet 設定は、現時点で Ignition 設定としてシリアル化されているため、直接編集することができます。ただし、新規の kubelet-config-controller
も Machine Config Controller (MCC) に追加されます。これにより、KubeletConfig
カスタムリソース (CR) を使用して kubelet パラメーターを編集できます。
kubeletConfig
オブジェクトのフィールドはアップストリーム Kubernetes から kubelet に直接渡されるため、kubelet はそれらの値を直接検証します。kubeletConfig
オブジェクトに無効な値があると、クラスターノードを利用できなくなる可能性があります。有効な値は、Kubernetes ドキュメント を参照してください。
以下のガイダンスを参照してください。
-
既存の
KubeletConfig
CR を編集して既存の設定を編集するか、変更ごとに新規 CR を作成する代わりに新規の設定を追加する必要があります。CR を作成するのは、別のマシン設定プールを変更する場合、または一時的な変更を目的とした変更の場合のみにして、変更を元に戻すことができるようにすることを推奨します。 -
マシン設定プールごとに、そのプールに加える設定変更をすべて含めて、
KubeletConfig
CR を 1 つ作成します。 -
必要に応じて、クラスターごとに 10 個を上限として、複数の
KubeletConfig
CR を作成します。最初のKubeletConfig
CR について、Machine Config Operator (MCO) はkubelet
で追加されたマシン設定を作成します。それぞれの後続の CR で、コントローラーは数字の接尾辞が付いた別のkubelet
マシン設定を作成します。たとえば、kubelet
マシン設定があり、その接尾辞が-2
の場合に、次のkubelet
マシン設定には-3
が付けられます。
kubelet またはコンテナーのランタイム設定をカスタムマシン設定プールに適用する場合、machineConfigSelector
のカスタムロールは、カスタムマシン設定プールの名前と一致する必要があります。
たとえば、次のカスタムマシン設定プールの名前は infra
であるため、カスタムロールも infra
にする必要があります。
マシン設定を削除する場合は、制限を超えないようにそれらを逆の順序で削除する必要があります。たとえば、kubelet-3
マシン設定を、kubelet-2
マシン設定を削除する前に削除する必要があります。
接尾辞が kubelet-9
のマシン設定があり、別の KubeletConfig
CR を作成する場合には、kubelet
マシン設定が 10 未満の場合でも新規マシン設定は作成されません。
KubeletConfig
CR の例
oc get kubeletconfig
$ oc get kubeletconfig
NAME AGE set-kubelet-config 15m
NAME AGE
set-kubelet-config 15m
KubeletConfig
マシン設定を示す例
oc get mc | grep kubelet
$ oc get mc | grep kubelet
... 99-worker-generated-kubelet-1 b5c5119de007945b6fe6fb215db3b8e2ceb12511 3.4.0 26m ...
...
99-worker-generated-kubelet-1 b5c5119de007945b6fe6fb215db3b8e2ceb12511 3.4.0 26m
...
次の手順は、ノードあたりの Pod の最大数、ノードあたりの PID の最大数、およびワーカーノード上のコンテナーログの最大サイズを設定する方法を示した例です。
前提条件
設定するノードタイプの静的な
MachineConfigPool
CR に関連付けられたラベルを取得します。以下のいずれかの手順を実行します。マシン設定プールを表示します。
oc describe machineconfigpool <name>
$ oc describe machineconfigpool <name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc describe machineconfigpool worker
$ oc describe machineconfigpool worker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ラベルが追加されると、
labels
の下に表示されます。
ラベルが存在しない場合は、キー/値のペアを追加します。
oc label machineconfigpool worker custom-kubelet=set-kubelet-config
$ oc label machineconfigpool worker custom-kubelet=set-kubelet-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
選択可能なマシン設定オブジェクトを表示します。
oc get machineconfig
$ oc get machineconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトで、2 つの kubelet 関連の設定である
01-master-kubelet
および01-worker-kubelet
を選択できます。ノードあたりの最大 Pod の現在の値を確認します。
oc describe node <node_name>
$ oc describe node <node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc describe node ci-ln-5grqprb-f76d1-ncnqq-worker-a-mdv94
$ oc describe node ci-ln-5grqprb-f76d1-ncnqq-worker-a-mdv94
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Allocatable
スタンザでvalue: pods: <value>
を検索します。出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じてワーカーノードを設定します。
kubelet 設定を含む次のような YAML ファイルを作成します。
重要特定のマシン設定プールをターゲットとする kubelet 設定は、依存するプールにも影響します。たとえば、ワーカーノードを含むプール用の kubelet 設定を作成すると、インフラストラクチャーノードを含むプールを含むすべてのサブセットプールにも設定が適用されます。これを回避するには、ワーカーノードのみを含む選択式を使用して新しいマシン設定プールを作成し、kubelet 設定でこの新しいプールをターゲットにする必要があります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
podPidsLimit
を使用して、任意の Pod 内の PID の最大数を設定します。 -
containerLogMaxSize
を使用して、コンテナーログファイルがローテーションされる前の最大サイズを設定します。 maxPods
を使用して、ノードあたりの Pod の最大数を設定します。注記kubelet が API サーバーと通信する速度は、1 秒あたりのクエリー (QPS) およびバースト値により異なります。デフォルト値の
50
(kubeAPIQPS
の場合) および100
(kubeAPIBurst
の場合) は、各ノードで制限された Pod が実行されている場合には十分な値です。ノード上に CPU およびメモリーリソースが十分にある場合には、kubelet QPS およびバーストレートを更新することが推奨されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
ラベルを使用してワーカーのマシン設定プールを更新します。
oc label machineconfigpool worker custom-kubelet=set-kubelet-config
$ oc label machineconfigpool worker custom-kubelet=set-kubelet-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow KubeletConfig
オブジェクトを作成します。oc create -f change-maxPods-cr.yaml
$ oc create -f change-maxPods-cr.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
KubeletConfig
オブジェクトが作成されていることを確認します。oc get kubeletconfig
$ oc get kubeletconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME AGE set-kubelet-config 15m
NAME AGE set-kubelet-config 15m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスター内のワーカーノードの数によっては、ワーカーノードが 1 つずつ再起動されるのを待機します。3 つのワーカーノードを持つクラスターの場合は、10 分から 15 分程度かかる可能性があります。
変更がノードに適用されていることを確認します。
maxPods
値が変更されたワーカーノードで確認します。oc describe node <node_name>
$ oc describe node <node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Allocatable
スタンザを見つけます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この例では、
pods
パラメーターはKubeletConfig
オブジェクトに設定した値を報告するはずです。
KubeletConfig
オブジェクトの変更を確認します。oc get kubeletconfigs set-kubelet-config -o yaml
$ oc get kubeletconfigs set-kubelet-config -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、以下の例のように
True
およびtype:Success
のステータスを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow