第9章 クラスターのアップグレード

Red Hat Advanced Cluster Management for Kubernetes で管理するクラスターを作成したら、Red Hat Advanced Cluster Management コンソールを使用して、マネージドクラスターが使用するバージョンチャネルで利用可能な最新のマイナーバージョンに、これらのクラスターをアップグレードできます。

メジャーバージョンへのアップグレードには、そのバージョンへのアップグレードの前提条件をすべて満たしていることを確認する必要があります。コンソールでクラスターをアップグレードする前に、マネージドクラスターのバージョンチャネルを更新する必要があります。マネージドクラスターのバージョンチャネルの更新後に、Red Hat Advanced Cluster Management コンソールに、アップグレードに利用可能な最新版が表示されます。

注記: Red Hat OpenShift Kubernetes Service クラスターは、Red Hat Advanced Cluster Management for Kubernetes コンソールでアップグレードできません。

このアップグレードの手法は、ステータスが Ready の Red Hat OpenShift Container Platform クラスターに対してだけ、使用できます。

クラスターをアップグレードするには、以下の手順を実行します。

  1. ナビゲーションメニューから Automate infrastructure > Clusters に移動します。アップグレードが利用可能な場合には、Distribution version の列に表示されます。
  2. アップグレードするクラスターを選択します。注記: クラスターは Ready の状態であること、かつ、コンソールを使用して OpenShift Container Platform クラスターをアップグレードできる必要があります。
  3. Upgrade を選択します。
  4. 各クラスターの新しいバージョンを選択します。
  5. Upgrade を選択します。

9.1. 非接続クラスターのアップグレード

Red Hat OpenShift Update Service を Red Hat Advanced Cluster Management for Kubernetes で使用すると、非接続環境でクラスターをアップグレードできます。

重要: Red Hat OpenShift Update Service は、Red Hat OpenShift Container Platform Operator で、OpenShift Container Platform 4.4 のテクノロジープレビュー機能として提供されます。実稼働環境での使用を目的としていません。

セキュリティー上の理由で、クラスターがインターネットに直接接続できない場合があります。このような場合は、アップグレードが利用可能なタイミングや、これらのアップグレードの処理方法を把握するのが困難になります。OpenShift Update Service を設定すると便利です。

OpenShift Update Service は、個別の Operator および オペランドで、非接続環境で利用可能なマネージドクラスターを監視して、クラスターのアップグレードで利用できるようにします。OpenShift Update Service の設定後に、以下のアクションを実行できます。

  1. オフラインのクラスター向けにいつアップグレードが利用できるかを監視します。
  2. グラフデータファイルを使用してアップグレード用にどの更新がローカルサイトにミラーリングされているかを特定します。
  3. Red Hat Advanced Cluster Management コンソールを使用して、クラスターのアップグレードが利用可能であることを通知します。

9.1.1. 前提条件

OpenShift Update Service を使用して非接続クラスターをアップグレードするには、以下の前提条件を満たす必要があります。

  • Red Hat OpenShift Container Platform 4.5 以降に、制限付きの OLM を設定して Red Hat Advanced Cluster Management ハブクラスターをデプロイしておく。制限付きの OLM の設定方法については、「ネットワークが制限された環境での Operator Lifecycle Manager の使用」を参照してください。

    ヒント: 制限付きの OLM の設定時に、カタログソースイメージをメモします。

  • Red Hat Advanced Cluster Management ハブクラスターが管理する OpenShift Container Platform クラスター。
  • クラスターイメージをミラーリング可能なローカルレジストリーにアクセスするための認証情報。このリポジトリーの作成方法については、「ネットワークが制限された環境でのインストール用のミラーレジストリーの作成」を参照してください。

    注記: アップグレードするクラスターの現行バージョンのイメージは、ミラーリングされたイメージの 1 つとして常に利用可能でなければなりません。アップグレードに失敗すると、クラスターはアップグレード試行時のクラスターのバージョンに戻ります。

