1.11. クラスター API


Cluster API は、Kubernetes クラスターのプロビジョニング、アップグレード、管理を簡素化する宣言型 API を提供します。multicluster engine Operator は、コアとなる Cluster API コンポーネントに加え、複数のインフラストラクチャープロバイダーとブートストラッププロバイダーをインストールすることで、さまざまなユースケースとプラットフォームをサポートします。スタンドアロンの multicluster engine Operator または Red Hat Advanced Cluster Management で Cluster API を使用する方法を説明します。次のプロセスを参照してください。

1.11.1. Cluster API を使用したマネージドクラスターのインストール

metal3 インフラストラクチャープロバイダーと OpenShift Container Platform 支援ブートストラップおよびコントロールプレーンプロバイダーを使用して、Cluster API を備えた OpenShift Container Platform マネージドクラスターをインストールできます。

  • ControlPlane リソースはコントロールプレーンのプロパティーを定義します。
  • ClusterInfrastructure は、クラスターレベルのインフラストラクチャーの詳細を定義します。

前提条件

  • Red Hat Advanced Cluster Management インストールまたは multicluster engine Operator スタンドアロンインストールのいずれかからの MultiClusterEngine リソースが必要です。
  • api.<cluster_name>.<base_domain> の API ベースドメインは、静的 API 仮想 IP を指している必要があります。
  • *.apps.<cluster_name>.<base_domain> のアプリケーションベースドメインは、Ingress 仮想 IP の静的 IP アドレスを指している必要があります。
  • クラスターの内部 API エンドポイント api-int.<baseDomain> が必要です。

