第9章 ローカルディスク上の rootVolume および etcd を使用した OpenStack へのデプロイ
インストール後に、etcd をルートボリューム (OpenStack Cinder によって提供されるもの) から専用の一時ローカルディスクに移動することで、Red Hat OpenStack Platform (RHOSP) インストールのパフォーマンスの問題を解決および防止できます。
9.1. ローカルディスクへの OpenStack のデプロイ リンクのコピーリンクがクリップボードにコピーされました!
既存の RHOSP クラウドがある場合は、そのクラウドから etcd を専用の一時ローカルディスクに移動できます。
前提条件
- Cinder が動作している RHOSP クラウドがある。
- RHOSP クラウドに、OpenShift コントロールプレーンの 3 つのルートボリュームを収容するために、少なくとも 75 GB の利用可能なストレージがある。
-
RHOSP クラウドが、
rbdではなくローカルストレージバックエンドを使用する Nova 一時ストレージを使用してデプロイされている。
手順
10 GB 以上のエフェメラルディスクを搭載したコントロールプレーンの Nova フレーバーを作成します。環境に応じて、
--ram、--disk、および<flavor_name>の値を置き換えます。$ openstack flavor create --<ram 16384> --<disk 0> --ephemeral 10 --vcpus 4 <flavor_name>コントロールプレーンのルートボリュームを含むクラスターをデプロイします。以下に例を示します。
サンプル YAML ファイル
# ... controlPlane: name: master platform: openstack: type: ${CONTROL_PLANE_FLAVOR} rootVolume: size: 25 types: - ${CINDER_TYPE} replicas: 3 # ...次のコマンドを実行して、作成したクラスターをデプロイします。
$ openshift-install create cluster --dir <installation_directory><installation_directory>には、以前に作成したカスタマイズ済みの./install-config.yamlファイルの場所を指定します。次の手順に進む前に、次のコマンドを実行して、デプロイしたクラスターが正常であることを確認します。
$ oc wait clusteroperators --all --for=condition=Progressing=false出力を確認し、クラスター Operator の進行が完了しており、クラスターがデプロイまたは更新中でないことを確認します。
次の YAML ファイルを使用して、
98-var-lib-etcd.yamlという名前のファイルを作成します。apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master name: 98-var-lib-etcd spec: config: ignition: version: 3.5.0 systemd: units: - contents: | [Unit] Description=Mount local-etcd to /var/lib/etcd [Mount] What=/dev/disk/by-label/local-etcd Where=/var/lib/etcd Type=xfs Options=defaults,prjquota [Install] WantedBy=local-fs.target enabled: true name: var-lib-etcd.mount - contents: | [Unit] Description=Create local-etcd filesystem DefaultDependencies=no After=local-fs-pre.target ConditionPathIsSymbolicLink=!/dev/disk/by-label/local-etcd [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/bash -c "[ -L /dev/disk/by-label/ephemeral0 ] || ( >&2 echo Ephemeral disk does not exist; /usr/bin/false )" ExecStart=/usr/sbin/mkfs.xfs -f -L local-etcd /dev/disk/by-label/ephemeral0 [Install] RequiredBy=dev-disk-by\x2dlabel-local\x2detcd.device enabled: true name: create-local-etcd.service - contents: | [Unit] Description=Migrate existing data to local etcd After=var-lib-etcd.mount Before=crio.service Requisite=var-lib-etcd.mount ConditionPathExists=!/var/lib/etcd/member ConditionPathIsDirectory=/sysroot/ostree/deploy/rhcos/var/lib/etcd/member [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/bash -c "if [ -d /var/lib/etcd/member.migrate ]; then rm -rf /var/lib/etcd/member.migrate; fi" ExecStart=/usr/bin/cp -aZ /sysroot/ostree/deploy/rhcos/var/lib/etcd/member/ /var/lib/etcd/member.migrate ExecStart=/usr/bin/mv /var/lib/etcd/member.migrate /var/lib/etcd/member [Install] RequiredBy=var-lib-etcd.mount enabled: true name: migrate-to-local-etcd.service - contents: | [Unit] Description=Relabel /var/lib/etcd After=migrate-to-local-etcd.service Before=crio.service Requisite=var-lib-etcd.mount [Service] Type=oneshot RemainAfterExit=yes ExecCondition=/bin/bash -c "[ -n \"$(restorecon -nv /var/lib/etcd)\" ]" ExecStart=/usr/sbin/restorecon -R /var/lib/etcd [Install] RequiredBy=var-lib-etcd.mount enabled: true name: relabel-var-lib-etcd.service各項目の説明:
[マウント].What=/dev/disk/by-label/local-etcd-
etcd データベースは、ラベルではなくデバイスによってマウントする必要があります。この設定で使用されるデバイスの依存関係を
systemdに生成させ、ファイルシステムの作成をトリガーするためです。 [ユニット].ConditionPathIsSymbolicLink=!/dev/disk/by-label/local-etcd-
ファイルシステム
dev/disk/by-label/local-etcdがすでに存在する場合は実行しないでください。 [サービス].ExecStart=/usr/sbin/mkfs.xfs-
/dev/disk/by-label/ephemeral0が存在しない場合は、警告メッセージが表示されて失敗します。 [Unit].Before=crio.service-
既存のデータをローカル etcd データベースに移行します。この設定では、
/var/lib/etcdがマウントされた後、CRI-O が起動する前に、つまり etcd がまだ実行されていないときにデータを移行します。 [Unit].ConditionPathIsDirectory- etcd をマウントすること、etcd にメンバーディレクトリーを含めないこと、および ostree にメンバーディレクトリーを含めることを必須とします。
[Service].ExecStart=/bin/bash- 以前の移行状態をクリーンアップします。
[サービス].ExecStart=/usr/bin/mv- コピーと移動を別々のステップで実行し、完全なメンバーディレクトリーの作成をアトミック操作として実行します。
[Service].ExecCondition=/bin/bash完全な再帰的なラベルの再設定を実行する前に、マウントポイントディレクトリーの簡単なチェックを実行します。ファイルパス
/var/lib/etcd内の restorecon がディレクトリーの名前を変更できない場合、再帰的な名前変更が実行されません。警告98-var-lib-etcd.yamlファイルをシステムに適用した後は、ファイルを削除しないでください。このファイルを削除すると、etcd メンバーが壊れ、システムが不安定になります。ロールバックが必要な場合は、
ControlPlaneMachineSetオブジェクトを変更して、一時ディスクを含まないフレーバーを使用します。この変更により、etcd パーティションに一時ディスクを使用せずにコントロールプレーンノードが再生成され、98-var-lib-etcd.yamlファイルに関連する問題が回避されます。ControlPlaneMachineSetオブジェクトの更新が完了し、コントロールプレーンノードが一時ディスクを使用していない場合にのみ、98-var-lib-etcd.yamlファイルを安全に削除できます。
次のコマンドを実行して、新しい
MachineConfigオブジェクトを作成します。$ oc create -f 98-var-lib-etcd.yaml注記etcd データベースを各コントロールプレーンマシンのローカルディスクに移動するには時間がかかります。
次のコマンドを実行して、etcd データベースが各コントロールプレーンのローカルディスクに転送されたことを確認します。
次のコマンドを実行して、クラスターがまだ更新中であることを確認します。
$ oc wait --timeout=45m --for=condition=Updating=false machineconfigpool/master次のコマンドを実行して、クラスターの準備ができていることを確認します。
$ oc wait node --selector='node-role.kubernetes.io/master' --for condition=Ready --timeout=30s次のコマンドを実行して、クラスター Operators がクラスター内で実行されていることを確認します。
$ oc wait clusteroperators --timeout=30m --all --for=condition=Progressing=false