9.1.2. 非接続ミラーレジストリーの準備

ローカルのミラーリングレジストリーに、アップグレード前の現行のイメージと、アップグレード後のイメージの療法をミラーリングする必要があります。イメージをミラーリングするには以下の手順を実行します。

  1. 以下の例のような内容を含むスクリプトファイルを作成します。

    UPSTREAM_REGISTRY=quay.io
    PRODUCT_REPO=openshift-release-dev
    RELEASE_NAME=ocp-release
    OCP_RELEASE=4.5.2-x86_64
    LOCAL_REGISTRY=$(hostname):5000
    LOCAL_SECRET_JSON=/path/to/pull/secret
    
    oc adm -a ${LOCAL_SECRET_JSON} release mirror \
    --from=${UPSTREAM_REGISTRY}/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE} \
    --to=${LOCAL_REGISTRY}/ocp4 \
    --to-release-image=${LOCAL_REGISTRY}/ocp4/release:${OCP_RELEASE}

    path-to-pull-secret は、OpenShift Container Platform のプルシークレットへのパスに置き換えます。

  2. スクリプトを実行して、イメージのミラーリング、設定の構成、リリースイメージとリリースコンテンツの分離を行います。

ヒント: ImageContentSourcePolicy の作成時に、このスクリプトの最後の行にある出力を使用できます。

9.1.3. OpenShift Update Service の Operator のデプロイ

OpenShift Container Platform 環境で OpenShift Update Service の Operator をデプロイするには、以下の手順を実行します。

  1. ハブクラスターで、OpenShift Container Platform Operator のハブにアクセスします。
  2. Red Hat OpenShift Update Service Operator を選択して Operator をデプロイします。必要に応じてデフォルト値を更新します。Operator をデプロイすると、openshift-cincinnati という名前の新規プロジェクトが作成されます。
  3. Operator のインストールが完了するまで待ちます。

    ヒント: OpenShift Container Platform コマンドラインで oc get pods コマンドを入力して、インストールのステータスを確認できます。Operator の状態が running であることを確認します。

9.1.4. グラフデータの init コンテナーの構築

OpenShift Update Service はグラフデータ情報を使用して、利用可能なアップグレードを判別します。オンライン環境では、OpenShift Update Service は Cincinnati グラフデータの GitHub リポジトリー から直接利用可能なアップグレードがないか、グラフデータ情報をプルします。非接続環境を設定しているため、init container を使用してローカルリポジトリーでグラフデータを利用できるようにする必要があります。以下の手順を実行して、グラフデータの init container を作成します。

  1. 以下のコマンドを入力して、グラフデータ Git リポジトリーのクローンを作成します。

    git clone https://github.com/openshift/cincinnati-graph-data
  2. グラフデータの init の情報が含まれるファイルを作成します。このサンプル Dockerfile は、cincinnati-operator GitHub リポジトリーにあります。ファイルの内容は以下の例のようになります。

    FROM registry.access.redhat.com/ubi8/ubi:8.1
    
    RUN curl -L -o cincinnati-graph-data.tar.gz https://github.com/openshift/cincinnati-graph-data/archive/master.tar.gz
    
    RUN mkdir -p /var/lib/cincinnati/graph-data/
    
    CMD exec /bin/bash -c "tar xvzf cincinnati-graph-data.tar.gz -C /var/lib/
    cincinnati/graph-data/ --strip-components=1"

    この例では、以下のように設定されています。

    • FROM 値は、OpenShift Update Service がイメージを検索する先の外部レジストリーに置き換えます。
    • RUN コマンドはディレクトリーを作成し、アップグレードファイルをパッケージ化します。
    • CMD コマンドは、パッケージファイルをローカルリポジトリーにコピーして、ファイルを展開してアップグレードします。
  3. 以下のコマンドを実行して、 graph data init container をビルドします。

    podman build -f <path_to_Dockerfile> -t ${DISCONNECTED_REGISTRY}/cincinnati/cincinnati-graph-data-container:latest
    podman push ${DISCONNECTED_REGISTRY}/cincinnati/cincinnati-graph-data-container:latest --authfile=/path/to/pull_secret.json

    path_to_Dockerfile は、直前の手順で作成したファイルへのパスに置き換えます。

    ${DISCONNECTED_REGISTRY}/cincinnati/cincinnati-graph-data-container は、ローカルグラフデータ init container へのパスに置き換えます。

    /path/to/pull_secret は、プルシークレットへのパスに置き換えます。

    注記: podman がインストールされていない場合は、コマンドの podmandocker に置き換えることもできます。