1.11.1.1. Cluster API を使用したワークロードのプロビジョニング

  1. ワークロードをプロビジョニングするために必要なサービスを有効にします。デフォルトでは、assisted-service が有効になっています。デフォルトでは、cluster-api-provider-metal3 および cluster-api-provider-openshift-assisted は無効になっています。3 つのサービスがすべて enabled: true であることを確認します。以下のコマンドを実行してリソースを編集します。

    oc edit multiclusterengines.multicluster.openshift.io -n multicluster-engine
    Copy to Clipboard Toggle word wrap
  2. .spec.overridesassisted-service コンポーネント、cluster-api-provider-metal3 コンポーネント、および cluster-api-provider-openshift-assisted コンポーネントについて enabled: true を設定します。次の configOverrides 値を参照してください。

        - configOverrides: {}
          enabled: true
          name: assisted-service
        - configOverrides: {}
          enabled: true
          name: cluster-api
    ...
        - configOverrides: {}
          enabled: true
          name: cluster-api-provider-metal3
        - configOverrides: {}
          enabled: true
          name: cluster-api-provider-openshift-assisted
    Copy to Clipboard Toggle word wrap
  3. Central Infrastructure Management サービスの有効化手順は central infrastructure management サービスの有効化 を参照してください。
  4. clusterNetwork 仕様、controlPlaneRef 仕様、および infrastructureRef 仕様を使用して Cluster リソースを設定します。次の Cluster リソースを参照してください。

    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      name: <cluster-name>
      namespace: <cluster-namespace>
    spec:
      clusterNetwork:
        pods:
          cidrBlocks:
            - 172.18.0.0/20
        services:
          cidrBlocks:
            - 10.96.0.0/12
      controlPlaneRef: 
    1
    
        apiVersion: controlplane.cluster.x-k8s.io/v1alpha2
        kind: OpenshiftAssistedControlPlane
        name:  <cluster-name>
        namespace:  <cluster-namespace>
      infrastructureRef: 
    2
    
        apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
        kind: Metal3Cluster
        name: <cluster-name>
        namespace: <cluster-namespace>
    Copy to Clipboard Toggle word wrap
    1
    OpenshiftAssistedControlPlane はコントロールプレーンです。
    2
    Metal3Cluster はインフラストラクチャーです。
  5. 以下のコマンドを実行して YAML コンテンツを適用します。

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  6. distributionVersionapiVIPs、および SSH キーを含む OpenshiftAssistedControlPlane リソースを設定します。distributionVersion フィールドに OpenShift Container Platform のバージョンを指定します。

    注記: distributionVersion の値は OpenShift Container Platform Releases のイメージと一致します。次の YAML リソースを参照してください。

    apiVersion: controlplane.cluster.x-k8s.io/v1alpha2
    kind: OpenshiftAssistedControlPlane
    metadata:
      name: <cluster-name>
      namespace: <cluster-namespace>
      annotations: {}
    spec: 
    1
    
      openshiftAssistedConfigSpec:
        sshAuthorizedKey: "{{ ssh_authorized_key }}"
        nodeRegistration:
          kubeletExtraLabels:
          - 'metal3.io/uuid="${METADATA_UUID}"'
      distributionVersion: <4.x.0>
      config:
        apiVIPs:
        - 192.168.222.40
        ingressVIPs:
        - 192.168.222.41
        baseDomain: lab.home
        pullSecretRef:
          name: "pull-secret"
        sshAuthorizedKey: "{{ ssh_authorized_key }}" 
    2
    
      machineTemplate:
        infrastructureRef:
          apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
          kind: Metal3MachineTemplate
          name: <cluster-name-control-plane>
          namespace: <cluster-namespace>
      replicas: 3
    Copy to Clipboard Toggle word wrap
    1
    .spec.openshiftAssistedConfigSpec.sshAuthorizedKey は、ブート フェーズ (検出 フェーズとも呼ばれる) でノードにアクセスする場合に使用されます。
    2
    .spec.config.sshAuthorizedKey は、プロビジョニングされた OpenShift Container Platform ノードにアクセスするために使用されます。
  7. YAML ファイルを適用します。以下のコマンドを実行します。

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  8. プルシークレットがない場合は、クラスターがコンテナーレジストリーからイメージをプルできるように、プルシークレットを作成する必要があります。プルシークレットを作成するには、次の手順を実行します。
  9. イメージをプルするための YAML ファイルを作成します。pull-secret.yaml という名前のファイルの次の例を参照してください。

    apiVersion: v1
    kind: Secret
    metadata: 
    1
    
      name: pull-secret
      namespace: <cluster-namespace>
    data: 
    2
    
      .dockerconfigjson: <encoded_docker_configuration>
    type: kubernetes.io/dockerconfigjson
    Copy to Clipboard Toggle word wrap
    1
    <cluster-namespace> 値がターゲットの namespace と一致していることを確認します。
    2
    <encoded_docker_configuration> の値として、base64 でエンコードされた設定ファイルを指定します。
  10. 次のコマンドを実行して、ファイルを適用します。

    oc apply -f pull-secret.yaml
    Copy to Clipboard Toggle word wrap
  11. ベアメタル上のクラスターのデプロイメントに関連する情報が含まれる Metal3Cluster インフラストラクチャーリソースを設定します。

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: Metal3Cluster
    metadata:
      name: <cluster-name>
      namespace: <cluster-namespace>
    spec:
      controlPlaneEndpoint:
        host: <cluster-name>.lab.home 
    1
    
        port: 6443
      noCloudProvider: true
    Copy to Clipboard Toggle word wrap
    1
    host は、Cluster リソースの clusterName を持つ <clusterName>.<baseDomain>* 値であり、baseDomainOpenshiftAssistedControlPlane リソースで定義されます。
  12. ファイルを適用します。以下のコマンドを実行します。

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  13. OpenshiftAssistedControlPlane リソースから参照されるコントロールプレーンノードの Metal3MachineTemplate リソースを設定します。以下の YAML 例を参照してください。

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: Metal3MachineTemplate
    metadata:
      name: <cluster-name>
      namespace: <cluster-namespace>
    spec:
      nodeReuse: false
      template:
        spec:
          automatedCleaningMode: disabled
          dataTemplate:
            name: <cluster-name-template>
          image: 
    1
    
            checksum: https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.19/4.19.0/sha256sum.txt
            checksumType: sha256
            url: https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.19/4.19.0/rhcos-4.19.0-x86_64-nutanix.x86_64.qcow2
            format: qcow2
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: Metal3DataTemplate
    metadata:
       name: <cluster-name-template>
       namespace: <cluster-namespace>
    spec:
       clusterName: <cluster-name> 
    2
    Copy to Clipboard Toggle word wrap
    1
    イメージは、distributionVersion 値と OpenShift Container Platform Releases のバージョンと一致します。
    2
    clusterNameCluster リソースと同じ値に設定します。
  14. ファイルを適用します。以下のコマンドを実行します。

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  15. Metal3MachineTemplate を参照する MachineDeployment リソースを使用してワーカーノードを設定します。以下は、YAML の例です。

    apiVersion: cluster.x-k8s.io/v1beta1
    kind: MachineDeployment
    metadata:
      name: <cluster-name-worker>
      namespace: <cluster-namespace>
      labels:
        cluster.x-k8s.io/cluster-name: <cluster-name>
    spec:
      clusterName: <cluster-name>
      replicas: 2
      selector:
        matchLabels:
          cluster.x-k8s.io/cluster-name: <cluster-name>
      template:
        metadata:
          labels:
            cluster.x-k8s.io/cluster-name: <cluster-name>
        spec:
          clusterName: <cluster-name>
          bootstrap: 
    1
    
            configRef:
              name: <cluster-name-worker>
              apiVersion: bootstrap.cluster.x-k8s.io/v1alpha1
              kind: OpenshiftAssistedConfigTemplate
          infrastructureRef: 
    2
    
            name: <cluster-name-workers-2>
            apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3
            kind: Metal3MachineTemplate
    Copy to Clipboard Toggle word wrap
    1
    ブートストラップ設定は、インストールに関する次のリソースでも参照されます。
    2
    インフラストラクチャー参照は、プロビジョニングするリソースを参照します。
  16. ファイルを適用します。以下のコマンドを実行します。

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  17. MachineDeployment で参照される OpenshiftAssistedConfigTemplate リソースを作成します。次の YAML はワーカーノードのブートストラップ設定を定義し、Assisted Installer を使用してノードを登録するために使用されます。

    apiVersion: bootstrap.cluster.x-k8s.io/v1alpha1
    kind: OpenshiftAssistedConfigTemplate
    metadata:
      name: <cluster-name-worker>
      namespace: <cluster-namespace>
      labels:
        cluster.x-k8s.io/cluster-name: cluster-name
    spec:
      template:
        spec:
          nodeRegistration:
            kubeletExtraLabels:
              - 'metal3.io/uuid="${METADATA_UUID}"'
    1
    
          sshAuthorizedKey: "{{ ssh_authorized_key }}" 
    2
    Copy to Clipboard Toggle word wrap
    1
    kubeletExtraLabels は、この値から変更できません。
    2
    sshAuthorizedKey を入力します。
  18. MachineDeployment リソースで参照される Metal3MachineTemplate を作成します。以下の例を参照してください。

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: Metal3MachineTemplate
    metadata:
       name: <cluster-name-workers-2>
       namespace: <cluster-namespace>
    spec:
       nodeReuse: false
       template:
          spec:
             automatedCleaningMode: metadata
             dataTemplate:
                name: <cluster-name-workers-template>
          image:
            checksum: https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.19/4.19.0/sha256sum.txt
            checksumType: sha256
            url: https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.19/4.19.0/rhcos-4.19.0-x86_64-nutanix.x86_64.qcow2
            format: qcow2
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: Metal3DataTemplate
    metadata:
       name: <cluster-name-workers-template>
       namespace: <cluster-namespace>
    spec:
       clusterName: <cluster-name>
    Copy to Clipboard Toggle word wrap
  19. 次のコマンドを実行して、YAML ファイルを保存し、クラスターをプロビジョニングします。

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  20. クラスターのプロビジョニングステータスを確認します。

    1. oc get cluster --namespace <cluster-namespace> <cluster-name> -o yaml を実行して、Cluster リソースのステータスを確認します。

      次の出力とステータスを参照してください。

      status:
        conditions:
        - lastTransitionTime: "2025-06-25T11:23:38Z"
          status: "True"
          type: Ready
        - lastTransitionTime: "2025-06-25T11:23:38Z"
          status: "True"
          type: ControlPlaneReady
        - lastTransitionTime: "2025-06-25T10:37:03Z"
          status: "True"
          type: InfrastructureReady
      Copy to Clipboard Toggle word wrap
    2. oc get metal3cluster --namespace <cluster-namespace> <cluster-name> -o yaml コマンドを実行して、クラスターインフラストラクチャーのステータスを確認します。

      次の出力とステータスを参照してください。

      status:
        conditions:
        - lastTransitionTime: "2025-06-25T10:37:03Z"
          status: "True"
          type: Ready
        - lastTransitionTime: "2025-06-25T10:37:03Z"
          status: "True"
          type: BaremetalInfrastructureReady
      Copy to Clipboard Toggle word wrap
    3. コントロールプレーンのステータスを確認するには、oc get openshiftassistedcontrolplane --namespace <cluster-namespace> <cluster-name> -o yaml コマンドを実行します。

      次の出力とステータスを参照してください。

      status:
        conditions:
        - lastTransitionTime: "2025-06-25T11:23:38Z"
          status: "True"
          type: Ready
        - lastTransitionTime: "2025-06-25T11:23:38Z"
          status: "True"
          type: ControlPlaneReady
        - lastTransitionTime: "2025-06-25T10:45:48Z"
          status: "True"
          type: KubeconfigAvailable
        - lastTransitionTime: "2025-06-25T10:38:25Z"
          status: "True"
          type: MachinesCreated
        - lastTransitionTime: "2025-06-25T11:10:54Z"
          status: "True"
          type: MachinesReady
        - lastTransitionTime: "2025-06-25T11:23:38Z"
          status: "True"
          type: UpgradeCompleted
      Copy to Clipboard Toggle word wrap
    4. oc get machinedeployment --namespace <cluster-namespace> <cluster-name> -o yaml コマンドを実行して、マシンのデプロイメントのステータスを確認します。

      次の出力とステータスを参照してください。

      status:
        conditions:
        - lastTransitionTime: "2025-06-25T11:10:29Z"
          status: "True"
          type: Ready
        - lastTransitionTime: "2025-06-25T11:10:29Z"
          status: "True"
          type: Available
        - lastTransitionTime: "2025-06-25T11:10:29Z"
          status: "True"
          type: MachineSetReady
      Copy to Clipboard Toggle word wrap
    5. kubectl get machine -l cluster.x-k8s.io/cluster-name=cluster-name -n test-capi -o yaml コマンドを実行して、マシンを確認します。

      次の出力とステータスを参照してください。

     status:
        conditions:
        - lastTransitionTime: "2025-06-25T11:09:57Z"
      	status: "True"
      	type: Ready
        - lastTransitionTime: "2025-06-25T10:38:20Z"
      	status: "True"
      	type: BootstrapReady
        - lastTransitionTime: "2025-06-25T11:09:57Z"
      	status: "True"
      	type: InfrastructureReady
        - lastTransitionTime: "2025-06-25T11:10:29Z"
      	status: "True"
      	type: NodeHealthy
    Copy to Clipboard Toggle word wrap
  21. クラスターにアクセスします。

    1. kubeconfig ファイルを取得するには、次のコマンドを実行します。

      oc get secret -n test-capi  cluster-name-admin-kubeconfig -o json | jq -r .data.kubeconfig | base64 --decode > kubeconfig
      Copy to Clipboard Toggle word wrap
    2. kubeconfig ファイルを使用してクラスターにアクセスするには、次のコマンドを実行します。
    export KUBECONFIG=$(realpath kubeconfig)
    oc get nodes
    Copy to Clipboard Toggle word wrap

