第8章 ローカルディスク上の rootVolume および etcd を使用した OpenStack へのデプロイ


重要

ローカルディスク上の rootVolume と etcd を使用した Red Hat OpenStack Platform (RHOSP) へのデプロイは、テクノロジープレビューのみの機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

Day 2 オペレーション中に、etcd をルートボリューム (OpenStack Cinder によって提供されるもの) から専用の一時ローカルディスクに移動することで、Red Hat OpenStack Platform (RHOSP) インストールのパフォーマンスの問題を解決および防止できます。

8.1. ローカルディスクへの RHOSP のデプロイ

既存の RHOSP クラウドがある場合は、そのクラウドから etcd を専用の一時ローカルディスクに移動できます。

警告

この手順は、ローカルディスク上で etcd をテストすることだけを目的としたものです。実稼働クラスターでは使用しないでください。場合によっては、コントロールプレーンが完全に失われる可能性があります。詳細は、「バックアップおよび復元」の「バックアップおよび復元の操作の概要」を参照してください。

前提条件

  • Cinder が動作している OpenStack クラウドがある。
  • OpenStack クラウドに、OpenShift コントロールプレーンの 3 つのルートボリュームを収容するために、少なくとも 75 GB の利用可能なストレージがある。
  • OpenStack クラウドが、rbd ではなくローカルストレージバックエンドを使用する Nova 一時ストレージを使用してデプロイされている。