9.1.5. ミラーリングされたレジストリーの証明書の設定

セキュアな外部コンテナーレジストリーを使用してミラーリングされた OpenShift Container Platform リリースイメージを保存する場合は、アップグレードグラフをビルドするために OpenShift Update Service からこのレジストリーへのアクセス権が必要です。OpenShift Update Service Pod と連携するように CA 証明書を設定するには、以下の手順を実行します。

  1. image.config.openshift.io にある OpenShift Container Platform 外部レジストリー API を検索します。これは、外部レジストリーの CA 証明書の保存先です。

    詳細は、OpenShift Container Platform ドキュメントの 「OpenShift Container Platform のイメージレジストリー Operator」を参照してください。

  2. openshift-config namespace に ConfigMap を作成します。
  3. CA 証明書をキーの cincinnati-registry に追加します。OpenShift Update Service はこの設定を使用して、証明書を特定します。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: trusted-ca
    data:
      cincinnati-registry: |
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
  4. image.config.openshift.io API の cluster リソースを編集して、additionalTrustedCA フィールドを作成した ConfigMap 名に設定します。

    oc patch image.config.openshift.io cluster -p '{"spec":{"additionalTrustedCA":{"name":"trusted-ca"}}}' --type merge

    trusted-ca は、新しい ConfigMap へのパスに置き換えます。

OpenShift Update Service Operator は、変更がないか、image.config.openshift.io API と、openshift-config namespace に作成した ConfigMap を監視し、CA 証明書が変更された場合にはデプロイメントを再起動します。

9.1.6. OpenShift Update Service インスタンスのデプロイ

ハブクラスターへの OpenShift Update Service インスタンスのデプロイが完了したら、このインスタンスは、クラスターのアップグレードのイメージをミラーリングして非接続マネージドクラスターに提供する場所に配置されます。インスタンスをデプロイするには、以下の手順を実行します。

  1. デフォルトの Operator の namespace (openshift-cincinnati) を使用しない場合は、お使いの OpenShift Update Service インスタンスの namespace を作成します。

    1. OpenShift Container Platform ハブクラスターコンソールのナビゲーションメニューで、Administration > Namespaces を選択します。
    2. Create Namespace を選択します。
    3. namespace 名と、namespace のその他の情報を追加します。
    4. Create を選択して namespace を作成します。
  2. OpenShift Container Platform コンソールの Installed Operators セクションで、Red Hat OpenShift Update Service Operator を選択します。
  3. メニューから Create Instance を選択します。
  4. OpenShift Update Service インスタンスからコンテンツを貼り付けます。YAML ファイルは以下のマニフェストのようになります。

    apiVersion: cincinnati.openshift.io/v1beta1
    kind: Cincinnati
    metadata:
      name: openshift-update-service-instance
      namespace: openshift-cincinnati
    spec:
      registry: <registry_host_name>:<port>
      replicas: 1
      repository: ${LOCAL_REGISTRY}/ocp4/release
      graphDataImage: '<host_name>:<port>/cincinnati-graph-data-container'

    spec.registry の値は、イメージの非接続環境にあるローカルレジストリーへのパスに置き換えます。

    spec.graphDataImage の値は、グラフデータ init container へのパスに置き換えます。ヒント: これは、podman push コマンドを使用して、グラフデータ init container をプッシュする時に使用した値と同じです。

  5. Create を選択してインスタンスを作成します。
  6. ハブクラスター CLI で oc get pods コマンドを入力し、インスタンス作成のステータスを表示します。時間がかかる場合がありますが、コマンド結果でインスタンスと Operator が実行中である旨が表示されたらプロセスは完了です。