1.11.2. Cluster API クラスターの自動インポートの有効化(テクノロジープレビュー)

Cluster API を使用して、プロビジョニングするクラスターを自動的にインポートすることで、時間を節約できます。

必要なアクセス権: クラスター管理者

前提条件

  • Red Hat Advanced Cluster Management インストールまたは multicluster engine Operator スタンドアロンインストールのいずれかからの MultiClusterEngine リソースが必要です。

1.11.2.1. ハブクラスターの準備

プロビジョニングされたクラスターを Cluster API で自動的にインポートする前に、以下の手順を実行する必要があります。

  1. 以下の YAML ファイルの例を追加して、ClusterManager リソースで ClusterImporter フィーチャーゲートを有効にします。

    apiVersion: operator.open-cluster-management.io/v1
    kind: ClusterManager
    metadata:
      name: cluster-manager
    spec:
      registrationConfiguration:
        featureGates:
        - feature: ClusterImporter
          mode: Enable
    Copy to Clipboard Toggle word wrap
  2. clusterImportConfigtrue に設定して、クラスターインポート設定シークレットを作成するようにインポートコントローラーを設定します。ConfigMap リソースは、次の YAML ファイルサンプルのようになります。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: import-controller-config
      namespace: multicluster-engine
    data:
      clusterImportConfig: "true"
    Copy to Clipboard Toggle word wrap
    1. ConfigMap リソースがまだない場合は、以下のコマンドを実行して変更を適用します。< filename> は、お使いのファイル名に置き換えます。

      oc apply -f <filename>.yaml
      Copy to Clipboard Toggle word wrap
    2. ConfigMap リソースがすでにある場合は、以下のコマンドを実行して変更を適用します。
    oc patch configmap import-controller-config -n multicluster-engine --type merge -p '{"data":{"clusterImportConfig":"true"}}'
    Copy to Clipboard Toggle word wrap
  3. Cluster API Manager のパーミッションをインポートコントローラーサービスアカウントにバインドします。以下の YAML ファイルサンプルを追加します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: cluster-manager-registration-capi
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: capi-manager-role
    subjects:
    - kind: ServiceAccount
      name: registration-controller-sa
      namespace: open-cluster-management-hub
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行して、変更を適用します。< filename> は、お使いのファイル名に置き換えます。

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