手順

  1. 次のコマンドを実行して、少なくとも 10 GB の一時ディスクを備えたコントロールプレーンの Nova フレーバーを作成します。環境に応じて --ram--disk、および <flavor_name> の値を置き換えます。

    $ openstack flavor create --<ram 16384> --<disk 0> --ephemeral 10 --vcpus 4 <flavor_name>
  2. コントロールプレーンのルートボリュームを含むクラスターをデプロイします。以下に例を示します。

    サンプル YAML ファイル

    # ...
    controlPlane:
      name: master
      platform:
        openstack:
          type: ${CONTROL_PLANE_FLAVOR}
          rootVolume:
            size: 25
            types:
            - ${CINDER_TYPE}
      replicas: 3
    # ...

  3. 次のコマンドを実行して、作成したクラスターをデプロイします。

    $ openshift-install create cluster --dir <installation_directory> 1
    1
    <installation_directory> には、以前に作成したカスタマイズ済みの ./install-config.yaml ファイルの場所を指定します。
  4. 次の手順に進む前に、次のコマンドを実行して、デプロイしたクラスターが正常であることを確認します。

    $ oc wait clusteroperators --all --for=condition=Progressing=false 1
    1
    クラスター Operator の進行が完了しており、クラスターがデプロイまたは更新中でないことを確認します。
  5. 次のコマンドを実行して、ControlPlaneMachineSet (CPMS) を編集し、etcd によって使用される追加のブロック一時デバイスを追加します。

    $ oc patch ControlPlaneMachineSet/cluster -n openshift-machine-api --type json -p ' 1
    [
        {
          "op": "add",
          "path": "/spec/template/machines_v1beta1_machine_openshift_io/spec/providerSpec/value/additionalBlockDevices", 2
          "value": [
            {
              "name": "etcd",
              "sizeGiB": 10,
              "storage": {
                "type": "Local" 3
              }
            }
          ]
        }
      ]
    '
    1
    JSON パッチを ControlPlaneMachineSet カスタムリソース (CR) に適用します。
    2
    additionalBlockDevices を追加するパスを指定します。
    3
    少なくとも 10 GB のローカルストレージを持つ etcd デバイスをクラスターに追加します。etcd デバイスが Nova フレーバーに収まる限り、10 GB を超える値も指定できます。たとえば、Nova フレーバーの容量が 15 GB の場合、12 GB の etcd デバイスを作成できます。
  6. 次の手順を使用して、コントロールプレーンマシンが正常であることを確認します。

    1. 次のコマンドを実行して、コントロールプレーンマシンセットの更新が完了するまで待ちます。

      $ oc wait --timeout=90m --for=condition=Progressing=false controlplanemachineset.machine.openshift.io -n openshift-machine-api cluster
    2. 次のコマンドを実行して、3 つのコントロールプレーンマシンセットが更新されていることを確認します。

      $ oc wait --timeout=90m --for=jsonpath='{.status.updatedReplicas}'=3 controlplanemachineset.machine.openshift.io -n openshift-machine-api cluster
    3. 次のコマンドを実行して、3 つのコントロールプレーンマシンセットが正常であることを確認します。

      $ oc wait --timeout=90m --for=jsonpath='{.status.replicas}'=3 controlplanemachineset.machine.openshift.io -n openshift-machine-api cluster
    4. 次のコマンドを実行して、クラスター内で ClusterOperators が進行中でないことを確認します。

      $ oc wait clusteroperators --timeout=30m --all --for=condition=Progressing=false
    5. 次のスクリプトを実行して、3 つのコントロールプレーンマシンのそれぞれに、以前に作成した追加のブロックデバイスがあることを確認します。
    $ cp_machines=$(oc get machines -n openshift-machine-api --selector='machine.openshift.io/cluster-api-machine-role=master' --no-headers -o custom-columns=NAME:.metadata.name) 1
    
    
    if [[ $(echo "${cp_machines}" | wc -l) -ne 3 ]]; then
      exit 1
    fi 2
    
    
    for machine in ${cp_machines}; do
      if ! oc get machine -n openshift-machine-api "${machine}" -o jsonpath='{.spec.providerSpec.value.additionalBlockDevices}' | grep -q 'etcd'; then
    	exit 1
      fi 3
    done
    1
    クラスター内で実行されているコントロールプレーンマシンを取得します。
    2
    etcd という名前の additionalBlockDevices エントリーを持つマシンに対してイテレートします。
    3
    etcd という名前の additionalBlockDevice を持つすべてのコントロールプレーンマシンの名前を出力します。
  7. 次の YAML ファイルを使用して、98-var-lib-etcd.yaml という名前のファイルを作成します。

    警告

    この手順は、ローカルディスク上で etcd をテストするためのものです。実稼働クラスターでは使用しないでください。場合によっては、コントロールプレーンが完全に失われる可能性があります。詳細は、「バックアップおよび復元」の「バックアップおよび復元の操作の概要」を参照してください。

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: master
      name: 98-var-lib-etcd
    spec:
      config:
        ignition:
          version: 3.4.0
        systemd:
          units:
          - contents: |
              [Unit]
              Description=Mount local-etcd to /var/lib/etcd
    
              [Mount]
              What=/dev/disk/by-label/local-etcd 1
              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 2
    
              [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 3
    
              [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 4
    
              Requisite=var-lib-etcd.mount
              ConditionPathExists=!/var/lib/etcd/member
              ConditionPathIsDirectory=/sysroot/ostree/deploy/rhcos/var/lib/etcd/member 5
    
              [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" 6
    
              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 7
    
              [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
    
              [Service]
              Type=oneshot
              RemainAfterExit=yes
    
              ExecCondition=/bin/bash -c "[ -n \"$(restorecon -nv /var/lib/etcd)\" ]" 8
    
              ExecStart=/usr/sbin/restorecon -R /var/lib/etcd
    
              [Install]
              RequiredBy=var-lib-etcd.mount
            enabled: true
            name: relabel-var-lib-etcd.service
    1
    etcd データベースは、ラベルではなくデバイスによってマウントする必要があります。この設定で使用されるデバイスの依存関係を systemd に生成させ、ファイルシステムの作成をトリガーするためです。
    2
    ファイルシステム dev/disk/by-label/local-etcd がすでに存在する場合は実行しないでください。
    3
    /dev/disk/by-label/ephemeral0 が存在しない場合は、警告メッセージが表示されて失敗します。
    4
    既存のデータをローカル etcd データベースに移行します。この設定では、/var/lib/etcd がマウントされた後、CRI-O が起動する前に、つまり etcd がまだ実行されていないときにデータを移行します。
    5
    etcd をマウントすること、etcd にメンバーディレクトリーを含めないこと、および ostree にメンバーディレクトリーを含めることを必須とします。
    6
    以前の移行状態をクリーンアップします。
    7
    コピーと移動を別々のステップで実行し、完全なメンバーディレクトリーの作成をアトミック操作として実行します。
    8
    完全な再帰的なラベルの再設定を実行する前に、マウントポイントディレクトリーの簡単なチェックを実行します。ファイルパス /var/lib/etcd 内の restorecon がディレクトリーの名前を変更できない場合、再帰的な名前変更が実行されません。
  8. 次のコマンドを実行して、新しい MachineConfig オブジェクトを作成します。

    $ oc create -f 98-var-lib-etcd.yaml
    注記

    etcd データベースを各コントロールプレーンマシンのローカルディスクに移動するには時間がかかります。

  9. 次のコマンドを実行して、etcd データベースが各コントロールプレーンのローカルディスクに転送されたことを確認します。

    1. 次のコマンドを実行して、クラスターがまだ更新中であることを確認します。

      $ oc wait --timeout=45m --for=condition=Updating=false machineconfigpool/master
    2. 次のコマンドを実行して、クラスターの準備ができていることを確認します。

      $ oc wait node --selector='node-role.kubernetes.io/master' --for condition=Ready --timeout=30s
    3. 次のコマンドを実行して、クラスター Operators がクラスター内で実行されていることを確認します。

      $ oc wait clusteroperators --timeout=30m --all --for=condition=Progressing=false
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.