9.1.7. デフォルトレジストリーを上書きするためのポリシーのデプロイ (任意)

注記: 本セクションの手順は、ミラーレジストリーにリリースをミラーリングした場合にのみ該当します。

OpenShift Container Platform にはイメージレジストリーのデフォルト値があり、この値でアップグレードパッケージの検索先を指定します。非接続環境では、リリースイメージをミラーリングするローカルイメージレジストリーへのパスに値を置き換えるポリシーを作成してください。

これらの手順では、ポリシーの名前に ImageContentSourcePolicy を指定します。ポリシーを作成するには、以下の手順を実行します。

  1. ハブクラスターの OpenShift Container Platform 環境にログインします。
  2. OpenShift Container Platform ナビゲーションから Administration > Custom Resource Definitions を選択します。
  3. Instances タブを選択します。
  4. コンテンツが表示されるように非接続 OLM を設定する時に作成した ImageContentSourcePolicy の名前を選択します。
  5. YAML タブを選択して、YAML 形式でコンテンツを表示します。
  6. ImageContentSourcePolicy の内容全体をコピーします。
  7. Red Hat Advanced Cluster Management コンソールで、Govern risk > Create policy を選択します。
  8. YAML スイッチを On に設定して、ポリシーの YAML バージョンを表示します。
  9. YAML コードのコンテンツをすべて削除します。
  10. 以下の YAML コンテンツをウィンドウに貼り付け、カスタムポリシーを作成します。

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-pod
      namespace: default
      annotations:
        policy.open-cluster-management.io/standards:
        policy.open-cluster-management.io/categories:
        policy.open-cluster-management.io/controls:
    spec:
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-pod-sample-nginx-pod
            spec:
              object-templates:
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: v1
                    kind: Pod
                    metadata:
                      name: sample-nginx-pod
                      namespace: default
                    status:
                      phase: Running
              remediationAction: inform
              severity: low
      remediationAction: enforce
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-pod
      namespace: default
    placementRef:
      name: placement-policy-pod
      kind: PlacementRule
      apiGroup: apps.open-cluster-management.io
    subjects:
    - name: policy-pod
      kind: Policy
      apiGroup: policy.open-cluster-management.io
    ---
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-policy-pod
      namespace: default
    spec:
      clusterConditions:
      - status: "True"
        type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
          []  # selects all clusters if not specified
  11. テンプレートの objectDefinition セクション内のコンテンツは、ImageContentSourcePolicy の設定を追加する以下の内容に置き換えます。

    apiVersion: operator.openshift.io/v1alpha1
    kind: ImageContentSourcePolicy
    metadata:
      name: ImageContentSourcePolicy
    spec:
      repositoryDigestMirrors:
      - mirrors:
        - <path-to-local-mirror>
        source: registry.redhat.io
    • path-to-local-mirror は、ローカルミラーリポジトリーへのパスに置き換えます。
    • ヒント: oc adm release mirror コマンドを入力すると、ローカルミラーへのパスが分かります。
  12. Enforce if supported のボックスを選択します。
  13. Create を選択してポリシーを作成します。

9.1.8. 非接続カタログソースをデプロイするためのポリシーのデプロイ