1.11.2.2. ManagedCluster リソースの作成

自動インポートを有効にするには、Cluster API クラスターと同じ名前と namespace で ManagedCluster リソースを作成します。以下の手順を実行します。

  1. 以下の YAML サンプルを追加して ManagedCluster リソースを作成します。Cluster API クラスターの名前を name パラメーターに追加します。

    apiVersion: cluster.open-cluster-management.io/v1
    kind: ManagedCluster
    metadata:
      name: <clusterapi_cluster_name>
    spec:
      hubAcceptsClient: true
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、変更を適用します。< filename> は、お使いのファイル名に置き換えます。

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

Cluster API を使用してマネージドクラスターをデプロイするときに、Identity and Access Management (IAM)ロールの使用に切り替えることができます。Amazon Web Services (AWS)認証情報を使用してマネージドクラスターを作成した場合、AWS 認証情報から IAM ロールに切り替えて、cluster-api-provider-aws を使用して、AWS 認証情報をマネージドクラスターに保存せずに、ホストされたコントロールプレーンクラスターを使用して Red Hat OpenShift Service on AWS を作成できます。

必要なアクセス権: クラスター管理者

前提条件

  • AWS 認証情報で作成したホストされたコントロールプレーンブートストラップクラスターを備えた Red Hat OpenShift Container Platform または Red Hat OpenShift Service on AWS が必要です。一時的な認証情報を使用できます。詳細は、AWS ドキュメントの 一時的なセキュリティー認証情報を要求 を参照してください。
  • ブートストラップクラスターに Red Hat Advanced Cluster Management for Kubernetes がインストールされている。
  • Cluster API および Cluster API Provider AWS を有効にする前に、HyperShift コンポーネントを無効にする必要があります。

