2.3. カーネル引数のノードへの追加
特殊なケースでは、クラスター内のノード群にカーネル引数を追加することで、カーネルの動作をカスタマイズし、特定のニーズに対応させることができます。
カーネル引数を追加する際は、慎重に行い、設定した引数がもたらす影響を十分に理解しておく必要があります。
カーネル引数を正しく使用しないと、システムが起動不可能になる可能性があります。
設定可能なカーネル引数の例には、以下が含まれます。
-
nosmt: カーネルの対称マルチスレッド (SMT) を無効にします。マルチスレッドは、各 CPU の複数の論理スレッドを許可します。潜在的なクロススレッド攻撃に関連するリスクを減らすために、マルチテナント環境での
nosmtの使用を検討できます。SMT を無効にすることは、基本的にパフォーマンスよりもセキュリティーを重視する選択をしていることになります。 enforcing=0: SELinux (Security Enhanced Linux) を Permissive モードで実行するように設定します。Permissive モードでは、システムは、SELinux が読み込んだセキュリティーポリシーを実行しているかのように動作します。これには、オブジェクトのラベル付けや、アクセスを拒否したエントリーをログに出力するなどの動作が含まれますが、いずれの操作も拒否される訳ではありません。Permissive モードは、実稼働システムでの使用はサポートされませんが、デバッグには役に立ちます。
警告実稼働環境の RHCOS での SELinux の無効化はサポートされていません。ノード上で SELinux が無効化された後は、実稼働クラスターに再度組み込む前に再プロビジョニングする必要があります。
カーネル引数の一覧と説明は、Kernel.org カーネルパラメーター を参照してください。
次の手順では、以下を特定する MachineConfig オブジェクトを作成します。
- カーネル引数を追加する一連のマシン。この場合、ワーカーロールを持つマシン。
- 既存のカーネル引数の最後に追加されるカーネル引数。
- マシン設定のリストで変更が適用される場所を示すラベル。
前提条件
-
cluster-admin特権がある。 - クラスターが実行中である。
手順
OpenShift Container Platform クラスターの既存の
MachineConfigをリスト表示し、マシン設定にラベルを付ける方法を判別します。$ oc get MachineConfig出力例
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 00-master 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 00-worker 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 01-master-container-runtime 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 01-master-kubelet 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 01-worker-container-runtime 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 01-worker-kubelet 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 99-master-generated-registries 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 99-master-ssh 3.2.0 40m 99-worker-generated-registries 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 99-worker-ssh 3.2.0 40m rendered-master-23e785de7587df95a4b517e0647e5ab7 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m rendered-worker-5d596d9293ca3ea80c896a1191735bb1 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33mカーネル引数を識別する
MachineConfigオブジェクトファイルを作成します (例:05-worker-kernelarg-selinuxpermissive.yaml)。apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker name: 05-worker-kernelarg-selinuxpermissive spec: kernelArguments: - enforcing=0ここでは、以下のようになります。
machineconfiguration.openshift.io/role- 変更を特定のノードに適用するためのラベルを指定します。
name- マシン設定 (05) の中でそれがどこに位置づけられるか、そしてそれが何をするか (SELinux の permissive モードを設定するカーネル引数を追加する) を識別するための名前を指定します。
kernelArguments-
enforcing=0として正確なカーネル引数を指定します。
新規のマシン設定を作成します。
$ oc create -f 05-worker-kernelarg-selinuxpermissive.yamlマシン設定で新規の追加内容を確認します。
$ oc get MachineConfig出力例
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 00-master 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 00-worker 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 01-master-container-runtime 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 01-master-kubelet 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 01-worker-container-runtime 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 01-worker-kubelet 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 05-worker-kernelarg-selinuxpermissive 3.5.0 105s 99-master-generated-registries 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 99-master-ssh 3.2.0 40m 99-worker-generated-registries 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m 99-worker-ssh 3.2.0 40m rendered-master-23e785de7587df95a4b517e0647e5ab7 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33m rendered-worker-5d596d9293ca3ea80c896a1191735bb1 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.5.0 33mノードを確認します。
$ oc get nodes出力例
NAME STATUS ROLES AGE VERSION ip-10-0-136-161.ec2.internal Ready worker 28m v1.33.4 ip-10-0-136-243.ec2.internal Ready master 34m v1.33.4 ip-10-0-141-105.ec2.internal Ready,SchedulingDisabled worker 28m v1.33.4 ip-10-0-142-249.ec2.internal Ready master 34m v1.33.4 ip-10-0-153-11.ec2.internal Ready worker 28m v1.33.4 ip-10-0-153-150.ec2.internal Ready master 34m v1.33.4変更が適用されているため、各ワーカーノードのスケジューリングが無効にされていることを確認できます。
ワーカーノードのいずれかに移動し、(ホストの
/proc/cmdline内の) カーネルコマンドライン引数をリスト表示して、カーネル引数が機能していることを確認します。$ oc debug node/ip-10-0-141-105.ec2.internal出力例
Starting pod/ip-10-0-141-105ec2internal-debug ... To use host binaries, run `chroot /host` sh-4.2# cat /host/proc/cmdline BOOT_IMAGE=/ostree/rhcos-... console=tty0 console=ttyS0,115200n8 rootflags=defaults,prjquota rw root=UUID=fd0... ostree=/ostree/boot.0/rhcos/16... coreos.oem.id=qemu coreos.oem.id=ec2 ignition.platform.id=ec2 enforcing=0 sh-4.2# exitenforcing=0引数が他のカーネル引数に追加されていることを確認できるはずです。