マネージドクラスターに Catalogsource ポリシーをプッシュして、接続環境がある場所から非接続のローカルレジストリーにデフォルトの場所を変更します。

  1. Red Hat Advanced Cluster Management コンソールで Automate infrastructure > Clusters を選択します。
  2. クラスター一覧でポリシーを受信するマネージドクラスターを検索します。
  3. マネージドクラスターの name ラベルの値をメモします。ラベルの形式は name=managed-cluster-name です。この値は、ポリシーのプッシュ時に使用します。
  4. Red Hat Advanced Cluster Management コンソールメニューで、Govern risk > Create policy を選択します。
  5. YAML スイッチを On に設定して、ポリシーの YAML バージョンを表示します。
  6. YAML コードのコンテンツをすべて削除します。
  7. 以下の YAML コンテンツをウィンドウに貼り付け、カスタムポリシーを作成します。
  8. 以下の YAML コンテンツをウィンドウに貼り付け、カスタムポリシーを作成します。

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-pod
      namespace: default
      annotations:
        policy.open-cluster-management.io/standards:
        policy.open-cluster-management.io/categories:
        policy.open-cluster-management.io/controls:
    spec:
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-pod-sample-nginx-pod
            spec:
              object-templates:
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: v1
                    kind: Pod
                    metadata:
                      name: sample-nginx-pod
                      namespace: default
                    status:
                      phase: Running
              remediationAction: inform
              severity: low
      remediationAction: enforce
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-pod
      namespace: default
    placementRef:
      name: placement-policy-pod
      kind: PlacementRule
      apiGroup: apps.open-cluster-management.io
    subjects:
    - name: policy-pod
      kind: Policy
      apiGroup: policy.open-cluster-management.io
    ---
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-policy-pod
      namespace: default
    spec:
      clusterConditions:
      - status: "True"
        type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
          []  # selects all clusters if not specified
  9. 以下の内容をポリシーに追加します。

    apiVersion: config.openshift.io/vi
    kind: OperatorHub
    metadata:
     name: cluster
    spec:
     disableAllDefaultSources: true
  10. 以下の内容を追加します。

    apiVersion: operators.coreos.com/v1alpha1
    kind: CatalogSource
    metadata:
      name: my-operator-catalog
      namespace: openshift-marketplace
    spec:
      sourceType: grpc
      image: <registry_host_name>:<port>/olm/redhat-operators:v1
      displayName: My Operator Catalog
      publisher: grpc

    spec.image の値は、ローカルの制約付きのカタログソースイメージへのパスに置き換えます。

  11. Red Hat Advanced Cluster Management コンソールのナビゲーションで、Automate infrastructure > Clusters を選択して、マネージドクラスターのステータスを確認します。ポリシーが適用されると、クラスターのステータスは Ready になります。

9.1.9. マネージドクラスターのパラメーターを変更するためのポリシーのデプロイ

