This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.4.2. ノードの使用
管理者として、クラスターの効率をさらに上げる多数のタスクを実行することができます。
4.2.1. ノード上の Pod を退避させる方法 リンクのコピーリンクがクリップボードにコピーされました!
Pod を退避させると、所定のノードからすべての Pod または選択した Pod を移行できます。
退避させることができるのは、レプリケーションコントローラーが管理している Pod のみです。レプリケーションコントローラーは、他のノードに新しい Pod を作成し、指定されたノードから既存の Pod を削除します。
ベア Pod、つまりレプリケーションコントローラーが管理していない Pod はデフォルトで影響を受けません。Pod セレクターを指定すると Pod のサブセットを退避できます。Pod セレクターはラベルに基づくので、指定したラベルを持つすべての Pod を退避できます。
Pod の退避を実行するときは、先にノードをスケジュール対象外としてマークする必要があります。
完了したら、oc adm uncordon
を使ってノードをスケジュール対象としてマークします。
oc adm uncordon <node1>
$ oc adm uncordon <node1>
以下のコマンドは、1 つまたは複数のノードのすべてのまたは選択した Pod を退避します。
oc adm drain <node1> <node2> [--pod-selector=<pod_selector>]
$ oc adm drain <node1> <node2> [--pod-selector=<pod_selector>]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドは、
--force
オプションを使用してベア Pod の削除を強制的に実行します。true
に設定されると、Pod がレプリケーションコントローラー、ReplicaSet、ジョブ、DeamonSet、または StatefulSet で管理されていない場合でも削除が続行されます。oc adm drain <node1> <node2> --force=true
$ oc adm drain <node1> <node2> --force=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドは、
--grace-period
を使用して、各 Pod を正常に終了するための期間 (秒単位) を設定します。負の値の場合には、Pod に指定されるデフォルト値が使用されます。oc adm drain <node1> <node2> --grace-period=-1
$ oc adm drain <node1> <node2> --grace-period=-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドは、
true
に設定された--ignore-daemonsets
フラグを使用して、DeamonSet が管理する Pod を無視します。oc adm drain <node1> <node2> --ignore-daemonsets=true
$ oc adm drain <node1> <node2> --ignore-daemonsets=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドは、
--timeout
フラグを使用して、中止する前の待機期間を設定します。値0
は無限の時間を設定します。oc adm drain <node1> <node2> --timeout=5s
$ oc adm drain <node1> <node2> --timeout=5s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドは、
true
に設定された--delete-local-data
フラグを使用して、emptyDir を使用する Pod がある場合にも Pod を削除します。ローカルデータはノードがドレイン (解放) される場合に削除されます。oc adm drain <node1> <node2> --delete-local-data=true
$ oc adm drain <node1> <node2> --delete-local-data=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドは、
true
に設定された--dry-run
オプションを使用して、退避を実行せずに移行するオブジェクトを一覧表示します。oc adm drain <node1> <node2> --dry-run=true
$ oc adm drain <node1> <node2> --dry-run=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 特定のノード名 (例:
<node1> <node2>
) を指定する代わりに、--selector=<node_selector>
オプションを使用し、選択したノードで Pod を退避することができます。
4.2.2. ノードでラベルを更新する方法について リンクのコピーリンクがクリップボードにコピーされました!
ノード上の任意のラベルを更新できます。
ノードラベルは、ノードがマシンによってバックアップされている場合でも、ノードが削除されると永続しません。
MachineSet への変更は、MachineSet が所有する既存のマシンには適用されません。たとえば、編集されたか、または既存 MachineSet に追加されたラベルは、MachineSet に関連付けられた既存マシンおよびノードには伝播しません。
以下のコマンドは、ノードのラベルを追加または更新します。
oc label node <node> <key_1>=<value_1> ... <key_n>=<value_n>
$ oc label node <node> <key_1>=<value_1> ... <key_n>=<value_n>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
oc label nodes webconsole-7f7f6 unhealthy=true
$ oc label nodes webconsole-7f7f6 unhealthy=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドは、namespace 内のすべての Pod を更新します。
oc label pods --all <key_1>=<value_1>
$ oc label pods --all <key_1>=<value_1>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
oc label pods --all status=unhealthy
$ oc label pods --all status=unhealthy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.3. ノードをスケジュール対象外 (Unschedulable) またはスケジュール対象 (Schedulable) としてマークする方法 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトで、Ready
ステータスの正常なノードはスケジュール対象としてマークされます。つまり、新規 Pod をこのノードに配置することができます。手動でノードをスケジュール対象外としてマークすると、新規 Pod のノードでのスケジュールがブロックされます。ノード上の既存 Pod には影響がありません。
以下のコマンドは、ノードをスケジュール対象外としてマークします。
oc adm cordon <node>
$ oc adm cordon <node>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下は例になります。
oc adm cordon node1.example.com
$ oc adm cordon node1.example.com node/node1.example.com cordoned NAME LABELS STATUS node1.example.com kubernetes.io/hostname=node1.example.com Ready,SchedulingDisabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドは、現時点でスケジュール対象外のノードをスケジュール対象としてマークします。
oc adm uncordon <node1>
$ oc adm uncordon <node1>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、特定のノード名 (たとえば
<node>
) を指定する代わりに、--selector=<node_selector>
オプションを使用して選択したノードをスケジュール対象またはスケジュール対象外としてマークすることができます。
4.2.4. マスターノードをスケジュール対象 (Schedulable) として設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform 4.2 の時点で、マスターノードをスケジュール対象 (Schedulable) に設定できるようになりました。つまり、新規 Pod はマスターノードに配置できるようになりました。デフォルトで、マスターノードはスケジュール対象ではありません。ただし、クラスターにワーカーノードが含まれていない場合、マスターノードはデフォルトでスケジュール対象としてマークされます。
バージョン 4.3 では、ワーカーノードのないクラスターを作成する機能は、テクノロジープレビューとして、ベアメタルにデプロイされるクラスターのみで利用できます。すべてのクラスタータイプについては、マスターをスケジュール対象 (Schedulable) に設定できますが、ワーカーノードを保持する必要があります。
マスターノードをスケジュール対象/対象外としてマークするには、mastersSchedulable
フィールドを設定します。
手順
schedulers.config.openshift.io
リソースを編集します。oc edit schedulers.config.openshift.io cluster
$ oc edit schedulers.config.openshift.io cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mastersSchedulable
フィールドを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- マスターノードがスケジュール対象 (Schedulable) になるのを許可する場合は
true
に設定し、マスターノードがスケジュール対象となるのを拒否するは、false
に設定します。
- 変更を適用するためにファイルを保存します。
4.2.5. ノードの削除 リンクのコピーリンクがクリップボードにコピーされました!
4.2.5.1. クラスターからのノードの削除 リンクのコピーリンクがクリップボードにコピーされました!
CLI を使用してノードを削除する場合、ノードオブジェクトは Kubernetes で削除されますが、ノード自体にある Pod は削除されません。レプリケーションコントローラーで管理されないベア Pod は、OpenShift Container Platform からはアクセスできなくなります。レプリケーションコントローラーで管理されるベア Pod は、他の利用可能なノードに再スケジュールされます。ローカルのマニフェスト Pod は削除する必要があります。
手順
OpenShift Container Platform クラスターからノードを削除するには、適切な MachineSet を編集します。
ベアメタルでクラスターを実行している場合、MachineSet を編集してノードを削除することはできません。MachineSet は、クラスターがクラウドプロバイダーに統合されている場合にのみ利用できます。代わりに、ノードを手作業で削除する前に、ノードをスケジュール解除し、ドレイン (解放)する必要があります。
クラスターにある MachineSet を表示します。
oc get machinesets -n openshift-machine-api
$ oc get machinesets -n openshift-machine-api
Copy to Clipboard Copied! Toggle word wrap Toggle overflow MachineSet は <clusterid>-worker-<aws-region-az> の形式で一覧表示されます。
MachineSet をスケーリングします。
oc scale --replicas=2 machineset <machineset> -n openshift-machine-api
$ oc scale --replicas=2 machineset <machineset> -n openshift-machine-api
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
MachineSet を使用してクラスターをスケーリングする方法の詳細は、MachineSet の手動によるスケーリングについて参照してください。
4.2.5.2. ベアメタルクラスターからのノードの削除 リンクのコピーリンクがクリップボードにコピーされました!
CLI を使用してノードを削除する場合、ノードオブジェクトは Kubernetes で削除されますが、ノード自体にある Pod は削除されません。レプリケーションコントローラーで管理されないベア Pod は、OpenShift Container Platform からはアクセスできなくなります。レプリケーションコントローラーで管理されるベア Pod は、他の利用可能なノードに再スケジュールされます。ローカルのマニフェスト Pod は削除する必要があります。
手順
以下の手順を実行して、ベアメタルで実行されている OpenShift Container Platform クラスターからノードを削除します。
ノードにスケジュール対象外 (unschedulable) のマークを付けます。
oc adm cordon <node_name>
$ oc adm cordon <node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノード上のすべての Pod をドレインします。
oc adm drain <node_name> --force=true
$ oc adm drain <node_name> --force=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターからノードを削除します。
oc delete node <node_name>
$ oc delete node <node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ノードオブジェクトはクラスターから削除されていますが、これは再起動後や kubelet サービスが再起動される場合にクラスターに再び参加することができます。ノードとそのすべてのデータを永続的に削除するには、ノードの使用を停止する必要があります。
4.2.6. カーネル引数のノードへの追加 リンクのコピーリンクがクリップボードにコピーされました!
特殊なケースとして、クラスターのノードセットにカーネル引数を追加する必要がある場合があります。これは十分に注意して実行する必要があり、設定する引数による影響を十分に理解している必要があります。
カーネル引数を正しく使用しないと、システムが起動不可能になる可能性があります。
設定可能なカーネル引数の例には、以下が含まれます。
- selinux=0: SELinux (Security Enhanced Linux) を無効にします。実稼働環境には推奨されませんが、SELinux を無効にすると、パフォーマンスが 2%~ 3% 上がります。
-
nosmt: カーネルの対称マルチスレッド (SMT) を無効にします。マルチスレッドは、各 CPU の複数の論理スレッドを許可します。潜在的なクロススレッド攻撃に関連するリスクを減らすために、マルチテナント環境での
nosmt
の使用を検討できます。SMT を無効にすることは、基本的にパフォーマンスよりもセキュリティーを重視する選択をしていることになります。
カーネル引数の一覧と説明については、「Kernel.org カーネルパラメーター」を参照してください。
次の手順では、以下を識別する MachineConfig を作成します。
- カーネル引数を追加する一連のマシン。この場合、ワーカーロールを持つマシン。
- 既存のカーネル引数の最後に追加されるカーネル引数。
- MachineConfig の一覧で変更が適用される場所を示すラベル。
前提条件
- 作業用の OpenShift Container Platform クラスターに対する管理者権限が必要です。
手順
OpenShift Container Platform クラスターの既存の MachineConfig を一覧表示し、MachineConfig にラベルを付ける方法を判別します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネル引数を識別する MachineConfig ファイルを作成します (例:
05-worker-kernelarg-selinuxoff.yaml
)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新規の MachineConfig を作成します。
oc create -f 05-worker-kernelarg-selinuxoff.yaml
$ oc create -f 05-worker-kernelarg-selinuxoff.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow MachineConfig で新規の追加内容を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更が適用されているため、各ワーカーノードのスケジューリングが無効にされていることを確認できます。
ワーカーノードのいずれかに移動し、カーネルコマンドライン引数 (ホストの
/proc/cmdline
内) を一覧表示して、カーネル引数が機能することを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow selinux=0
引数が他のカーネル引数に追加されていることを確認できるはずです。
4.2.7. 追加リソース リンクのコピーリンクがクリップボードにコピーされました!
MachineSet を使用してクラスターをスケーリングする方法の詳細は、「 Manually scaling a MachineSet」を参照してください。