6.2.3.2. Red Hat Gluster Storage レジストリー Pod のアップグレード

以下のコマンドは、クライアントマシンで実行する必要があります。

以下は、glusterfs の DaemonSet を更新する手順です。

  1. 以下の手順を実行して、Heketi Pod を停止し、ボリュームの作成やボリュームの削除に関する新しいリクエストを受け入れないようにします。

    1. 以下のコマンドを実行して、プロジェクトにアクセスします。

      # oc project <project_name>

      以下は例になります。

      # oc project storage-project
    2. 以下のコマンドを実行して、DeploymentConfig を取得します。

      # oc get ds
    3. 以下のコマンドを実行して heketi サーバーを設定し、local-client からのリクエストのみを受け入れます。

      # heketi-cli server mode set local-client
    4. 継続中の操作が完了するまで待機し、以下のコマンドを実行し、継続中の操作があるかどうかを監視します。

      # heketi-cli server operations info
    5. 以下のコマンドを実行して、レプリカ数を 1 から 0 に減らします。これにより、Heketi Pod の数が減ります。

      # oc scale dc <heketi_dc> --replicas=0
    6. 以下のコマンドを実行して、heketi Pod が表示されなくなったことを確認します。

      # oc get pods
  2. 以下のコマンドを実行して、gluster の DaemonSet 名を検索します。

    # oc get ds
  3. 以下のコマンドを実行して、DaemonSet を削除します。

    # oc delete ds <ds-name> --cascade=false

    古い DaemonSet を削除する際に --cascade=false オプションを使用しても、glusterfs_registry Pod は削除されず、DaemonSet のみが削除されます。古い DaemonSet を削除したら、新しい DaemonSet をロードする必要があります。古い Pod を手動で削除すると、作成される新しい Pod には新しい DaemonSet の設定が含まれます。

    以下に例を示します。

    # oc delete ds glusterfs-registry --cascade=false
    daemonset "glusterfs-registry" deleted
  4. 以下のコマンドを実行して、古い Pod すべてが起動していることを確認します。

    # oc get pods

    以下に例を示します。

    # oc get pods
    NAME                                          READY     STATUS    RESTARTS   AGE
    glusterblock-storage-provisioner-dc-1-ffgs5   1/1       Running   0          3m
    glusterfs-storage-5thpc                       1/1       Running   0          9d
    glusterfs-storage-hfttr                       1/1       Running   0          9d
    glusterfs-storage-n8rg5                       1/1       Running   0          9d
    heketi-storage-4-9fnvz                        2/2       Running   0          8d
  5. 以下のコマンドを実行して、古い glusterfs テンプレートを削除します。

    # oc delete templates glusterfs

    以下に例を示します。

    # oc delete templates glusterfs
    template “glusterfs” deleted
  6. Red Hat Gluster Storage Pod を持つすべての OpenShift Container Platform ノードにラベルを付けます。

    1. 以下のコマンドを使用して、ノードに適切なラベルでラベル付けされているかどうかを確認します。

      # oc get nodes -l glusterfs=registry-host
  7. 以下のコマンドを実行して、新しい glusterfs テンプレートを登録します。

    # oc create -f /usr/share/heketi/templates/glusterfs-template.yaml

    以下に例を示します。

    # oc create -f /usr/share/heketi/templates/glusterfs-template.yaml
    template “glusterfs” created
  8. glusterfs テンプレートを編集します。

    • 以下のコマンドを実行します。

      # oc edit template glusterfs
    • ボリュームマウントの下に以下の行を追加します。

       - name: kernel-modules
         mountPath: "/usr/lib/modules"
         readOnly: true
       - name: host-rootfs
         mountPath: "/rootfs"
    • ボリュームの下に以下の行を追加します。

       - name: kernel-modules
         hostPath:
         path: "/usr/lib/modules"
       - name: host-rootfs
         hostPath:
         path: "/"
    • アップグレードするバージョンに応じて、IMAGE_VERSION の下の valuev3.11.5 または v3.11.8 に置き換えます。

      - displayName: heketi container image name
        name: IMAGE_NAME
        required: true
        value: registry.redhat.io/rhgs3/rhgs-volmanager-rhel7
      - displayName: heketi container image version
        name: IMAGE_VERSION
        required: true
        value: v3.11.8
  9. 以下のコマンドを実行して、gluster DaemonSet を作成します。

    # oc process glusterfs | oc create -f -

    以下に例を示します。

    # oc process glusterfs | oc create -f -
    Deamonset “glusterfs” created
    注記

    クラスターに 1000 を超えるボリュームがある場合は、How to change the default PVS limit in Openshift Container Storage を参照し、アップグレードに進む前に必要なパラメーターを追加します。

  10. 以下のコマンドを実行して、削除する必要のある古い glusterfs_registry Pod を特定します。

    # oc get pods

    以下に例を示します。

    # oc get pods
    NAME                                          READY     STATUS    RESTARTS   AGE
    glusterblock-storage-provisioner-dc-1-ffgs5   1/1       Running   0          3m
    glusterfs-storage-5thpc                       1/1       Running   0          9d
    glusterfs-storage-hfttr                       1/1       Running   0          9d
    glusterfs-storage-n8rg5                       1/1       Running   0          9d
    heketi-storage-4-9fnvz                        2/2       Running   0          8d
  11. 以下のコマンドを実行して、ブリックが 90% を超えていないことを確認します。

    # df -kh | grep -v ^Filesystem | awk '{if(int($5)>90) print $0}'
    注記

    ブリックの使用率が100%に近い場合、これらのブリックの論理ボリュームマネージャー(LVM)のアクティブ化に時間がかかるか、Pod またはノードを再起動するとスタックする可能性があります。そのブリックの使用率を下げるか、論理ボリューム(LV)を使用している物理ボリューム(PV)を拡張することをお勧めします。

    注記

    df コマンドは、Block Hosting Volume(BHV)に属するブリックには適用できません。BHV では、df コマンドで生成されたブリックの 使用済み サイズは、その Gluster ボリュームのブロックサブボリュームの追加サイズであり、ブロックボリュームにあるデータのサイズではありません。詳細は、How To Identify Block Volumes and Block Hosting Volumes in Openshift Container Storage を参照してください。

  12. 以下のコマンドを実行して、古い glusterfs_registry Pod を削除します。glusterfs-registry Pod は、ローリングアップグレードに従う必要があります。そのため、次の古い glusterfs-registry Pod を削除する前に、新しい Pod が実行されていることを確認する必要があります。OnDelete Strategy DaemonSet 更新ストラテジーをサポートしますOnDelete Strategy 更新ストラテジーにより、DaemonSet テンプレートの更新後、新しい DaemonSet Pod は、古い DaemonSet Pod を手動で削除した場合にのみ作成されます。

    1. 古い glusterfs-registry Pod を削除するには、以下のコマンドを実行します。

      # oc delete pod <gluster_pod>

      以下に例を示します。

      # oc delete pod glusterfs-0vcf3
      pod  “glusterfs-0vcf3” deleted
      注記

      次の Pod を削除する前に、自己修復チェックを行う必要があります。

      1. 以下のコマンドを実行して、glusterfs-registry Pod のシェルにアクセスします。

        # oc rsh <gluster_pod_name>
      2. 以下のコマンドを実行して、すべてのボリュームの自己修復ステータスを確認します。

        # for eachVolume in $(gluster volume list);  do gluster volume heal $eachVolume info ;  done | grep "Number of entries: [^0]$"
    2. delete pod コマンドは古い Pod を終了し、新しい Pod を作成します。# oc get pods -w を実行して Pod の Age を確認すると、READY ステータスが 1/1 になっているはずです。以下は、Pod の終了から作成までのステータスの進行を示す出力例です。

      # oc get pods -w
      NAME                             READY     STATUS        RESTARTS   AGE
      glusterfs-0vcf3                  1/1       Terminating   0          3d
      …
  13. 以下のコマンドを実行して、Pod が実行していることを確認します。

    # oc get pods

    以下に例を示します。

    # oc get pods
    NAME                                          READY     STATUS    RESTARTS   AGE
    glusterblock-storage-provisioner-dc-1-ffgs5   1/1       Running   0          3m
    glusterfs-storage-5thpc                       1/1       Running   0          9d
    glusterfs-storage-hfttr                       1/1       Running   0          9d
    glusterfs-storage-n8rg5                       1/1       Running   0          9d
    heketi-storage-4-9fnvz                        2/2       Running   0          8d
    • 以下のコマンドを実行して、Pod を最新バージョンにアップグレードしているかどうかを確認します。

      # oc rsh <gluster_registry_pod_name> glusterd --version

      以下は例になります。

       # oc rsh glusterfs-registry-4cpcc glusterd --version
      glusterfs 6.0
      # rpm -qa|grep gluster
  14. glusterfs-registry Pod のいずれかで以下のコマンドを実行して、Red Hat Gluster Storage op-version を確認します。

    # gluster vol get all cluster.op-version
  15. Gluster Podをアップグレードした後、Heketiを操作モードの設定に戻したことを確認してください。

    • DC(デプロイメント設定)をスケールアップします。

      # oc scale dc <heketi_dc> --replicas=1
  16. いずれかの Pod で cluster.op-version を 70200 に設定します。

    注記

    cluster.op-version を変更する前に、すべての glusterfs-registry Pod が更新されていることを確認します。

    # gluster volume set all cluster.op-version 70200
  17. 以下の手順を実行して、すべてのボリュームでserver.tcp-user-timeoutを有効にします。

    注記

    "server.tcp-user-timeout" オプションは、アプリケーションから送信されたデータがブリックから確認応答されないままになることができる最大時間(秒単位)を指定します。

    これは、強制的な切断や接続の切断(ノードが予期せず停止した場合にファイアウォールがアクティブ化されるなど)を早期に検出し、アプリケーションが全体的なフェイルオーバー時間を短縮できるようにするために使用されます。

    1. 以下のコマンドを使用して glusterfs Pod を一覧表示します。

      # oc get pods

      以下は例になります。

      # oc get pods
      NAME                                          READY     STATUS    RESTARTS   AGE
      glusterblock-storage-provisioner-dc-1-ffgs5   1/1       Running   0          3m
      glusterfs-storage-5thpc                       1/1       Running   0          9d
      glusterfs-storage-hfttr                       1/1       Running   0          9d
      glusterfs-storage-n8rg5                       1/1       Running   0          9d
      heketi-storage-4-9fnvz                        2/2       Running   0          8d
    2. glusterfs-registry Pod のいずれかにリモートシェルを実行します。以下は例になります。

      # oc rsh glusterfs-registry-g6vd9
    3. 以下のコマンドを実行します。

      # for eachVolume in `gluster volume list`; do echo $eachVolume; gluster volume set $eachVolume server.tcp-user-timeout 42 ; done

      以下は例になります。

      # for eachVolume in `gluster volume list`; do echo $eachVolume; gluster volume set $eachVolume server.tcp-user-timeout 42 ; done
      volume1
      volume set: success
      volume2
      volume set: success
  18. gluster-block-registry-provisoner-pod がすでに存在する場合は、以下のコマンドを実行してこれを削除します。

    # oc delete dc <gluster-block-registry-dc>

    以下は例になります。

    # oc delete dc glusterblock-registry-provisioner-dc
  19. 古い Pod から以下のリソースを削除します。

    # oc delete clusterroles.authorization.openshift.io glusterblock-provisioner-runner
    # oc delete serviceaccounts glusterblock-provisioner
    serviceaccount "glusterblock-provisioner" deleted
    # oc delete clusterrolebindings.authorization.openshift.io glusterblock-provisioner
  20. 以下のコマンドを実行して、gluster-block プロビジョナーをデプロイします。

    `sed -e 's/${NAMESPACE}/<NAMESPACE>/' /usr/share/heketi/templates/glusterblock-provisioner.yaml | sed -e 's/<VERSION>/<NEW-VERSION>/' | oc create -f -
    <VERSION>
    OpenShift Container Storage の既存のバージョン。
    <NEW-VERSION>

    アップグレードするバージョンに応じて、3.11.5 または 3.11.8 のいずれか。

    # oc adm policy add-cluster-role-to-user glusterblock-provisioner-runner system:serviceaccount:<NAMESPACE>:glusterblock-provisioner

    以下は例になります。

    `sed -e 's/${NAMESPACE}/storage-project/' /usr/share/heketi/templates/glusterblock-provisioner.yaml | sed -e 's/3.11.4/3.11.8/' | oc create -f -
    # oc adm policy add-cluster-role-to-user glusterblock-provisioner-runner system:serviceaccount:storage-project:glusterblock-provisioner
  21. ブリック多重化は、1つのプロセスに複数のブリックを追加できる機能です。これにより、リソースの消費が減少し、同じメモリー消費量で前より多くのブリックを実行できるようになります。これは、Container-Native Storage 3.6 以降でデフォルトで有効になっています。Container-Native Storage 3.10 から Red Hat Openshift Container Storage 3.11 へのアップグレード中に、ブリックの多重化をオンにするには、以下のコマンドを実行します。

    1. Gluster Pod に対して実行するには、以下のコマンドを実行し、gluster Pod のいずれかにリモートシェルを実行します。

      # oc rsh <gluster_pod_name>
    2. ブリックの多重化ステータスを確認します。

      # gluster v get all all
    3. 無効になっている場合は、以下のコマンドを実行して、ブリックの多重化を有効にします。

      注記

      ブリックの多重化が有効になっている間は、すべてのボリュームが停止状態にあるか、ブリックが実行されていないことを確認してください。

      # gluster volume set all cluster.brick-multiplex on

      以下は例になります。

      # oc rsh glusterfs-registry-g6vd9
      
      sh-4.2# gluster volume set all cluster.brick-multiplex on
      Brick-multiplexing is supported only for container workloads (Independent or Converged mode). Also it is advised to make sure that either all volumes are in stopped state or no bricks are running before this option is modified.Do you still want to continue? (y/n) y
      volume set: success
    4. 信頼できるストレージプール内のすべてのボリュームを一覧表示します。この手順は、ボリュームセットの操作が実行される場合にのみ必要です。

      以下は例になります。

      # gluster volume list
      
      heketidbstorage
      vol_194049d2565d2a4ad78ef0483e04711e
      ...
      ...

      すべてのボリュームを再起動します。この手順は、ボリュームセットの操作が前の手順と一緒に実行される場合にのみ必要です。

      # gluster vol stop <VOLNAME>
      # gluster vol start <VOLNAME>
  22. Red Hat Openshift Container Storage での S3 と互換性のあるオブジェクトストアのサポートは、テクノロジープレビュー機能となっています。S3 と互換性のあるオブジェクトストアを有効にするには、https://access.redhat.com/documentation/ja-jp/red_hat_openshift_container_storage/3.11/html/operations_guide/s3_object_store を参照してください。

    注記

    glusterfs レジストリーのアップグレード後に 「Heketi Pod の起動」 に記載の手順に進み、heketi Pod を元に戻してから 「Red Hat OpenShift Container Platform ノードでのクライアントのアップグレード」 に記載の手順に進んで、Red Hat Openshift Container Platform ノードでクライアントをアップグレードします。