ClusterVersion ポリシーをマネージドクラスターにプッシュし、アップグレード取得先のデフォルトの場所を変更します。

  1. マネージドクラスターから、以下のコマンドを入力して ClusterVersion アップストリームパラメーターがデフォルトの OpenShift Update Service オペランドであることを確認します。

    oc get clusterversion -o yaml

    返される内容は以下のようになります。

    apiVersion: v1
    items:
    - apiVersion: config.openshift.io/v1
      kind: ClusterVersion
    [..]
      spec:
        channel: stable-4.4
        upstream: https://api.openshift.com/api/upgrades_info/v1/graph
  2. ハブクラスターから、oc get routes というコマンドを入力して OpenShift Update Service オペランドへのルート URL を特定します。

    ヒント: 今後の手順で使用できるようにこの値をメモします。

  3. ハブクラスターの Red Hat Advanced Cluster Management コンソールメニューで、Govern risk > Create a policy を選択します。
  4. YAML スイッチを On に設定して、ポリシーの YAML バージョンを表示します。
  5. YAML コードのコンテンツをすべて削除します。
  6. 以下の YAML コンテンツをウィンドウに貼り付け、カスタムポリシーを作成します。

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-pod
      namespace: default
      annotations:
        policy.open-cluster-management.io/standards:
        policy.open-cluster-management.io/categories:
        policy.open-cluster-management.io/controls:
    spec:
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-pod-sample-nginx-pod
            spec:
              object-templates:
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: v1
                    kind: Pod
                    metadata:
                      name: sample-nginx-pod
                      namespace: default
                    status:
                      phase: Running
              remediationAction: inform
              severity: low
      remediationAction: enforce
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-pod
      namespace: default
    placementRef:
      name: placement-policy-pod
      kind: PlacementRule
      apiGroup: apps.open-cluster-management.io
    subjects:
    - name: policy-pod
      kind: Policy
      apiGroup: policy.open-cluster-management.io
    ---
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement-policy-pod
      namespace: default
    spec:
      clusterConditions:
      - status: "True"
        type: ManagedClusterConditionAvailable
      clusterSelector:
        matchExpressions:
          []  # selects all clusters if not specified
  7. policy セクションの policy.spec に以下の内容を追加します。

    apiVersion: config.openshift.io/v1
      kind: ClusterVersion
      metadata:
        name: version
      spec:
        channel: stable-4.4
        upstream: https://example-cincinnati-policy-engine-uri/api/upgrades_info/v1/graph

    spec.upstream の値は、ハブクラスター OpenShift Update Service オペランドへのパスに置き換えます。

    ヒント: 以下の手順を実行すると、オペランドへのパスを確認できます。

    1. ハブクラスターで oc get routes -A コマンドを実行します。
    2. cincinnati へのルートを見つけます。+ オペランドへのパスは、HOST/PORT フィールドの値です。
  8. マネージドクラスター CLI で、ClusterVersion のアップストリームパラメーターがローカルハブクラスター OpenShift Update Service URL に更新されていることを確認します。これには以下のコマンドを入力します。

    oc get clusterversion -o yaml

    結果は、以下の内容のようになります。

    apiVersion: v1
    items:
    - apiVersion: config.openshift.io/v1
      kind: ClusterVersion
    [..]
      spec:
        channel: stable-4.4
        upstream: https://<hub-cincinnati-uri>/api/upgrades_info/v1/graph

9.1.10. 利用可能なアップグレードの表示

以下の手順を実行して、マネージドクラスターで利用可能なアップグレード一覧を確認します。

  1. Red Hat Advanced Cluster Management コンソールにログインします。
  2. ナビゲーションメニューで Automate infrastructure > Clusters を選択します。
  3. 状態が Ready のクラスターを選択します。
  4. Actions メニューから Upgrade cluster を選択します。
  5. オプションのアップグレードパスが利用可能であることを確認します。

    注記: 現行バージョンがローカルのイメージリポジトリーにミラーリングされていない場合には、利用可能なアップグレードバージョンは表示されません。

9.1.11. クラスターのアップグレード

非接続レジストリーの設定後に、Red Hat Advanced Cluster Management および OpenShift Update Service は非接続レジストリーを使用して、アップグレードが利用可能かどうかを判断します。利用可能なアップグレードが表示されない場合は、クラスターの現行のリリースイメージと、1 つ後のイメージがローカルリポジトリーにミラーリングされていることを確認します。クラスターの現行バージョンのリリースイメージが利用できないと、アップグレードは利用できません。

以下の手順を実行してアップグレードします。

  1. Red Hat Advanced Cluster Management コンソールで Automate infrastructure > Clusters を選択します。
  2. そのクラスターの内、利用可能なアップグレードがあるかどうかを判断するクラスターを特定します。
  3. 利用可能なアップグレードがある場合は、クラスターの Distribution version コラムで、アップグレードが利用可能であることが表示されます。
  4. クラスターの Options メニュー、Upgrade cluster の順に選択します。
  5. アップグレードのターゲットバージョン、Upgrade の順に選択します。

マネージドクラスターは、選択したバージョンに更新されます。