手順

以下の手順を実行します。

  1. MultiClusterEngine リソースを編集します。以下のコマンドを実行します。

    oc edit multiclusterengine engine
    Copy to Clipboard Toggle word wrap
  2. hypershift および hypershift-local-hosting コンポーネントを無効にし、cluster-api および cluster-api -provider-aws コンポーネントを有効にします。以下の例を参照してください。

    - configOverrides: {}
      enabled: false
      name: hypershift
    - configOverrides: {}
      enabled: false
      name: hypershift-local-hosting
    - configOverrides: {}
      enabled: true
      name: cluster-api
    - configOverrides: {}
      enabled: true
      name: cluster-api-provider-aws
    Copy to Clipboard Toggle word wrap
  3. Cluster API および Cluster API Provider AWS デプロイメントが実行されていることを確認します。以下のコマンドを実行します。

    oc get deploy -n multicluster-engine
    Copy to Clipboard Toggle word wrap

    出力は次の例のような内容になります。

    NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
    capa-controller-manager               1/1     1            1           12d
    capi-controller-manager               1/1     1            1           12d
    Copy to Clipboard Toggle word wrap
  4. MultiClusterEngine カスタムリソースを一時停止して、クラスター API プロバイダー AWS コントローラーのサービスアカウントを更新できるようにします。以下のコマンドを実行します。

    oc annotate mce multiclusterengine installer.multicluster.openshift.io/pause=true
    Copy to Clipboard Toggle word wrap
  5. OpenID Connect (OIDC)プロバイダーの詳細を取得します。以下のコマンドを実行します。

    export OIDC_PROVIDER=$(oc get authentication.config.openshift.io cluster -ojson | jq -r .spec.serviceAccountIssuer | sed 's/https:\/\///')
    Copy to Clipboard Toggle word wrap
  6. AWS アカウント ID を設定します。以下のコマンドを実行します。アカウント ID の値を変更します。

    export AWS_ACCOUNT_ID={YOUR_AWS_ACCOUNT_ID}
    Copy to Clipboard Toggle word wrap
  7. capa-controller-manager IAM ロールの信頼ポリシーファイルを作成します。以下のコマンドを実行します。

    cat ./trust.json
    Copy to Clipboard Toggle word wrap
  8. 以下のコンテンツをファイルに追加して、関連付けられた IAM ロールを引き受けることを許可するユーザーを定義します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "${OIDC_PROVIDER}:sub": "system:serviceaccount:multicluster-engine:capa-controller-manager"
            }
          }
        }
      ]
    }
    Copy to Clipboard Toggle word wrap
  9. IAM ロールを作成し、必要な AWS ポリシーを割り当てます。以下のコマンドを実行します。

    aws iam create-role --role-name "capa-manager-role" --assume-role-policy-document file://trust.json --description "IAM role for CAPA to assume"
    
    aws iam attach-role-policy --role-name capa-manager-role --policy-arn arn:aws:iam::aws:policy/AWSCloudFormationFullAccess
    
    aws iam attach-role-policy --role-name capa-manager-role --policy-arn arn:aws:iam::aws:policy/AmazonVPCFullAccess
    Copy to Clipboard Toggle word wrap
  10. IAM ロールの Amazon Resource Name (ARN)を取得します。以下のコマンドを実行します。

    export APP_IAM_ROLE_ARN=$(aws iam get-role --role-name=capa-manager-role --query Role.Arn --output text)
    
    export IRSA_ROLE_ARN=eks.amazonaws.com/role-arn=$APP_IAM_ROLE_ARN
    Copy to Clipboard Toggle word wrap
  11. サービスアカウントに IAM ロール ARN アノテーションを付けます。以下のコマンドを実行します。

    oc annotate serviceaccount -n multicluster-engine capa-controller-manager $IRSA_ROLE_ARN
    Copy to Clipboard Toggle word wrap
  12. Cluster API Provider AWS デプロイメントを再起動します。以下のコマンドを実行します。

    oc rollout restart deployment capa-controller-manager -n multicluster-engine
    Copy to Clipboard Toggle word wrap

