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 ドキュメント を参照してください。
以下のガイダンスを参照してください。
-
既存の
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
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 設定を変更するには、以下を実行します。
ContainerRuntimeConfig
CR の YAML ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ContainerRuntimeConfig
CR を作成します。oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CR が作成されたことを確認します。
oc get ContainerRuntimeConfig
$ oc get ContainerRuntimeConfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME AGE overlay-size 3m19s
NAME AGE overlay-size 3m19s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新規の
containerruntime
マシン設定が作成されていることを確認します。oc get machineconfigs | grep containerrun
$ oc get machineconfigs | grep containerrun
Copy 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 31s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてが準備状態にあるものとして表示されるまでマシン設定プールをモニターします。
oc get mcp worker
$ oc get mcp worker
Copy 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 9h
Copy 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 /host
Copy 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.conf
Copy 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.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新規の CRI-O 設定をワーカーノードに適用するには、ワーカーのマシン設定プールを編集します。
oc edit machineconfigpool worker
$ oc edit machineconfigpool worker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ContainerRuntimeConfig
CRD に設定したmatchLabels
名に基づいてcustom-crio
ラベルを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を保存して、マシン設定を表示します。
oc get machineconfigs
$ oc get machineconfigs
Copy 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 7m36s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらのオブジェクトの作成後に、変更が適用されるようにマシン設定プールを監視します。
oc get mcp worker
$ oc get mcp worker
Copy 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 20h
Copy 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 20h
Copy 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>
は、デコードする特定の値に置き換えます。