5.3. MCO 関連のカスタムリソースの設定
MCO は MachineConfig オブジェクトを管理する以外にも、2 つのカスタムリソース (CR)(KubeletConfig および ContainerRuntimeConfig) を管理します。これらの CR を使用すると、Kubelet および CRI-O コンテナーランタイムサービスの動作に影響を与えるノードレベルの設定を変更することができます。
5.3.1. kubelet パラメーターを編集するための KubeletConfig CR の作成 リンクのコピーリンクがクリップボードにコピーされました!
kubelet 設定は、現時点で Ignition 設定としてシリアル化されているため、直接編集することができます。ただし、新規の kubelet-config-controller も Machine Config Controller (MCC) に追加されます。これにより、KubeletConfig カスタムリソース (CR) を使用して kubelet パラメーターを編集できます。
kubeletConfig オブジェクトのフィールドはアップストリーム Kubernetes から kubelet に直接渡されるため、kubelet はそれらの値を直接検証します。kubeletConfig オブジェクトに無効な値があると、クラスターノードを利用できなくなる可能性があります。有効な値は、Kubernetes ドキュメント を参照してください。
以下のガイダンスを参照してください。
-
既存の
KubeletConfigCR を編集して既存の設定を編集するか、変更ごとに新規 CR を作成する代わりに新規の設定を追加する必要があります。CR を作成するのは、別のマシン設定プールを変更する場合、または一時的な変更を目的とした変更の場合のみにして、変更を元に戻すことができるようにすることを推奨します。 -
マシン設定プールごとに、そのプールに加える設定変更をすべて含めて、
KubeletConfigCR を 1 つ作成します。 -
必要に応じて、クラスターごとに 10 個を上限として、複数の
KubeletConfigCR を作成します。最初のKubeletConfigCR について、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 の最大数、およびワーカーノード上のコンテナーログの最大サイズを設定する方法を示した例です。
前提条件
設定するノードタイプの静的な
MachineConfigPoolCR に関連付けられたラベルを取得します。以下のいずれかの手順を実行します。マシン設定プールを表示します。
oc describe machineconfigpool <name>
$ oc describe machineconfigpool <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc describe machineconfigpool worker
$ oc describe machineconfigpool workerCopy 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-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
選択可能なマシン設定オブジェクトを表示します。
oc get machineconfig
$ oc get machineconfigCopy 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-mdv94Copy 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-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow KubeletConfigオブジェクトを作成します。oc create -f change-maxPods-cr.yaml
$ oc create -f change-maxPods-cr.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
KubeletConfigオブジェクトが作成されていることを確認します。oc get kubeletconfig
$ oc get kubeletconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME AGE set-kubelet-config 15m
NAME AGE set-kubelet-config 15mCopy 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 yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、以下の例のように
Trueおよびtype:Successのステータスを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.2. CRI-O パラメーターを編集するための ContainerRuntimeConfig CR の作成 リンクのコピーリンクがクリップボードにコピーされました!
特定のマシン設定プール (MCP) に関連付けられたノードの OpenShift Container Platform CRI-O ランタイムに関連付けられる設定の一部を変更することができます。ContainerRuntimeConfig カスタムリソース (CR) を使用して、設定値を設定し、MCP に一致するラベルを追加します。次に、MCO は関連付けられたノードで crio.conf および storage.conf 設定ファイルを更新された値を使用して再ビルドします。
ContainerRuntimeConfig CR を使用して実装された変更を元に戻すには、CR を削除する必要があります。マシン設定プールからラベルを削除しても、変更は元に戻されません。
ContainerRuntimeConfig CR を使用して以下の設定を変更することができます。
-
Log level:
logLevelパラメーターは CRI-Olog_levelパラメーターを設定します。これはログメッセージの詳細レベルです。デフォルトはinfo(log_level = info) です。他のオプションには、fatal、panic、error、warn、debug、およびtraceが含まれます。 -
Overlay size:
overlaySizeパラメーターは、コンテナーイメージの最大サイズである CRI-O Overlay ストレージドライバーのsizeパラメーターを設定します。 -
コンテナーランタイム:
defaultRuntimeパラメーターは、コンテナーランタイムをruncまたはcrunに設定します。デフォルトはruncです。
マシン設定プールごとに、そのプールに加える設定変更をすべて含めて、ContainerRuntimeConfig CR を 1 つ割り当てる必要があります。同じコンテンツをすべてのプールに適用している場合には、すべてのプールに必要となるのは ContainerRuntimeConfig CR 1 つだけです。
既存の ContainerRuntimeConfig CR を編集して既存の設定を編集するか、変更ごとに新規 CR を作成する代わりに新規の設定を追加する必要があります。異なるマシン設定プールを変更する場合や、変更が一時的で元に戻すことができる場合のみ、新しい ContainerRuntimeConfig CR の作成を推奨しています。
必要に応じて複数の ContainerRuntimeConfig CR を作成できますが、クラスターあたり 10 個までという制限があります。最初の ContainerRuntimeConfig CR は、containerruntime が付いたマシン設定が MCO によって作成されます。後続の各 CR については、数字の接尾辞が付いた新しい containerruntime マシン設定がコントローラーによって作成されます。たとえば、-2 という接尾辞を持つ containerruntime マシン設定がある場合、次の containerruntime マシン設定には -3 が付けられます。
マシン設定を削除する場合、制限を超えないようにそれらを逆の順序で削除する必要があります。たとえば、containerruntime-3 マシン設定を、containerruntime-2 マシン設定を削除する前に削除する必要があります。
接尾辞が containerruntime-9 のマシン設定があり、別の ContainerRuntimeConfig CR を作成する場合には、containerruntime マシン設定が 10 未満の場合でも新規マシン設定は作成されません。
複数の ContainerRuntimeConfig CR を示す例
oc get ctrcfg
$ oc get ctrcfg
出力例
NAME AGE ctr-overlay 15m ctr-level 5m45s
NAME AGE
ctr-overlay 15m
ctr-level 5m45s
複数の containerruntime マシン設定を示す例
oc get mc | grep container
$ oc get mc | grep container
出力例
次の例では、log_level フィールドを debug に設定し、オーバーレイサイズを 8 GB に設定します。
ContainerRuntimeConfig CR の例
手順
ContainerRuntimeConfig CR を使用して CRI-O 設定を変更するには、以下を実行します。
ContainerRuntimeConfigCR の YAML ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ContainerRuntimeConfigCR を作成します。oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow CR が作成されたことを確認します。
oc get ContainerRuntimeConfig
$ oc get ContainerRuntimeConfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME AGE overlay-size 3m19s
NAME AGE overlay-size 3m19sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新規の
containerruntimeマシン設定が作成されていることを確認します。oc get machineconfigs | grep containerrun
$ oc get machineconfigs | grep containerrunCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
99-worker-generated-containerruntime 2c9371fbb673b97a6fe8b1c52691999ed3a1bfc2 3.4.0 31s
99-worker-generated-containerruntime 2c9371fbb673b97a6fe8b1c52691999ed3a1bfc2 3.4.0 31sCopy to Clipboard Copied! Toggle word wrap Toggle overflow すべてが準備状態にあるものとして表示されるまでマシン設定プールをモニターします。
oc get mcp worker
$ oc get mcp workerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE worker rendered-worker-169 False True False 3 1 1 0 9h
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE worker rendered-worker-169 False True False 3 1 1 0 9hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 設定が CRI-O で適用されたことを確認します。
マシン設定プールのノードに対して
oc debugセッションを開き、chroot /hostを実行します。oc debug node/<node_name>
$ oc debug node/<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow chroot /host
sh-4.4# chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow crio.confファイルの変更を確認します。crio config | grep 'log_level'
sh-4.4# crio config | grep 'log_level'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
log_level = "debug"
log_level = "debug"Copy to Clipboard Copied! Toggle word wrap Toggle overflow `storage.conf` ファイルの変更を確認します。
head -n 7 /etc/containers/storage.conf
sh-4.4# head -n 7 /etc/containers/storage.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.3. CRI-O を使用した Overlay のデフォルトのコンテナールートパーティションの最大サイズの設定 リンクのコピーリンクがクリップボードにコピーされました!
各コンテナーのルートパーティションには、基礎となるホストの利用可能なディスク領域がすべて表示されます。以下のガイダンスに従って、すべてのコンテナーのルートディスクの最大サイズを設定します。
Overlay の最大サイズや、ログレベルなどの他の CRI-O オプションを設定するには、以下の ContainerRuntimeConfig カスタムリソース定義 (CRD) を作成します。
手順
設定オブジェクトを作成します。
oc apply -f overlaysize.yml
$ oc apply -f overlaysize.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新規の CRI-O 設定をワーカーノードに適用するには、ワーカーのマシン設定プールを編集します。
oc edit machineconfigpool worker
$ oc edit machineconfigpool workerCopy to Clipboard Copied! Toggle word wrap Toggle overflow ContainerRuntimeConfigCRD に設定したmatchLabels名に基づいてcustom-crioラベルを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を保存して、マシン設定を表示します。
oc get machineconfigs
$ oc get machineconfigsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新規の
99-worker-generated-containerruntimeおよびrendered-worker-xyzオブジェクトが作成されます。出力例
99-worker-generated-containerruntime 4173030d89fbf4a7a0976d1665491a4d9a6e54f1 3.4.0 7m42s rendered-worker-xyz 4173030d89fbf4a7a0976d1665491a4d9a6e54f1 3.4.0 7m36s
99-worker-generated-containerruntime 4173030d89fbf4a7a0976d1665491a4d9a6e54f1 3.4.0 7m42s rendered-worker-xyz 4173030d89fbf4a7a0976d1665491a4d9a6e54f1 3.4.0 7m36sCopy to Clipboard Copied! Toggle word wrap Toggle overflow これらのオブジェクトの作成後に、変更が適用されるようにマシン設定プールを監視します。
oc get mcp worker
$ oc get mcp workerCopy to Clipboard Copied! Toggle word wrap Toggle overflow ワーカーノードには、マシン数、更新数およびその他の詳細と共に
UPDATINGがTrueとして表示されます。出力例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE worker rendered-worker-xyz False True False 3 2 2 0 20h
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE worker rendered-worker-xyz False True False 3 2 2 0 20hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 完了すると、ワーカーノードは
UPDATINGをFalseに戻し、UPDATEDMACHINECOUNT数はMACHINECOUNTに一致します。出力例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE worker rendered-worker-xyz True False False 3 3 3 0 20h
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE worker rendered-worker-xyz True False False 3 3 3 0 20hCopy to Clipboard Copied! Toggle word wrap Toggle overflow ワーカーマシンを見ると、新規の 8 GB の最大サイズの設定がすべてのワーカーに適用されていることを確認できます。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナー内では、ルートパーティションが 8 GB であることを確認できます。
出力例
~ $ df -h Filesystem Size Used Available Use% Mounted on overlay 8.0G 8.0K 8.0G 0% /
~ $ df -h Filesystem Size Used Available Use% Mounted on overlay 8.0G 8.0K 8.0G 0% /Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.4. CRI-O のデフォルト機能のドロップインファイルの作成 リンクのコピーリンクがクリップボードにコピーされました!
特定のマシン設定プール (MCP) に関連付けられたノードの OpenShift Container Platform CRI-O ランタイムに関連付けられる設定の一部を変更することができます。コントローラーカスタムリソース (CR) を使用して、設定値を設定し、MCP に一致するラベルを追加します。その後、Machine Config Operator (MCO) が、更新された値を使用して、関連付けられたノード上の crio.conf および default.conf 設定ファイルを再構築します。
以前のバージョンの OpenShift Container Platform には、デフォルトで特定のマシン設定が含まれていました。新しいバージョンの OpenShift Container Platform に更新した場合、同じ OpenShift Container Platform バージョンで実行されるクラスターのマシン設定が同じになるように、その特定のマシン設定が保持されます。
必要に応じて複数の ContainerRuntimeConfig CR を作成できますが、クラスターあたり 10 個までという制限があります。最初の ContainerRuntimeConfig CR は、containerruntime が付いたマシン設定が MCO によって作成されます。後続の各 CR は、数字の接尾辞が付いた containerruntime マシン設定がコントローラーによって作成されます。たとえば、-2 という接尾辞を持つ containerruntime マシン設定がある場合、次の containerruntime マシン設定には -3 が付けられます。
マシン設定を削除する場合は、制限を超えないようにそれらを逆の順序で削除する必要があります。たとえば、containerruntime-2 マシン設定を削除する前に、containerruntime-3 マシン設定を削除します。
containerruntime-9 という接尾辞を持つマシン設定があるときに、別の ContainerRuntimeConfig CR を作成すると、containerruntime マシン設定が 10 個未満であっても、新しいマシン設定は作成されません。
複数の ContainerRuntimeConfig CR の例
oc get ctrcfg
$ oc get ctrcfg
出力例
NAME AGE ctr-overlay 15m ctr-level 5m45s
NAME AGE
ctr-overlay 15m
ctr-level 5m45s
複数の containerruntime 関連のシステム設定の例
cat /proc/1/status | grep Cap
$ cat /proc/1/status | grep Cap
capsh --decode=<decode_CapBnd_value>
$ capsh --decode=<decode_CapBnd_value>
- 1
<decode_CapBnd_value>は、デコードする特定の値に置き換えます。