ホストされたコントロールプレーンクラスターを備えた Red Hat OpenShift Service on AWS は、クラスターコントロールプレーンが Red Hat Amazon Web Services (AWS)アカウントでホストおよび管理される Red Hat OpenShift Service on AWS のデプロイメントモデルです。Cluster API を使用して、ホストされたコントロールプレーンクラスターを備えた Red Hat OpenShift Service on AWS を作成するには、次のトピックの手順を実行します。

必要なアクセス権: クラスター管理者

前提条件

  • AWS アクセスキーが必要です。詳細は、AWS ドキュメント の IAM ユーザーのアクセスキーの管理 を参照してください。
  • AWS Red Hat OpenShift Service on AWS 管理対象ポリシーは AWS ユーザーパーミッションに割り当てられます。詳細は、AWS ドキュメントの AWS 管理ポリシー を参照してください。
  • OpenShift CLI (oc)が必要です。詳細は、OpenShift Container Platform ドキュメントの OpenShift CLI (oc) を参照してください。
  • ROSA CLI (rosa)が必要です。詳細は、Red Hat OpenShift Service on AWS ドキュメントの ROSA CLI を参照してください。

1.11.4.1. サービスアカウントの作成

ホストされたコントロールプレーンクラスターを使用して Red Hat OpenShift Service on AWS を作成する前に、サービスアカウントが必要です。サービスアカウントがある場合は、このセクションを実行する必要はありません。

手順

以下の手順を実行します。

  1. コンソールで Identity & Access Management > Service Accounts に移動して、サービスアカウントを作成します。
  2. Create service account ボタンをクリックします。
  3. 作成する新しいすべてのサービスアカウントについて、ROSA CLI を使用してアカウントをアクティベートします。

    1. 新しいサービスアカウントにログインします。以下のコマンドを実行します。必要に応じて値を置き換えます。

      rosa login --client-id <your-client-id> --client-secret <your-client-secret>
      Copy to Clipboard Toggle word wrap
    2. サービスアカウントをアクティベートします。以下のコマンドを実行します。
    rosa whoami
    Copy to Clipboard Toggle word wrap

1.11.4.2. AWS 認証情報の設定

ホストされたコントロールプレーンクラスターを使用して Red Hat OpenShift Service on AWS を作成する前に、AWS 認証情報を設定する必要があります。以下の手順を実行します。

  1. AWS でマルチファクター認証を使用していない場合は、作成した AWS アクセスキーを使用して AWS 認証情報を設定します。以下のコマンドを実行します。必要に応じて値を置き換えます。

    echo '[default]
    aws_access_key_id = <your-access-key>
    aws_secret_access_key = <your-secret-access-key>
    region = us-east-1
    ' | base64 -w 0
    Copy to Clipboard Toggle word wrap
  2. AWS でマルチファクター認証を使用している場合は、以下のコマンドを実行します。必要に応じて値を置き換えます。

    echo '[default]
    aws_access_key_id = <your-access-key>
    aws_secret_access_key = <your-secret-access-key>
    aws_session_token= <your-aws-session-token>
    region = us-east-1
    ' | base64 -w 0
    Copy to Clipboard Toggle word wrap
  3. capa-manager-bootstrap-credentials シークレットを更新します。

    1. 前のコマンドの出力をコピーし、その出力を capa-manager-bootstrap-credentials シークレットに追加します。以下のコマンドを実行してシークレットを編集します。

      oc edit secret -n multicluster-engine capa-manager-bootstrap-credentials
      Copy to Clipboard Toggle word wrap
    2. 出力を credentials フィールドに追加します。以下の例を参照してください。

      apiVersion: v1
      data:
        credentials: <your-aws-credentials>
      kind: Secret
      metadata:
      	name: capa-manager-bootstrap-credentials
      	namespace: multicluster-engine
      Copy to Clipboard Toggle word wrap

      オプション: サービスアカウントで AWS IAM ロールを使用して capa-controller-manager を認証する場合は、Additional resources セクションを参照し、Cluster API マネージドクラスター(テクノロジープレビュー)の AWS 認証情報から IAM ロールへの切り替え の手順を 完了します。

  4. capa-controller-manager デプロイメントを再起動します。以下のコマンドを実行します。

    oc rollout restart deployment capa-controller-manager -n multicluster-engine
    Copy to Clipboard Toggle word wrap

