第24章 インストール設定
24.1. ノードのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、Ignition を介してクラスター全体の設定とマシンごとの設定の両方をサポートしています。そのため、オペレーティングシステムに対する任意のパーティショニングとファイルコンテンツの変更が可能です。一般に、設定ファイルが Red Hat Enterprise Linux (RHEL) で文書化されている場合、Ignition を介した変更がサポートされます。
マシン設定の変更をデプロイするには 2 つの方法があります。
-
openshift-install
の実行時にクラスターを起動するためにマニフェストファイルに組み込まれるマシン設定を作成します。 - Machine Config Operator を使用して実行中の OpenShift Container Platform ノードに渡されるマシン設定を作成します。
さらに、ベアメタルノードのインストール時に coreos-installer
に渡される Ignition 設定などの参照設定を変更すると、マシンごとの設定が可能になります。現在、これらの変更はマシン設定オペレーターに表示されません。
以下のセクションでは、この方法でノード上で設定する必要が生じる可能性のある機能を説明します。
24.1.1. Butane でのマシン設定の作成 リンクのコピーリンクがクリップボードにコピーされました!
マシン設定は、ユーザーおよびファイルシステムの作成、ネットワークの設定、systemd ユニットのインストールなどを行う方法をマシンに指示することで、コントロールプレーンマシンおよびワーカーマシンを設定するために使用されます。
マシン設定の変更は困難である可能性があるため、Butane 設定を使用してマシン設定を作成することができます。これにより、ノードの設定がより容易になります。
24.1.1.1. Butane について リンクのコピーリンクがクリップボードにコピーされました!
Butane は、OpenShift Container Platform が使用するコマンドラインユーティリティーで、マシン設定を作成するための便利で簡略化した構文を提供したり、マシン設定の追加検証を実行したりします。Butane が受け入れる Butane 設定ファイルの形式は、OpenShift Butane config spec で定義されています。
24.1.1.2. Butane のインストール リンクのコピーリンクがクリップボードにコピーされました!
Butane ツール (butane
) をインストールして、コマンドラインインターフェイスから OpenShift Container Platform マシン設定を作成できます。対応するバイナリーファイルをダウンロードし、Linux、Windows、または macOS に butane
をインストールできます。
Butane リリースは、古いリリースと、Fedora CoreOS Config Transpiler (FCCT) との後方互換性があります。
手順
- Butane イメージのダウンロードページ (https://mirror.openshift.com/pub/openshift-v4/clients/butane/) に移動してください。
butane
バイナリーを取得します。最新バージョンの Butane の場合は、最新の
butane
イメージを現在のディレクトリーに保存します。curl https://mirror.openshift.com/pub/openshift-v4/clients/butane/latest/butane --output butane
$ curl https://mirror.openshift.com/pub/openshift-v4/clients/butane/latest/butane --output butane
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: aarch64 や ppc64le など、Butane をインストールする特定のタイプのアーキテクチャーの場合は、適切な URL を指定してください。以下に例を示します。
curl https://mirror.openshift.com/pub/openshift-v4/clients/butane/latest/butane-aarch64 --output butane
$ curl https://mirror.openshift.com/pub/openshift-v4/clients/butane/latest/butane-aarch64 --output butane
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ダウンロード済みのバイナリーファイルを実行可能にします。
chmod +x butane
$ chmod +x butane
Copy to Clipboard Copied! Toggle word wrap Toggle overflow butane
バイナリーファイルをPATH
にあるディレクトリーに移動します。PATH
を確認するには、ターミナルを開き、以下のコマンドを実行します。echo $PATH
$ echo $PATH
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証手順
butane
コマンドを実行して、Butane ツールを使用できるようになりました。butane <butane_file>
$ butane <butane_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.1.1.3. Butane を使用した MachineConfig オブジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
Butane を使用して MachineConfig
オブジェクトを作成できるため、インストール時に、または Machine Config Operator を使用して、ワーカーノードまたはコントロールプレーンノードを設定できます。
前提条件
-
butane
ユーティリティーをインストールした。
手順
Butane 設定ファイルを作成します。以下の例では、
99-worker-custom.bu
という名前のファイルを作成します。このファイルは、カーネルデバッグメッセージを表示するようにシステムコンソールを設定し、chrony タイムサービスのカスタム設定を指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記99-worker-custom.bu
ファイルは、ワーカーノードのマシン設定を作成するように設定されます。コントロールプレーンノードにデプロイするには、ロールをworker
からmaster
に変更します。どちらの方法でも、デプロイメントの種類ごとに異なるファイル名を使用して手順全体を繰り返すことができます。直前の手順で作成したファイルを Butane に指定して
MachineConfig
オブジェクトを作成します。butane 99-worker-custom.bu -o ./99-worker-custom.yaml
$ butane 99-worker-custom.bu -o ./99-worker-custom.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow MachineConfig
オブジェクト YAML ファイルは、マシンの設定を終了するために作成されます。-
将来的に
MachineConfig
オブジェクトを更新する必要がある場合に備えて、Butane 設定を保存します。 クラスターがまだ起動していない場合は、マニフェストファイルを生成し、
MachineConfig
オブジェクト YAML ファイルをopenshift
ディレクトリーに追加します。クラスターがすでに実行中の場合は、ファイルを以下のように適用します。oc create -f 99-worker-custom.yaml
$ oc create -f 99-worker-custom.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.1.2. day-1 カーネル引数の追加 リンクのコピーリンクがクリップボードにコピーされました!
多くの場合、カーネル引数を day-2 アクティビティーとして変更することが推奨されますが、初期クラスターのインストール時にすべてのマスターまたはワーカーノードにカーネル引数を追加することができます。以下は、クラスターのインストール時にカーネル引数を追加して、システムの初回起動前に有効にする必要が生じる可能性のある理由です。
- システムの起動前に、低レベルのネットワーク設定を実行する必要がある場合。
SELinux などの機能を無効にし、初回起動時にシステムに影響を与えないようにする必要がある場合。
警告実稼働環境の RHCOS での SELinux の無効化はサポートされていません。ノード上で SELinux が無効になったら、再プロビジョニングしてから実稼働クラスターに再び追加する必要があります。
カーネル引数をマスターまたはワーカーノードに追加するには、MachineConfig
オブジェクトを作成し、そのオブジェクトをクラスターのセットアップ時に Ignition が使用するマニフェストファイルのセットに挿入することができます。
起動時に RHEL 8 カーネルに渡すことのできる引数のリストについては、Kernel.org カーネルパラメーター を参照してください。カーネル引数が OpenShift Container Platform の初回インストールを完了するために必要な場合は、この手順でカーネル引数のみを追加することが推奨されます。
手順
インストールプログラムが含まれるディレクトリーに切り替え、クラスターの Kubernetes マニフェストを生成します。
./openshift-install create manifests --dir <installation_directory>
$ ./openshift-install create manifests --dir <installation_directory>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - カーネル引数をワーカーまたコントロールプレーンノードに追加するかどうかを決定します。
openshift
ディレクトリーでファイル (例:99-openshift-machineconfig-master-kargs.yaml
) を作成し、カーネル設定を追加するためにMachineConfig
オブジェクトを定義します。この例では、loglevel=7
カーネル引数をコントロールプレーンノードに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネル引数をワーカーノードに追加する場合は、
master
をworker
に切り替えます。マスターおよびワーカーノードの両方に追加するために別々の YAML ファイルを作成します。
クラスターの作成を継続できます。
24.1.3. カーネルモジュールのノードへの追加 リンクのコピーリンクがクリップボードにコピーされました!
大半の一般的なハードウェアの場合、Linux カーネルには、コンピューターの起動時にそのハードウェアを使用するために必要となるデバイスドライバーモジュールが含まれます。ただし、一部のハードウェアの場合、Linux でモジュールを利用できません。したがって、各ホストコンピューターにこれらのモジュールを提供する方法を確保する必要があります。この手順では、OpenShift Container Platform クラスターのノードについてこれを実行する方法を説明します。
この手順に従ってカーネルモジュールを最初にデプロイする際、モジュールは現行のカーネルに対して利用可能になります。新規カーネルがインストールされると、kmods-via-containers ソフトウェアはモジュールを再ビルドし、デプロイしてそのモジュールの新規カーネルと互換性のあるバージョンが利用可能になるようにします。
この機能によって各ノードでモジュールが最新の状態に保てるようにするために、以下が実行されます。
- 新規カーネルがインストールされているかどうかを検出するために、システムの起動時に起動する各ノードに systemd サービスを追加します。
- 新規カーネルが検出されると、サービスはモジュールを再ビルドし、これをカーネルにインストールします。
この手順に必要なソフトウェアの詳細は、kmods-via-containers github サイトを参照してください。
以下の重要な点に留意してください。
- この手順はテクノロジープレビューです。
-
ソフトウェアのツールおよびサンプルは公式の RPM 形式で利用できず、現時点ではこの手順に記載されている非公式の
github.com
サイトからしか取得できません。 - この手順で追加する必要がある可能性のあるサードパーティーのカーネルモジュールについては Red Hat はサポートしません。
-
この手順では、カーネルモジュールのビルドに必要なソフトウェアは RHEL 8 コンテナーにデプロイされます。モジュールは、ノードが新規カーネルを取得する際に各ノードで自動的に再ビルドされることに注意してください。このため、各ノードには、モジュールの再ビルドに必要なカーネルと関連パッケージを含む
yum
リポジトリーへのアクセスが必要です。このコンテンツは、有効な RHEL サブスクリプションを使用して効果的に利用できます。
24.1.3.1. カーネルモジュールコンテナーのビルドおよびテスト リンクのコピーリンクがクリップボードにコピーされました!
カーネルモジュールを OpenShift Container Platform クラスターにデプロイする前に、プロセスを別の RHEL システムでテストできます。カーネルモジュールのソースコード、KVC フレームワーク、および kmod-via-containers ソフトウェアを収集します。次にモジュールをビルドし、テストします。RHEL 8 システムでこれを行うには、以下を実行します。
手順
RHEL 8 システムを登録します。
subscription-manager register
# subscription-manager register
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL 8 システムにサブスクリプションを割り当てます。
subscription-manager attach --auto
# subscription-manager attach --auto
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ソフトウェアとコンテナーのビルドに必要なソフトウェアをインストールします。
yum install podman make git -y
# yum install podman make git -y
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kmod-via-containers
リポジトリーのクローンを作成します。リポジトリーのフォルダーを作成します。
mkdir kmods; cd kmods
$ mkdir kmods; cd kmods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リポジトリーのクローンを作成します。
git clone https://github.com/kmods-via-containers/kmods-via-containers
$ git clone https://github.com/kmods-via-containers/kmods-via-containers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
RHEL 8 ビルドホストに KVC フレームワークインスタンスをインストールし、モジュールをテストします。これにより、
kmods-via-container
systemd サービスが追加され、読み込まれます。kmod-via-containers
ディレクトリーに移動します。cd kmods-via-containers/
$ cd kmods-via-containers/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow KVC フレームワークインスタンスをインストールします。
sudo make install
$ sudo make install
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemd マネージャー設定を再読み込みします。
sudo systemctl daemon-reload
$ sudo systemctl daemon-reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
カーネルモジュールのソースコードを取得します。ソースコードは、制御下になく、他から提供されるサードパーティーモジュールをビルドするために使用される可能性があります。システムに対してクローン作成できる以下の
kvc-simple-kmod
サンプルのコンテンツと同様のコンテンツが必要になります。cd .. ; git clone https://github.com/kmods-via-containers/kvc-simple-kmod
$ cd .. ; git clone https://github.com/kmods-via-containers/kvc-simple-kmod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、設定ファイル
simple-kmod.conf
を編集し、Dockerfile の名前をDockerfile.rhel
に変更します。kvc-simple-kmod
ディレクトリーに移動します。cd kvc-simple-kmod
$ cd kvc-simple-kmod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dockerfile の名前を変更します。
cat simple-kmod.conf
$ cat simple-kmod.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dockerfile の例
KMOD_CONTAINER_BUILD_CONTEXT="https://github.com/kmods-via-containers/kvc-simple-kmod.git" KMOD_CONTAINER_BUILD_FILE=Dockerfile.rhel KMOD_SOFTWARE_VERSION=dd1a7d4 KMOD_NAMES="simple-kmod simple-procfs-kmod"
KMOD_CONTAINER_BUILD_CONTEXT="https://github.com/kmods-via-containers/kvc-simple-kmod.git" KMOD_CONTAINER_BUILD_FILE=Dockerfile.rhel KMOD_SOFTWARE_VERSION=dd1a7d4 KMOD_NAMES="simple-kmod simple-procfs-kmod"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
この例ではカーネルモジュール
simple-kmod
のkmods-via-containers@.service
のインスタンスを作成します。sudo make install
$ sudo make install
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kmods-via-containers@.service
インスタンスを有効にします。sudo kmods-via-containers build simple-kmod $(uname -r)
$ sudo kmods-via-containers build simple-kmod $(uname -r)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemd サービスを有効にし、起動します。
sudo systemctl enable kmods-via-containers@simple-kmod.service --now
$ sudo systemctl enable kmods-via-containers@simple-kmod.service --now
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスのステータスを確認します。
sudo systemctl status kmods-via-containers@simple-kmod.service
$ sudo systemctl status kmods-via-containers@simple-kmod.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
● kmods-via-containers@simple-kmod.service - Kmods Via Containers - simple-kmod Loaded: loaded (/etc/systemd/system/kmods-via-containers@.service; enabled; vendor preset: disabled) Active: active (exited) since Sun 2020-01-12 23:49:49 EST; 5s ago...
● kmods-via-containers@simple-kmod.service - Kmods Via Containers - simple-kmod Loaded: loaded (/etc/systemd/system/kmods-via-containers@.service; enabled; vendor preset: disabled) Active: active (exited) since Sun 2020-01-12 23:49:49 EST; 5s ago...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
カーネルモジュールがロードされていることを確認するには、
lsmod
コマンドを使用してモジュールをリスト表示します。lsmod | grep simple_
$ lsmod | grep simple_
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
simple_procfs_kmod 16384 0 simple_kmod 16384 0
simple_procfs_kmod 16384 0 simple_kmod 16384 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 他の方法を使用して
simple-kmod
のサンプルが機能していることを確認します。dmesg
を使用してカーネルリングバッファーで "Hello world" メッセージを探します。dmesg | grep 'Hello world'
$ dmesg | grep 'Hello world'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
[ 6420.761332] Hello world from simple_kmod.
[ 6420.761332] Hello world from simple_kmod.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /proc
でsimple-procfs-kmod
の値を確認します。sudo cat /proc/simple-procfs-kmod
$ sudo cat /proc/simple-procfs-kmod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
simple-procfs-kmod number = 0
simple-procfs-kmod number = 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow spkut
コマンドを実行して、モジュールの詳細情報を取得します。sudo spkut 44
$ sudo spkut 44
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
その後は、システムの起動時に、このサービスは新規カーネルが実行中であるかどうかをチェックします。新規カーネルがある場合は、サービスは新規バージョンのカーネルモジュールをビルドし、これをロードします。モジュールがすでにビルドされている場合は、これをロードします。
24.1.3.2. カーネルモジュールの OpenShift Container Platform へのプロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスターの初回起動時にカーネルモジュールを有効にする必要があるかどうかに応じて、以下のいずれかの方法でデプロイするようにカーネルモジュールを設定できます。
-
クラスターインストール時のカーネルモジュールのプロビジョニング (day-1): コンテンツを
MachineConfig
として作成し、これをマニフェストファイルのセットと共に組み込み、これをopenshift-install
に提供できます。 - Machine Config Operator によるカーネルモジュールのプロビジョニング (day-2): カーネルモジュールを追加する際にクラスターが稼働するまで待機できる場合、Machine Config Operator (MCO) を使用してカーネルモジュールソフトウェアをデプロイできます。
いずれの場合も、各ノードは、新規カーネルの検出時にカーネルパッケージと関連ソフトウェアパッケージを取得できる必要があります。該当するコンテンツを取得できるように各ノードをセットアップする方法はいくつかあります。
- 各ノードに RHEL エンタイトルメントを提供します。
-
/etc/pki/entitlement
ディレクトリーから、既存 RHEL ホストの RHEL エンタイトルメントを取得し、それらを Ignition 設定の作成時に提供する他のファイルと同じ場所にコピーします。 -
Dockerfile 内で、カーネルおよびその他のパッケージを含む
yum
リポジトリーへのポインターを追加します。これには、新たにインストールされたカーネルと一致させる必要があるため、新規のカーネルパッケージが含まれている必要があります。
24.1.3.2.1. MachineConfig オブジェクトを介したカーネルモジュールのプロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
MachineConfig
オブジェクトでカーネルモジュールソフトウェアをパッケージ化することで、そのソフトウェアをインストール時に、または Machine Config Operator を使用して、ワーカーノードまたはコントロールプレーンノードに配信できます。
手順
RHEL 8 システムを登録します。
subscription-manager register
# subscription-manager register
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL 8 システムにサブスクリプションを割り当てます。
subscription-manager attach --auto
# subscription-manager attach --auto
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ソフトウェアのビルドに必要なソフトウェアをインストールします。
yum install podman make git -y
# yum install podman make git -y
Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルモジュールおよびツールをホストするディレクトリーを作成します。
mkdir kmods; cd kmods
$ mkdir kmods; cd kmods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kmods-via-containers
ソフトウェアを取得します。kmods-via-containers
リポジトリーのクローンを作成します。git clone https://github.com/kmods-via-containers/kmods-via-containers
$ git clone https://github.com/kmods-via-containers/kmods-via-containers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kvc-simple-kmod
リポジトリーのクローンを作成します。git clone https://github.com/kmods-via-containers/kvc-simple-kmod
$ git clone https://github.com/kmods-via-containers/kvc-simple-kmod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
モジュールソフトウェアを取得します。この例では、
kvc-simple-kmod
が使用されます。 fakeroot ディレクトリーを作成し、先にクローン作成したリポジトリーを使用して Ignition で配信するファイルを使用してこれを設定します。
ディレクトリーを作成します。
FAKEROOT=$(mktemp -d)
$ FAKEROOT=$(mktemp -d)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kmod-via-containers
ディレクトリーに移動します。cd kmods-via-containers
$ cd kmods-via-containers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow KVC フレームワークインスタンスをインストールします。
make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/
$ make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kvc-simple-kmod
ディレクトリーに移動します。cd ../kvc-simple-kmod
$ cd ../kvc-simple-kmod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow インスタンスを作成します。
make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/
$ make install DESTDIR=${FAKEROOT}/usr/local CONFDIR=${FAKEROOT}/etc/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
fakeroot ディレクトリーのクローンを作成し、以下のコマンドを実行してシンボリックリンクをターゲットのコピーに置き換えます。
cd .. && rm -rf kmod-tree && cp -Lpr ${FAKEROOT} kmod-tree
$ cd .. && rm -rf kmod-tree && cp -Lpr ${FAKEROOT} kmod-tree
Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルモジュールツリーを埋め込む Butane 設定ファイル (
99-simple-kmod.bu
) を作成し、systemd サービスを有効にします。注記Butane の詳細は、「Butane を使用したマシン設定の作成」を参照してください。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- コントロールプレーンノードでデプロイするには、
worker
をmaster
に変更します。コントロールプレーンおよびワーカーノードの両方にデプロイするには、それぞれのノードのタイプに対してこれらの残りの手順を 1 回ずつ実行します。
Butane を使用して、配信されるファイルおよび設定を含むマシン設定 YAML ファイルの
99-simple-kmod.yaml
を生成します。butane 99-simple-kmod.bu --files-dir . -o 99-simple-kmod.yaml
$ butane 99-simple-kmod.bu --files-dir . -o 99-simple-kmod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターがまだ起動していない場合は、マニフェストファイルを生成し、そのファイルを
openshift
ディレクトリーに追加します。クラスターがすでに実行中の場合は、ファイルを以下のように適用します。oc create -f 99-simple-kmod.yaml
$ oc create -f 99-simple-kmod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードは
kmods-via-containers@simple-kmod.service
サービスを起動し、カーネルモジュールがロードされます。カーネルモジュールがロードされていることを確認するには、ノードにログインすることができます (
oc debug node/<openshift-node>
を使用してからchroot /host
を使用します)。モジュールをリスト表示するには、lsmod
コマンドを使用します。lsmod | grep simple_
$ lsmod | grep simple_
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
simple_procfs_kmod 16384 0 simple_kmod 16384 0
simple_procfs_kmod 16384 0 simple_kmod 16384 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.1.4. インストール時のディスクの暗号化およびミラーリング リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform のインストール時に、クラスターノードでブートディスクの暗号化およびミラーリングを有効にできます。
24.1.4.1. ディスクの暗号化について リンクのコピーリンクがクリップボードにコピーされました!
インストール時に、コントロールプレーンおよびコンピュートノードのブートディスクの暗号化を有効できます。OpenShift Container Platform は Trusted Platform Module (TPM) v2 および Tang 暗号化モードをサポートします。
- TPM v2
- これは優先モードです。TPM v2 は、パスフレーズをサーバー上の安全な暗号プロセッサーに保存します。このモードを使用すると、ディスクがサーバーから取り外された場合に、クラスターノード上のブートディスクデータの暗号化が解除されないようにすることができます。
- Tang
- Tang および Clevis は、ネットワークバインドディスク暗号化 (NBDE) を有効にするサーバーおよびクライアントコンポーネントです。クラスターノードのブートディスクデータを 1 つまたは複数の Tang サーバーにバインドできます。これにより、ノードが Tang サーバーにアクセスできる安全なネットワーク上にない限り、データの復号化が防止されます。Clevis は、クライアント側の復号化の実装に使用される自動復号化フレームワークです。
Tang 暗号化モードを使用したディスクの暗号化は、user-provisioned infrastructure でのベアメタルおよび vSphere インストールでのみサポートされます。
以前のバージョンの Red Hat Enterprise Linux CoreOS (RHCOS) では、ディスク暗号化は Ignition 設定で /etc/clevis.json
を指定して設定されました。このファイルは、OpenShift Container Platform 4.7 以降で作成されたクラスターではサポートされていません。次の手順を使用して、ディスク暗号化を設定します。
TPM v2 または Tang 暗号化モードを有効にすると、RHCOS ブートディスクは LUKS2 形式を使用して暗号化されます。
この機能には以下の特徴があります。
- installer-provisioned infrastructure、user-provisioned infrastructure、および Assisted Installer のデプロイメントで利用可能
Assisted Installer のデプロイメントの場合:
- 各クラスターは、Tang または TPM の 1 つの暗号化方式のみを持つことができます
- 一部またはすべてのノードで暗号化を有効にできます
- Tang のしきい値はありません。すべてのサーバーが有効で動作している必要があります
- 暗号化はインストールディスクのみに適用され、ワークロードディスクには適用されません
- Red Hat Enterprise Linux CoreOS (RHCOS) システムのみでサポートされる。
- マニフェストのインストール段階でディスク暗号化を設定し、最初の起動以降、ディスクに書き込まれるすべてのデータを暗号化します
- パスフレーズを提供するのにユーザーの介入を必要としない。
- AES-256-XTS 暗号化を使用する
24.1.4.1.1. 暗号化しきい値の設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform では、複数の Tang サーバーの要件を指定できます。TPM v2 と Tang 暗号化モードを同時に設定することもできます。これにより、TPM セキュア暗号プロセッサーが存在し、Tang サーバーがセキュアネットワーク経由でアクセスできる場合にのみ、ブートディスクデータの復号化が有効になります。
ブタン設定で threshold
属性を使用して、復号化が発生するために必要な TPM v2 および Tang 暗号化条件の最小数を定義できます。宣言条件の組み合わせで指定値に到達した場合に、しきい値が満たされます。たとえば、2 台の Tang サーバーにアクセスするか、TPM のセキュアな暗号プロセッサーおよび Tang サーバーの 1 つにアクセスすることで、以下の設定の 2
しきい値
に到達できます。
ディスク暗号化の Butane 設定例
- 1
- このフィールドをクラスターノードの命令セットアーキテクチャーに設定します。いくつかの例には、
x86_64
、aarch64
、またはppc64le
が含まれます。 - 2
- Trusted Platform Module (TPM) を使用してルートファイルシステムを暗号化する場合は、このフィールドを追加してください。
- 3
- 1 台以上の Tang サーバーを使用する必要がある場合は、このセクションを追加してください。
- 4
- 復号化を行うために必要な TPM v2 および Tang 暗号化条件の最小数を指定します。
- 5
- OpenShift Container Platform 4.13 は Red Hat Enterprise Linux (RHEL) 9.2 をベースにしています。FIPS 検証用に RHEL 9.2 暗号化モジュールがまだ送信されていません。詳細は、4.13 OpenShift Container Platform リリースノート の "About this release" を参照してください。
デフォルトの しきい値
は 1
です。設定に複数の暗号化条件を追加するにも拘らず、しきい値を指定しない場合は、条件のいずれかが満たされている場合に復号化を実行できます。
復号化に TPM v2 と Tang が必要な場合、threshold
属性の値は、指定された Tang サーバーの総数に 1 を加えた数に等しくなければなりません。threshold
が低い場合は、単一の暗号化モードを使用してしきい値に達する可能性があります。たとえば、tpm2
を true
に設定し、2 つの Tang サーバーを指定した場合、TPM セキュア暗号プロセッサーが利用できない場合でも、2 つの Tang サーバーにアクセスすることでしきい値 2
を満たすことができます。
24.1.4.2. ディスクのミラーリングについて リンクのコピーリンクがクリップボードにコピーされました!
コントロールプレーンおよびワーカーノードでの OpenShift Container Platform のインストール時に、ブートおよびその他のディスクの 2 つ以上の冗長ストレージデバイスへのミラーリングを有効にできます。1 つのデバイスが使用可能なままであれば、ストレージデバイスの障害後もノードは機能し続けます。
ミラーリングは、障害の発生したディスクの置き換えをサポートしません。ノードを再プロビジョニングして、ミラーを本来の劣化していない状態に復元します。
user-provisioned infrastructure のデプロイメントの場合、ミラーリングは RHCOS システムのみで使用できます。ミラーリングのサポートは、BIOS または UEFI で起動された x86_64
ノードおよび ppc64le
ノードで利用できます。
24.1.4.3. ディスク暗号化およびミラーリングの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform のインストール時に暗号化およびミラーリングを有効にし、設定することができます。
前提条件
- インストールノードで OpenShift Container Platform インストールプログラムをダウンロードしている。
インストールノードに Butane がインストールされている。
注記Butane は、OpenShift Container Platform が使用するコマンドラインユーティリティーであり、マシンの設定を記述および検証するための便利で簡潔な構文を提供します。詳細は、「Butane を使用したマシン設定の作成」を参照してください。
- Tang 交換キーのサムプリントの生成に使用できる Red Hat Enterprise Linux (RHEL) 8 マシンにアクセスできる。
手順
- TPM v2 を使用してクラスターを暗号化する必要がある場合、TPM v2 暗号化を各ノードのホストファームウェアで有効にする必要があるかどうかを確認します。これは、ほとんどの Dell システムで必要になります。特定のシステムのマニュアルを確認してください。
Tang を使用してクラスターを暗号化する必要がある場合は、以下の準備段階の手順に従います。
- Tang サーバーを設定するか、既存のサーバーにアクセスします。手順については、Network-Bound Disk Encryption (NBDE) を参照してください。
RHEL 8 マシンに
clevis
パッケージがインストールされていない場合はインストールします。sudo yum install clevis
$ sudo yum install clevis
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL 8 マシンで以下のコマンドを実行し、交換キーのサムプリントを生成します。
http://tang.example.com:7500
を Tang サーバーの URL に置き換えます。clevis-encrypt-tang '{"url":"http://tang.example.com:7500"}' < /dev/null > /dev/null
$ clevis-encrypt-tang '{"url":"http://tang.example.com:7500"}' < /dev/null > /dev/null
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この例では、
tangd.socket
は Tang サーバーのポート7500
でリッスンしています。
注記clevis-encrypt-tang
コマンドは、交換キーの拇印を生成します。このステップでは、データは暗号化コマンドに渡されません。/dev/null
は、プレーンテキストの代わりに入力としてここに存在します。この手順には必要ないため、暗号化された出力は/dev/null
に送信されます。出力例
The advertisement contains the following signing keys: PLjNyRdGw03zlRoGjQYMahSZGu9
The advertisement contains the following signing keys: PLjNyRdGw03zlRoGjQYMahSZGu9
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- エクスチェンジキーのサムプリント。
Do you wish to trust these keys? [ynYN]
のプロンプトが表示されたら、Y
と入力します 。ノードが静的 IP アドレス指定で設定されている場合は、RHCOS ノードをインストールするときに
coreos-installer iso customize --dest-karg-append
を実行するか、coreos-installer
--append-karg
オプションを使用して、インストール済みシステムの IP アドレスを設定します。ネットワークに必要なip=
およびその他の引数を追加します。重要一部の静的 IP の設定方法は、初回のブート後に initramfs に影響を与えず、Tang 暗号化では機能しない場合があります。これらには、
coreos-installer
--copy-network
オプション、coreos-installer iso customize
--network-keyfile
オプション、およびcoreos-installer pxe customize
--network-keyfile
オプションが含まれるほか、インストール中のライブ ISO または PXE イメージのカーネルコマンドラインにip=
引数が追加されます。静的 IP 設定が間違っていると、ノードの 2 回目のブートが失敗します。
インストールノードで、インストールプログラムが含まれるディレクトリーに切り替え、クラスターの Kubernetes マニフェストを生成します。
./openshift-install create manifests --dir <installation_directory>
$ ./openshift-install create manifests --dir <installation_directory>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<installation_directory>
は、インストールファイルを保存するディレクトリーへのパスに置き換えます。
ディスクの暗号化、ミラーリング、またはそれら両方を設定する Butane 設定を作成します。たとえば、コンピュートノードのストレージを設定するには、
$HOME/clusterconfig/worker-storage.bu
ファイルを作成します。起動デバイスの Butane 設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1 2
- コントロールプレーンの設定については、これらの両方の場所で
worker
をmaster
に置き換えます。 - 3
- このフィールドをクラスターノードの命令セットアーキテクチャーに設定します。いくつかの例には、
x86_64
、aarch64
、またはppc64le
が含まれます。 - 4
- ルートファイルシステムを暗号化する必要がある場合は、このセクションを追加してください。詳細は、「ディスクの暗号化について」を参照してください。
- 5
- Trusted Platform Module (TPM) を使用してルートファイルシステムを暗号化する場合は、このフィールドを追加してください。
- 6
- 1 台以上の Tang サーバーを使用する必要がある場合は、このセクションを追加してください。
- 7
- Tang サーバーの URL を指定します。この例では、
tangd.socket
は Tang サーバーのポート7500
でリッスンしています。 - 8
- 前述のステップで生成された Exchange キーサムプリントを指定します。
- 9
- 復号化に実行に必要な TPM v2 および Tang 暗号化条件の最小数を指定します。デフォルト値は
1
です。このトピックの詳細は、「暗号化しきい値の設定」を参照してください。 - 10
- ブートディスクをミラーリングする必要がある場合は、このセクションを追加してください。詳細は、「ディスクのミラーリングについて」を参照してください。
- 11
- RHCOS がインストールされるディスクを含む、ブートディスクミラーに含まれる必要があるすべてのディスクデバイスを一覧表示します。
- 12
- クラスターで FIPS モードを有効にするためにこのディレクティブを追加します。
重要OpenShift Container Platform 4.13 は Red Hat Enterprise Linux (RHEL) 9.2 をベースにしています。FIPS 検証用に RHEL 9.2 暗号化モジュールがまだ送信されていません。詳細は、4.13 OpenShift Container Platform リリースノート の "About this release" を参照してください。
重要ノードをディスク暗号化とミラーリングの両方を使用するように設定する場合、両方の機能を同じ Butane 設定に設定する必要があります。
対応する Butane 設定からコントロールプレーンまたはコンピュートノードのマニフェストを作成し、
<installation_directory>/openshift
ディレクトリーに保存します。たとえば、コンピュートノードのマニフェストを作成するには、以下のコマンドを実行します。butane $HOME/clusterconfig/worker-storage.bu -o <installation_directory>/openshift/99-worker-storage.yaml
$ butane $HOME/clusterconfig/worker-storage.bu -o <installation_directory>/openshift/99-worker-storage.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ディスクの暗号化またはミラーリングを必要とするノード種別ごとに、この手順を繰り返します。
- 今後マニフェストを更新する必要がある場合には、Butane 設定を保存します。
残りの OpenShift Container Platform インストールを継続します。
ヒントインストール時に、ディスク暗号化またはミラーリングに関連するエラーメッセージがないか、RHCOS ノードでコンソールログをモニタリングできます。
重要追加のデータパーティションを設定する場合、暗号化が明示的に要求されない限り、それらは暗号化されません。
検証
OpenShift Container Platform のインストール後に、ブートディスクの暗号化またはミラーリングがクラスターノードで有効にされているかどうかを確認できます。
インストールホストから、デバッグ Pod を使用してクラスターノードにアクセスします。
ノードのデバッグ Pod を開始します。次に例を示します。
oc debug node/compute-1
$ oc debug node/compute-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /host
をデバッグシェル内の root ディレクトリーとして設定します。デバッグ Pod は、Pod 内の/host
にノードのルートファイルシステムをマウントします。root ディレクトリーを/host
に変更すると、ノードの実行可能パスに含まれるバイナリーを実行できます。chroot /host
# chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Red Hat Enterprise Linux CoreOS (RHCOS) を実行する OpenShift Container Platform クラスターノードは変更できず、Operator を使用してクラスターの変更を適用します。SSH を使用したクラスターノードへのアクセスは推奨されません。ただし、OpenShift Container Platform API が利用できない場合や、
kubelet
がターゲットノードで適切に機能しない場合、oc
操作がその影響を受けます。この場合は、代わりにssh core@<node>.<cluster_name>.<base_domain>
を使用してノードにアクセスできます。
ブートディスクの暗号化を設定している場合は、有効であるかどうかを確認します。
デバッグシェルで、ノードでのルートマッピングのステータスを確認します。
cryptsetup status root
# cryptsetup status root
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 暗号化されたデバイスにバインドされる Clevis プラグインを一覧表示します。
clevis luks list -d /dev/sda4
# clevis luks list -d /dev/sda4
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 前述のステップの出力の
device
フィールドに一覧表示されるデバイスを指定します。
出力例
1: sss '{"t":1,"pins":{"tang":[{"url":"http://tang.example.com:7500"}]}}'
1: sss '{"t":1,"pins":{"tang":[{"url":"http://tang.example.com:7500"}]}}'
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この出力例では、Tang プラグインは、
/dev/sda4
デバイスの Shamir の Secret Sharing (SSS) Clevis プラグインにより使用されます。
ミラーリングを設定している場合は、有効かどうかを確認します。
デバッグシェルから、ノードにあるソフトウェアの RAID デバイスのリストを表示します。
cat /proc/mdstat
# cat /proc/mdstat
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のコマンドの出力に記載されている各ソフトウェア RAID デバイスの詳細を確認してください。以下の例は、
/dev/md126
デバイスの詳細を示しています。mdadm --detail /dev/md126
# mdadm --detail /dev/md126
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ソフトウェア RAID デバイスにマウントされているファイルシステムを一覧表示します。
mount | grep /dev/md
# mount | grep /dev/md
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力例では、
/boot
ファイルシステムが/dev/md126
software RAID デバイスに、root ファイルシステムが/dev/md127
にマウントされ t ています。
- OpenShift Container Platform ノードタイプごとに検証手順を繰り返します。
24.1.4.4. RAID 対応のデータボリュームの設定 リンクのコピーリンクがクリップボードにコピーされました!
ソフトウェア RAID のパーティション設定を有効にして、外部データボリュームを提供できます。OpenShift Container Platform は、データ保護およびフォールトトレランスに対応するために RAID 0、RAID 1、RAID 4、RAID 5、RAID 6、および RAID 10 をサポートします。詳細は、「ディスクのミラーリングについて」を参照してください。
前提条件
- インストールノードで OpenShift Container Platform インストールプログラムをダウンロードしている。
インストールノードに Butane をインストールしている。
注記Butane は、OpenShift Container Platform が使用するコマンドラインユーティリティーで、マシン設定を作成するための便利で簡略化した構文を提供したり、マシン設定の追加検証を実行したりします。詳細は、Butane を使用したマシン設定の作成 セクションを参照してください。
手順
ソフトウェア RAID を使用してデータボリュームを設定する Butane 設定を作成します。
ミラーリングされた起動ディスクに使用されるのと同じディスク上に RAID 1 を使用してデータボリュームを設定するには、
$HOME/clusterconfig/raid1-storage.bu
ファイルを作成します。以下に例を示します。ミラーリングされた起動ディスク上の RAID 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow セカンダリーディスク上に RAID 1 を使用してデータボリュームを設定するには、
$HOME/clusterconfig/raid1-alt-storage.bu
ファイルを作成します。以下に例を示します。セカンダリーディスク上の RAID 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
前のステップで作成した Butane 設定から RAID マニフェストを作成し、それを
<installation_directory>/openshift
ディレクトリーに保存します。たとえば、コンピュートノードのマニフェストを作成するには、以下のコマンドを実行します。butane $HOME/clusterconfig/<butane_config>.bu -o <installation_directory>/openshift/<manifest_name>.yaml
$ butane $HOME/clusterconfig/<butane_config>.bu -o <installation_directory>/openshift/<manifest_name>.yaml
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<butane_config>
および<manifest_name>
を直前の手順のファイル名に置き換えます。たとえば、セカンダリーディスクの場合は、raid1-alt-storage.bu
およびraid1-alt-storage.yaml
になります。
- 今後マニフェストを更新する必要がある場合には、Butane 設定を保存します。
- 残りの OpenShift Container Platform インストールを継続します。
24.1.5. chrony タイムサービスの設定 リンクのコピーリンクがクリップボードにコピーされました!
chrony タイムサービス (chronyd
) で使用されるタイムサーバーおよび関連する設定は、chrony.conf
ファイルのコンテンツを変更し、それらのコンテンツをマシン設定としてノードに渡して設定できます。
手順
chrony.conf
ファイルのコンテンツを含む Butane 設定を作成します。たとえば、ワーカーノードで chrony を設定するには、99-worker-chrony.bu
ファイルを作成します。注記Butane の詳細は、「Butane を使用したマシン設定の作成」を参照してください。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1 2
- コントロールプレーンノードでは、これらの両方の場所で
worker
の代わりにmaster
を使用します。 - 3
- マシン設定ファイルの
mode
フィールドに 8 進数の値でモードを指定します。ファイルを作成し、変更を適用すると、mode
は 10 進数の値に変換されます。コマンドoc get mc <mc-name> -o yaml
で YAML ファイルを確認できます。 - 4
- DHCP サーバーが提供するものなど、有効な到達可能なタイムソースを指定します。または、NTP サーバーの
1.rhel.pool.ntp.org
、2.rhel.pool.ntp.org
、または3.rhel.pool.ntp.org
のいずれかを指定できます。
Butane を使用して、ノードに配信される設定を含む
MachineConfig
オブジェクトファイル (99-worker-chrony.yaml
) を生成します。butane 99-worker-chrony.bu -o 99-worker-chrony.yaml
$ butane 99-worker-chrony.bu -o 99-worker-chrony.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の 2 つの方法のいずれかで設定を適用します。
-
クラスターがまだ起動していない場合は、マニフェストファイルを生成した後に、
MachineConfig
オブジェクトファイルを<installation_directory>/openshift
ディレクトリーに追加してから、クラスターの作成を続行します。 クラスターがすでに実行中の場合は、ファイルを適用します。
oc apply -f ./99-worker-chrony.yaml
$ oc apply -f ./99-worker-chrony.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
クラスターがまだ起動していない場合は、マニフェストファイルを生成した後に、