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


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

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

既存の RHOSP クラウドがある場合は、そのクラウドから 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. 次の 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.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
              Requisite=var-lib-etcd.mount
    
              [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 がディレクトリーの名前を変更できない場合、再帰的な名前変更が実行されません。
    警告

    98-var-lib-etcd.yaml ファイルをシステムに適用した後は、削除しないでください。このファイルを削除すると、etcd メンバーが壊れ、システムが不安定になります。

    ロールバックが必要な場合は、ControlPlaneMachineSet オブジェクトを変更して、一時ディスクを含まないフレーバーを使用します。この変更により、etcd パーティションに一時ディスクを使用せずにコントロールプレーンノードが再生成され、98-var-lib-etcd.yaml ファイルに関連する問題が回避されます。ControlPlaneMachineSet オブジェクトの更新が完了し、コントロールプレーンノードが一時ディスクを使用していない場合にのみ、98-var-lib-etcd.yaml ファイルを安全に削除できます。

  6. 次のコマンドを実行して、新しい MachineConfig オブジェクトを作成します。

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

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

  7. 次のコマンドを実行して、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.