1.11.4.3. OpenShift Cluster Manager の認証

AWS コントローラー用の Cluster API プロバイダー では、Red Hat OpenShift Service on AWS をホストされたコントロールプレーンでプロビジョニングするために OpenShift Cluster Manager の認証情報が必要です。以下の手順を実行します。

  1. 作成したサービスアカウント認証情報を使用して、ターゲット namespace に Kubernetes シークレットを作成します。ROSAControlPlane リソースは、プロビジョニング中にこのシークレットを参照します。以下のコマンドを実行します。必要に応じて値を置き換えます。

    oc create namespace <your-rosa-hcp-namespace>
      oc -n <your-rosa-hcp-namespace> create secret generic rosa-creds-secret \
        --from-literal=ocmClientID='....' \
        --from-literal=ocmClientSecret='eyJhbGciOiJIUzI1NiIsI....' \
        --from-literal=ocmApiUrl='https://api.openshift.com'
    Copy to Clipboard Toggle word wrap
  2. オプション: シークレット rosa-creds-secret を呼び出して multicluster-engine namespace に作成することで、ROSAControlPlane リソースからシークレットを参照せずに使用できます。以下のコマンドを実行します。

    oc -n multicluster-engine create secret generic rosa-creds-secret \
      --from-literal=ocmClientID='....' \
      --from-literal=ocmClientSecret='eyJhbGciOiJIUzI1NiIsI....' \
      --from-literal=ocmApiUrl='https://api.openshift.com'
    Copy to Clipboard Toggle word wrap

