1.6. etcd を別のディスクに移動する
etcd を共有ディスクから別のディスクに移動して、パフォーマンスの問題を防止または解決できます。
Machine Config Operator (MCO) は、OpenShift Container Platform 4.14 コンテナーストレージのセカンダリーディスクのマウントを担当します。
この手順では、/var/
などのルートファイルシステムの一部を、インストール済みノードの別のディスクまたはパーティションに移動しません。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限でクラスターにアクセスできる。 -
MachineConfigPool
はmetadata.labelsmachineconfiguration.openshift.io/role
と一致する必要があります。これは、コントローラー、ワーカー、またはカスタムプールに適用されます。
手順
新しいディスクをクラスターに接続し、デバッグシェルで
lsblk
コマンドを使用して、ディスクがノード内で検出されることを確認します。$ oc debug node/<node_name>
# lsblk
lsblk
コマンドで報告された新しいディスクのデバイス名をメモします。次のような内容を含む
MachineConfig
YAML ファイルをetcd-mc.yml
という名前で作成し、<new_disk_name>
のインスタンスをメモしたデバイス名に置き換えます。apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master name: 98-var-lib-etcd spec: config: ignition: version: 3.2.0 systemd: units: - contents: | [Unit] Description=Make File System on /dev/<new_disk_name> DefaultDependencies=no BindsTo=dev-<new_disk_name>.device After=dev-<new_disk_name>.device var.mount Before=systemd-fsck@dev-<new_disk_name>.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/lib/systemd/systemd-makefs xfs /dev/<new_disk_name> TimeoutSec=0 [Install] WantedBy=var-lib-containers.mount enabled: true name: systemd-mkfs@dev-<new_disk_name>.service - contents: | [Unit] Description=Mount /dev/<new_disk_name> to /var/lib/etcd Before=local-fs.target Requires=systemd-mkfs@dev-<new_disk_name>.service After=systemd-mkfs@dev-<new_disk_name>.service var.mount [Mount] What=/dev/<new_disk_name> Where=/var/lib/etcd Type=xfs Options=defaults,prjquota [Install] WantedBy=local-fs.target enabled: true name: var-lib-etcd.mount - contents: | [Unit] Description=Sync etcd data if new mount is empty DefaultDependencies=no After=var-lib-etcd.mount var.mount Before=crio.service [Service] Type=oneshot RemainAfterExit=yes ExecCondition=/usr/bin/test ! -d /var/lib/etcd/member ExecStart=semanage fcontext -a -e /sysroot/ostree/deploy/rhcos/var/lib/etcd/ /var/lib/etcd/ ExecStart=/bin/rsync -ar /sysroot/ostree/deploy/rhcos/var/lib/etcd/ /var/lib/etcd/ TimeoutSec=0 [Install] WantedBy=multi-user.target graphical.target enabled: true name: sync-var-lib-etcd-to-etcd.service - contents: | [Unit] Description=Restore recursive SELinux security contexts DefaultDependencies=no After=var-lib-etcd.mount Before=crio.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/sbin/restorecon -R /var/lib/etcd/ TimeoutSec=0 [Install] WantedBy=multi-user.target graphical.target enabled: true name: restorecon-var-lib-etcd.service
cluster-admin
権限を持つユーザーとしてクラスターにログインし、マシン設定を作成します。$ oc login -u <username> -p <password>
$ oc create -f etcd-mc.yml
ノードが更新され、再起動されます。再起動が完了すると、次のイベントが発生します。
- 指定したディスクに XFS ファイルシステムが作成されます。
-
ディスクは
/var/lib/etc
にマウントされます。 -
/sysroot/ostree/deploy/rhcos/var/lib/etcd
のコンテンツは/var/lib/etcd
に同期されます。 -
/var/lib/etcd
のSELinux
ラベルの復元が強制されます。 - 古いコンテンツは削除されません。
ノードが別のディスク上に配置されたら、次のような内容で
etcd-mc.yml
ファイルを更新し、<new_disk_name>
のインスタンスをメモしたデバイス名に置き換えます。apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master name: 98-var-lib-etcd spec: config: ignition: version: 3.2.0 systemd: units: - contents: | [Unit] Description=Mount /dev/<new_disk_name> to /var/lib/etcd Before=local-fs.target Requires=systemd-mkfs@dev-<new_disk_name>.service After=systemd-mkfs@dev-<new_disk_name>.service var.mount [Mount] What=/dev/<new_disk_name> Where=/var/lib/etcd Type=xfs Options=defaults,prjquota [Install] WantedBy=local-fs.target enabled: true name: var-lib-etcd.mount
ノードの再起動を防止するため、デバイスの作成と同期に使用するロジックを削除する修正バージョンを適用します。
$ oc replace -f etcd-mc.yml
検証手順
ノードのデバッグシェルで
grep <new_disk_name>/proc/mounts
コマンドを実行して、ディスクがマウントされていることを確認します。$ oc debug node/<node_name>
# grep <new_disk_name> /proc/mounts
出力例
/dev/nvme1n1 /var/lib/etcd xfs rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,prjquota 0 0