サービスアカウントを作成して AWS 認証情報を設定し、OpenShift Cluster Manager 認証情報を認証した後に、次の手順を実行して、ホストされたコントロールプレーンクラスターを使用して Red Hat OpenShift Service on AWS を作成します。

  1. AWSClusterControllerIdentity リソースを作成します。以下の YAML ファイルサンプルを参照してください。

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
    kind: AWSClusterControllerIdentity
    metadata:
      name: "default"
    spec:
      allowedNamespaces: {}
    Copy to Clipboard Toggle word wrap
  2. ROSARoleConfig リソースを作成します。以下の YAML ファイルサンプルを参照してください。

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
    kind: ROSARoleConfig
    metadata:
      name: "role-config"
      namespace: "ns-rosa-hcp"
    spec:
      accountRoleConfig:
        prefix: "rosa"
        version: "4.20.0"
      operatorRoleConfig:
        prefix: "rosa"
      credentialsSecretRef:
        name: rosa-creds-secret
      oidcProviderType: Managed
    Copy to Clipboard Toggle word wrap
  3. ROSANetwork リソースを作成します。以下の YAML ファイルサンプルを参照してください。

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
    kind: ROSANetwork
    metadata:
      name: "rosa-vpc"
      namespace: "ns-rosa-hcp"
      spec:
        region: "us-west-2"
        stackName: "rosa-hcp-net"
        availabilityZones:
        - "us-west-2a"
        - "us-west-2b"
        - "us-west-2c"
        cidrBlock: 10.0.0.0/16
        identityRef:
          kind: AWSClusterControllerIdentity
          name: default
    Copy to Clipboard Toggle word wrap
  4. ROSARoleConfig リソースが作成されたことを確認します。ROSARoleConfig ステータスに accountRolesRefoidcIDoidcProviderARN、および operatorRolesRef が含まれていることを確認します。以下のコマンドを実行します。

    oc get rosaroleconfig  -n ns-rosa-hcp role-config -o yaml
    Copy to Clipboard Toggle word wrap
  5. ROSANetwork リソースが作成されたことを確認します。ROSANetwork のステータスには、作成されたサブネットが含まれます。以下のコマンドを実行します。

    oc get rosanetwork -n ns-rosa-hcp rosa-vpc -o yaml
    Copy to Clipboard Toggle word wrap
  6. ROSAControlPlane リソースに必要なカスタムリソースを作成します。

    1. 次の YAML ファイルコンテンツを使用して ManagedCluster リソースを作成します。

      apiVersion: cluster.open-cluster-management.io/v1
      kind: ManagedCluster
      metadata:
        name: rosa-hcp-1
        spec:
          hubAcceptsClient: true
      Copy to Clipboard Toggle word wrap
    2. 次の YAML ファイルコンテンツを使用して Cluster リソースを作成します。

      apiVersion: cluster.x-k8s.io/v1beta1
      kind: Cluster
      metadata:
        name: "rosa-hcp-1"
        namespace: "ns-rosa-hcp"
        spec:
          clusterNetwork:
            pods:
              cidrBlocks: ["192.168.0.0/16"]
          infrastructureRef:
            apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
            kind: ROSACluster
            name: "rosa-hcp-1"
            namespace: "ns-rosa-hcp"
          controlPlaneRef:
            apiVersion: controlplane.cluster.x-k8s.io/v1beta2
            kind: ROSAControlPlane
            name: "rosa-cp-1"
            namespace: "ns-rosa-hcp"
      Copy to Clipboard Toggle word wrap
  7. 次の YAML ファイルコンテンツを使用して ROSACluster リソースを作成します。

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
    kind: ROSACluster
    metadata:
      name: "rosa-hcp-1"
      namespace: "ns-rosa-hcp"
      spec: {}
    Copy to Clipboard Toggle word wrap
  8. 次の YAML ファイルコンテンツを使用して ROSAControlPlane リソースを作成します。リージョンROSANetwork リソースの作成に使用した AWS リージョンと一致することを確認します。

    apiVersion: controlplane.cluster.x-k8s.io/v1beta2
    kind: ROSAControlPlane
    metadata:
      name: "rosa-cp-1"
      namespace: "ns-rosa-hcp"
      spec:
        credentialsSecretRef:
          name: rosa-creds-secret
        rosaClusterName: rosa-hcp-1
        domainPrefix: rosa-hcp
        rosaRoleConfigRef:
          name: role-config
        version: "4.20.0"
        region: "us-west-2"
        rosaNetworkRef:
          name: "rosa-vpc"
        network:
          machineCIDR: "10.0.0.0/16"
          podCIDR: "10.128.0.0/14"
          serviceCIDR: "172.30.0.0/16"
        defaultMachinePoolSpec:
          instanceType: "m5.xlarge"
          autoscaling:
            maxReplicas: 6
            minReplicas: 3
        additionalTags:
          env: "demo"
          profile: "hcp"
    Copy to Clipboard Toggle word wrap
  9. ROSAControlPlane ステータスを確認します。以下のコマンドを実行します。READY 列が true であることを確認します。

    oc get ROSAControlPlane rosa-cp-1 -n ns-rosa-hcp
    Copy to Clipboard Toggle word wrap

    注記: ホストされたコントロールプレーンクラスターを備えた Red Hat OpenShift Service on AWS の完全なプロビジョニングに最大 40 分かかる場合があります。

  10. ROSAControlPlane リソースのプロビジョニングが完了したら、ROSAMachinePool が作成されていることを確認します。以下のコマンドを実行します。

    oc get ROSAMachinePool -n ns-rosa-hcp
    Copy to Clipboard Toggle word wrap

    次の出力が表示される場合があります。

    NAMESPACE     NAME        READY   REPLICAS
    ns-rosa-hcp   workers-0   true    1
    ns-rosa-hcp   workers-1   true    1
    ns-rosa-hcp   workers-2   true    1
    Copy to Clipboard Toggle word wrap

    注記: デフォルトの使用可能な ROSAMachinePools 数は、割り当てられたアベイラビリティーゾーンに基づいています。

1.11.4.5. 関連情報

ROSAControlPlane を削除すると、ホストされたコントロールプレーンクラスターを使用して Red Hat OpenShift Service on AWS のプロビジョニングが解除されます。このプロセスの完了には 30 ~ 50 分かかります。関連する ROSAMachinePool リソースは自動的に削除されます。

必要なアクセス権: クラスター管理者

前提条件

  • Cluster API を備えたホストされたコントロールプレーンクラスターを備えた Red Hat OpenShift Service on AWS がある。

手順

  1. ROSAControlPlane カスタムリソースと一致するクラスターカスタムリソースを削除します。以下のコマンドを実行します。必要に応じて値を置き換えます。

    oc delete -n ns-rosa-hcp cluster/rosa-hcp-1 rosacontrolplane/rosa-cp-1
    Copy to Clipboard Toggle word wrap
  2. ROSAControlPlane の削除が完了したら、ROSARoleConfig および ROSANetwork リソースを削除します。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat