ワーカー・ノードのブート・ボリュームの置換

Kubernetes Engine (OKE)を使用して作成したKubernetesクラスタ内のワーカー・ノードのブート・ボリュームを置き換える方法を確認します。

ノート

拡張クラスタを使用している場合、ワーカー・ノードのブート・ボリュームを置換するノードのみを循環できます。拡張クラスタおよび基本クラスタの使用を参照してください。

ノードをサイクルして、ワーカー・ノードのブート・ボリュームを仮想マシン・シェイプとベア・メタル・シェイプの両方に置き換えることができます。

ノードを循環して、管理対象ノードと自己管理ノードの両方のブート・ボリュームを置き換えることができます。

ワーカー・ノードをホストしているコンピュート・インスタンスのブート・ボリュームを置き換えることが、ワーカー・ノードの問題を解決する最良の方法である場合があります。例:

  • インスタンスの起動後に発生した可能性のある構成ドリフトに対処するため。
  • 基礎となるハードウェア障害に対処するため。

Kubernetes Engineを使用すると、次のことができます:

ワーカー・ノードのブート・ボリュームをサイクルして交換すると、Kubernetes Engineはワーカー・ノードを停止する前に、ワーカー・ノードを自動的にコード化およびドレインします。ワーカー・ノードをホストしているコンピュート・インスタンスが停止され、ブート・ボリュームが置き換えられ、インスタンスが再起動されます。インスタンス自体は終了せず、同じOCIDとネットワーク・アドレスを保持することに注意してください。

ノード・プロパティを変更するために、管理対象ノード・プール内のすべてのノードのブート・ボリュームを置換します。

ノード・プールに指定された次の1つ以上のノード・プロパティを更新する場合は、ノード・プール内のすべてのノードを循環して、そのブート・ボリュームを置き換えることができます。

  • BootVolumeSizeInGBs
  • ImageId
  • KmsKeyId
  • KubernetesVersion
  • NodeMetadata
  • SshPublicKey

ノード・プール内のすべてのノードをサイクリングしてブート・ボリュームを置換する場合は、次の点に注意してください。

  • リスト内の1つ以上のプロパティを更新すると、プロパティの更新がノード・プール内のすべてのノードに適用されます。
  • リスト内のプロパティを更新しない場合、ノード・プール内のノードは循環されず、ブート・ボリュームは置換されません。
  • リストにないプロパティを更新すると、ノードのサイクリングおよびブート・ボリュームの置換操作は失敗します。

ノード・プール内のすべてのノードのブート・ボリュームの置換は、次の場合に役立ちます。

個々の管理対象ノードおよび自己管理ノードのブート・ボリュームの置換

ブート・ボリュームの置換がすべて必要な場合は、個々の管理対象ノードまたは自己管理ノードを循環して、ブート・ボリュームを置き換えることができます。

個々の管理対象ノードまたは自己管理ノードをサイクルしてブート・ボリュームを置換する場合は、次の点に注意してください。

  • 管理対象ノードと自己管理ノードの両方で、ブート・ボリュームを置き換えるためにノードをサイクリングするときに、既存のノード構成が保持されます。管理対象ノードの場合、ノード・プールに指定されたノード・プロパティに対する更新は無視されます。
  • コンソール、CLIまたはAPIを使用して、管理対象ノードのブート・ボリュームをサイクルおよび置換できます。
  • 自己管理ノードのブート・ボリュームを循環および置換するには、CLIまたはAPIを使用する必要があります。コンソールを使用して、自己管理ノードのブート・ボリュームを循環および置換することはできません。

ノード・プール内の管理対象ノードのブート・ボリュームをサイクリングおよび交換する際のサービスの可用性とコストのバランスをとります

ノード・プール内のすべての管理対象ノードをサイクルしてブート・ボリュームを置換すると、ブート・ボリュームの置換操作中に使用できないノードの数が増えるほど、Kubernetes Engineがコストを増加させずにパラレルで更新できるノードが増えます。ただし、使用できないノードの数が多いほど、サービスの可用性が低下する可能性があります。

サービスの可用性およびコストに関する独自の要件を満たすようにKubernetes Engineの動作を調整するには、maxUnavailableの値を指定できます。詳細は、「ノード・プールで管理対象ノードをサイクリングする場合のサービス可用性とコストのバランス」を参照してください。

ノードのブート・ボリュームをサイクリングおよび交換する際のコード化とドレイン

ノード・プールを選択し、ワーカー・ノードのブート・ボリュームをサイクルおよび置換することを指定した場合、Kubernetes Engineは既存の管理対象ノードを自動的にコード化およびドレインします。Kubernetesエンジンは、ノード・プールに指定された「コードとドレイン」オプションを使用します。

個々のワーカー・ノード(管理対象ノードまたは自己管理ノードのいずれか)を選択し、そのノードのブート・ボリュームをサイクルして置換することを指定する場合は、「コードとドレイン」オプションを指定できます。管理対象ノードの場合、管理対象ノードに指定した「コードとドレイン」オプションは、ノード・プールに指定した「コードとドレイン」オプションをオーバーライドします。

詳細は、「停止または終了前の管理対象ノードのコード化とドレイン」を参照してください。

ワーカー・ノードのブート・ボリュームの置換

  • 管理対象ノード・プール内のすべてのワーカー・ノードのブート・ボリュームを置換するには:

    1. ナビゲーション・メニューを開き、「開発者サービス」を選択します。「コンテナとアーティファクト」で、「Kubernetesクラスタ(OKE)」を選択します。
    2. クラスタを含むコンパートメントを選択します、
    3. 「クラスタ」ページで、ブート・ボリュームを置換するワーカー・ノードを含むクラスタの名前を選択します。
    4. 「リソース」で、「ノード・プール」を選択し、ブート・ボリュームを置換するワーカー・ノードを含むノード・プールの名前を選択します。
    5. 「編集」を選択し、「管理対象ノード・プール内のすべてのノードのブート・ボリュームの置換によるノード・プロパティの変更」にリストされているサポートされているプロパティの少なくとも1つを変更します。
    6. 「ノード・プール」ページで、「サイクル・ノード」を選択します。

      推奨:アプリケーションに応じてポッド中断の予算を活用し、操作全体を通じて十分な数のレプリカ・ポッドが実行されていることを確認してください。詳細は、Kubernetesドキュメントのアプリケーションに対する中断予算の指定を参照してください。

    7. 「サイクル・ノード」ダイアログで:

      1. 「サイクリング・オプション」リストから「ブート・ボリュームの置換」を選択します。
      2. 次を指定して、更新するノードの数をパラレルに制御し、サービスの可用性とコストのバランスをとります。
        • 使用できないノードの最大数または割合(maxUnavailable):ブート・ボリュームの置換操作中にノード・プールで使用できないノードの最大数(整数または割合で表されます)。使用できないノードの数に整数を指定する場合は、「ノード数」の値より大きい数値を指定しないでください。

        ノード・プール内の管理対象ノードのブート・ボリュームをサイクリングおよび置換する場合のサービスの可用性およびコストのバランスを参照してください。

      3. ブート・ボリュームの置換操作を開始するには、「サイクル・ノード」を選択します。

      Kubernetesエンジンは、ノード・プールに指定された「コードとドレイン」オプションを使用して、ワーカー・ノードをコード化およびドレインします。詳細は、「停止または終了前の管理対象ノードのコード化とドレイン」を参照してください。

    8. 「ノード・プール詳細」ページで、関連する作業リクエストのステータスを表示して、操作の進行状況を監視します(「作業リクエスト詳細の取得」を参照)。

    特定の管理対象ノードのブート・ボリュームを置換するには:

    1. ナビゲーション・メニューを開き、「開発者サービス」を選択します。「コンテナとアーティファクト」で、「Kubernetesクラスタ(OKE)」を選択します。
    2. クラスタを含むコンパートメントを選択します、
    3. 「クラスタ」ページで、ブート・ボリュームを置換するワーカー・ノードを含むクラスタの名前を選択します。
    4. 「リソース」で、「ノード・プール」を選択し、ブート・ボリュームを置換するワーカー・ノードを含むノード・プールの名前を選択します。
    5. 「リソース」で、「ノード」を選択します。
    6. ブート・ボリュームを置換するノードの横にある「アクション」メニューから「サイクル・ノード」を選択します。

    7. 「サイクル・ノード」ダイアログで:
      1. 「サイクリング・オプション」リストから「ブート・ボリュームの置換」を選択します。
      2. ブート・ボリューム置換アクションを実行する前に、ワーカー・ノードをコード化およびドレインするタイミングと方法を指定します。指定する方法は次のとおりです。

        • 削除猶予期間(分):アクションを実行する前にワーカー・ノードをコード化およびドレインできる時間の長さ。デフォルト値(60分)を受け入れるか、または別の値を指定します。たとえば、ワーカー・ノードをコード化し、ワークロードから排出する時間を30分に許可できます。ワーカー・ノードをコード化およびドレインせずにすぐにアクションを実行するには、0分を指定します。
        • 猶予期間の後にアクションを強制:ワーカー・ノードが正常にコード化および排出されていない場合でも、削除猶予期間の終了時にアクションを実行するかどうか。デフォルトでは、このオプションは選択されていません。

        「停止または終了前の管理対象ノードのコード化とドレイン」を参照してください。

      3. 操作を開始するには、「サイクル・ノード」を選択します。
    8. 「クラスタ詳細」ページで関連する作業リクエストのステータスを表示して、操作の進行状況をモニターします(作業リクエスト詳細の取得を参照)。

  • 管理対象ノード・プール内のすべてのワーカー・ノードのブート・ボリュームを置き換えるには

    管理対象ノード・プール内のすべてのワーカー・ノードのブート・ボリュームを置換するには、oci ce node-pool updateコマンドと必要なパラメータを使用します:

    oci ce node-pool update --node-pool-id <node-pool-ocid> --node-pool-cycling-details "{\"isNodeCyclingEnabled\":true,\"cycleModes\":\"BOOT_VOLUME_REPLACE\",\"maximumUnavailable\":<value>}" --<property-to-update> <new-value> [OPTIONS]

    ここで、--<property-to-update> <new-value>は、「ノード・プロパティを変更するための管理対象ノード・プール内のすべてのノードのブート・ボリュームの置換」にリストされている、サポートされているプロパティの少なくとも1つです。次のように指定します。

    • --node-source-details "{\"sourceType\":\"IMAGE\", \"imageId\":\"<image-id-for-bvr>\", \"bootVolumeSizeInGBs\":<boot-volume-size>}"
    • --node-metadata "{\"key1\":\"value1\"}"
    • --ssh-public-key "<key>"
    • --kms-key-id "<key-ocid>"
    • --kubernetes-version <k8s-version>

    例:

    oci ce node-pool update --node-pool-id ocid1.nodepool.oc1.iad.aaaaaaa______eya --node-pool-cycling-details "{\"isNodeCyclingEnabled\":true,\"cycleModes\":\"BOOT_VOLUME_REPLACE\",\"maximumUnavailable\":1}" --node-metadata "{\"foo\":\"bar\"}"

    特定の管理対象ノードまたは自己管理ノードのブート・ボリュームを置き換えるには

    特定の管理対象ノードまたは自己管理ノードのブート・ボリュームを置換するには、oci ce cluster replace-boot-volume-cluster-nodeコマンドと必要なパラメータを使用します:

    oci ce cluster replace-boot-volume-cluster-node --cluster-id <cluster-ocid> --node-id <instance-ocid> [OPTIONS]

    例:

    oci ce cluster replace-boot-volume-cluster-node --cluster-id ocid1.cluster.oc1.iad.aaaaaaaaaf______jrd --node-id ocid1.instance.oc1.iad.anu__flq --node-eviction-settings "{\"evictionGraceDuration\": \"PT0M\",\"isForceActionAfterGraceDuration\": true}"
  • OCI APIを使用して、管理対象ノード・プール内のすべてのワーカー・ノードのブート・ボリュームを置換するには:

    UpdateNodePool操作を実行して、管理対象ノード・プール内のすべてのワーカー・ノードのブート・ボリュームを置き換えます。

    OCI APIを使用して特定の管理対象ノードのブート・ボリュームを置き換えるには:

    ReplaceBootVolumeClusterNode操作を実行して、OCI APIを使用して特定の管理対象ノードのブート・ボリュームを置き換えます。

    Kubernetes APIを使用して管理対象ノードまたは自己管理ノードのブート・ボリュームを置換するには:

    ノート

    Kubernetes APIを使用して、(プラットフォーム・イメージまたはOKEイメージではなく)カスタム・イメージを使用する管理対象ノードまたは自己管理ノードのブート・ボリュームを置き換えるには、IAMポリシーがカスタム・イメージへのアクセスを提供する必要があります。そのようなポリシーがまだ存在しない場合は、次のポリシー・ステートメントを使用してポリシーを作成します。

    ALLOW any-user to read instance-images in TENANCY where request.principal.type = 'cluster'

    クラスタの作成とデプロイメントのためのポリシー構成を参照してください。

    1. 次のように、NodeOperationRuleカスタム・リソースを定義するyamlファイルを作成します。
      apiVersion: oci.oraclecloud.com/v1beta1
      kind: NodeOperationRule
      metadata:
        name: <rule-name>
      spec:
        actions:
          - "replaceBootVolume"
        nodeSelector:
          matchTriggerLabel:
            oke.oraclecloud.com/node_operation: "<value>"
          matchCustomLabels:
            <custom-key>: "<value>"
        maxParallelism: <n>
        nodeEvictionSettings:
          evictionGracePeriod: <number-of-minutes>
          isForceActionAfterGraceDuration: <true|false>
      

      ここでは:

      • name: <rule-name>は、NodeOperationRuleカスタム・リソースに選択した名前を指定します。たとえば、name: my-bvr-ruleです
      • oke.oraclecloud.com/node_operation: "<value>"は、 oke.oraclecloud.com/node_operationラベル・キーに選択した値を指定します。ブート・ボリュームを置換するノードには、このラベル・キーと値のペアがアタッチされている必要があります。例:
            matchTriggerLabel:
              oke.oraclecloud.com/node_operation: "my-bvr-value"

        oke.oraclecloud.com/node_operationラベル・キーに指定する値は、Kubernetesドキュメントの「ラベルおよびセレクタ」トピックの要件に準拠している必要があります。Kubernetes等価性ベースの要件のみがサポートされています。

      • matchCustomLabelsでは、オプションで、選択したキーと値のペアを含むカスタム・ラベルを<custom-key>: "<value>"の形式で指定します。オプションで、カスタム・ラベルのキーと値のペアを指定して、独自のユースケースに対応できます。例:
            matchCustomLabels:
              deployment: "green"

        指定するカスタム・ラベルのキーと値のペアは、Kubernetesドキュメントの「ラベルとセレクタ」トピックの要件に準拠している必要があります。Kubernetes等価性ベースの要件のみがサポートされています。

        マニフェストでカスタム・ラベルのキーと値のペアを指定した場合、ブート・ボリュームは、このカスタム・ラベルとoke.oraclecloud.com/node_operation: "<value>"ラベルの両方を持つノードに対してのみ置換されます。

      • maxParallelism: <n>は、ブート・ボリュームをパラレルに置換するワーカー・ノードの数(最大20)を指定します。
      • evictionGracePeriod: <number-of-minutes>は、ブート・ボリュームを置き換える前にワーカー・ノードをコード化およびドレインできる時間の長さを指定します。デフォルト値(60分)を受け入れるか、または別の値を指定します。たとえば、ワーカー・ノードをコード化してワークロードから排出するために、30分を許可できます。ワーカー・ノードのブート・ボリュームを、コード化およびドレインせずにすぐに交換するには、0分を指定します。
      • isForceActionAfterGraceDuration: <true|false>は、削除猶予期間の最後にワーカー・ノードのブート・ボリュームを置換するかどうかを指定します(正常にコード化および排出されていない場合でも)。指定しない場合、falseにデフォルト設定されます。

      例:

      apiVersion: oci.oraclecloud.com/v1beta1
      kind: NodeOperationRule
      metadata:
        name: my-bvr-rule
      spec:
        actions:
          - "replaceBootVolume"
        nodeSelector:
          matchTriggerLabel:
            oke.oraclecloud.com/node_operation: "my-bvr-value"
          matchCustomLabels:
            deployment: "green"
        maxParallelism: 2
        nodeEvictionSettings:
          evictionGracePeriod: 300
          isForceActionAfterGraceDuration: true
      
    2. 次のように入力して、kubectlを使用してyamlファイルをクラスタに適用します。

      kubectl apply -f <filename>.yaml
    3. 次のように入力して、kubectlを使用して、NodeOperationRuleカスタム・リソースが正常に作成されたことを確認します。

      kubectl get nor
    4. kubectlを使用して、次のように入力して、oke.oraclecloud.com/node_operationラベル・キーの値を指定するラベルをノードに追加します。

      kubectl label node <node-name> oke.oraclecloud.com/node_operation=<value>

      例:

      kubectl label node 10.0.10.53 oke.oraclecloud.com/node_operation=my-bvr-value
    5. カスタム・ラベルのキーと値のペアを指定するためにマニフェストにmatchCustomLabels要素を含めた場合は、kubectlを使用して、次のように入力して、キーと値のペアを指定するノードにラベルを追加します。
      kubectl label node <node-name> <custom-key>=<value>

      例:

      kubectl label node 10.0.10.53 deployment=green
    6. (オプション)次を入力して、進行中のブート・ボリューム置換アクションを表示できます:

      kubectl describe nor <rule-name>
      例:
      kubectl describe nor my-bvr-rule
      出力例:
      Name:         my-bvr-rule
      Namespace:   
      Labels:       <none>
      Annotations:  <none>
      API Version:  oci.oraclecloud.com/v1beta1
      Kind:         NodeOperationRule
      Metadata:
        Creation Timestamp:  2025-02-11T00:11:11Z
        Finalizers:
          nodeoperationrule.oci.oraclecloud.com/finalizers
        Generation:        1
        Resource Version:  244259806
        UID:               xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      Spec:
        Actions:
          replaceBootVolume
        Max Parallelism:  2
        Node Eviction Settings:
          Eviction Grace Period:                 300
          Is Force Action After Grace Duration:  true
        Node Selector:
          Match Trigger Label:
            oke.oraclecloud.com/node_operation:  my-bvr-value
          Match Custom Label:
            deployment: green
      Status:
        Back Off Nodes:
        Canceled Nodes:
        In Progress Nodes:
        	Node Name:        10.0.10.53
          Work Request Id:  ocid1.clustersworkrequest.oc1.phx.aaaa______jda
        Pending Nodes:
        Succeeded Nodes:
      Events:
        Type    Reason                  Age   From               Message
        ----    ------                  ----  ----               -------
        Normal  StartedNodeOperation    1m   NodeOperationRule  Started node operation on node with work request ID: 10.0.10.105: ocid1.clustersworkrequest.oc1.phx.aaaa______jda
      ```
      

クラスタ資格証明のローテーション後の自己管理ノードのブート・ボリュームの置換

自己管理ノードをクラスタに追加し、その後クラスタの資格証明をローテーションする場合、自己管理ノードのブート・ボリュームを置き換えるには、(「ワーカー・ノードのブート・ボリュームの置換」で説明されているステップに加えて)追加のステップが必要です。クラスタのCA証明書が自己管理ノードcloud-initスクリプトで参照されているため、追加のステップが必要です。

クラスタ資格証明のローテーションの手順に従って、自己管理ノードが追加されたクラスタのCA証明書をすでにローテーションしたとします。自己管理ノードのブート・ボリュームを置換する場合は、まず自己管理ノードのcloud-initスクリプトを変更する必要があります。スクリプトで参照されているクラスタの以前のCA証明書を、クラスタの現在のCA証明書に置き換える必要があります。これらのステップに従います。

  1. 次を入力して、自己管理ノードをホストするコンピュート・インスタンスの詳細を取得します:
    oci compute instance get --instance-id <instance-ocid>

    例:

    oci compute instance get --instance-id ocid1.instance.oc1.phx.any______blra

    コンピュート・インスタンスの詳細が返されます。

  2. 次のように入力して、ブート・ボリュームOCID (oci compute instance getコマンドの出力のsource-detailsを参照)を見つけてメモします。

    oci compute instance get --instance-id <instance-ocid> --query 'data."source-details"."boot-volume-id"' --raw-output
    

    例:

    oci compute instance get --instance-id ocid1.instance.oc1.phx.any______blra --query 'data."source-details"."boot-volume-id"' --raw-output
    

    出力例:

    ocid1.bootvolume.oc1.phx.aaaa______g4a

    ブート・ボリュームOCIDは、後のステップで使用します。

  3. 次のように、出力に示されているmetadata値を見つけます。

    "metadata": {
    "ssh_authorized_keys": "<key-value>",
    "user_data": "<existing-base64-encoded-init-script>"
    }

    ssh_authorized_keysは、ノードへのSSHアクセスが設定されている場合に存在することに注意してください(これは通常ですが、必ずしもそうではありません)。

    例:

    "metadata": {
    "ssh_authorized_keys": "ssh-rsa AAAA_____ example@acme.com",
    "user_data": "IyEv___1234___PSIK"
    }
    user_dataの値は、base64エンコード形式の自己管理ノードとしてクラスタにコンピュート・インスタンスを追加するために最初に使用されたcloud-initスクリプトです。cloud-initスクリプトは、クラスタのKubernetes APIプライベート・エンドポイントと、クラスタの以前のbase64エンコードCA証明書を指定します。
  4. 次のように入力して、ssh_authorized_keysおよびuser_data値をコピーし、metadata.jsonという名前の新しいファイルに保存します。
    oci compute instance get --instance-id <instance-ocid> --query 'data.metadata' --raw-output > metadata.json

    metadata.jsonファイルの例:

    {
    "ssh_authorized_keys": "ssh-rsa AAAA_____ user@acme.com",
    "user_data": "IyEv___1234___PSIK"
    }
  5. user_dataの値(元のbase64エンコードのcloud-initスクリプト)をコピーし、次のように入力してデコードします。
    echo "<existing-base64-encoded-init-script>" | base64 --decode

    例:

    echo "IyEv___1234___PSIK" | base64 --decode

    デコードされた出力は、元のcloud-initスクリプトです。例:

    #!/usr/bin/env bash
    bash /etc/oke/oke-install.sh \
      --apiserver-endpoint "10.0.0.12" \
      --kubelet-ca-cert "LS0txxxx______Cg=="

    --kubelet-ca-certの値は、クラスタの以前のCA証明書(base64エンコード形式)です。

  6. デコードされた出力をmy-cloud-init-fileという名前のテキスト・ファイルとして保存します。
  7. 次のように入力して、クラスタの現在のCA証明書(ローテーション後のクラスタのCA証明書)を取得します。
    oci ce cluster create-kubeconfig --cluster-id <cluster-ocid> --region <region-identifier> --file - | grep -oE "LS0t.*"

    クラスタの現在のbase64エンコードCA証明書は、文字LS0tから始まる長い英数字文字列として返されます。例:

    LS0tyyyy______aP==
  8. my-cloud-init-fileに保存したcloud-initスクリプトで、元の値--kubelet-ca-certを現在のbase64エンコードCA証明書に置き換え、ファイルを保存します。

    例:

    #!/usr/bin/env bash
    bash /etc/oke/oke-install.sh \
      --apiserver-endpoint "10.0.0.12" \
      --kubelet-ca-cert "LS0tyyyy______aP=="
  9. Base64は、更新されたcloud-initスクリプトをmy-cloud-init-fileにエンコードします。たとえば、次のように入力します:
    base64 my-cloud-init-file

    更新されたcloud-initスクリプトはbase64でエンコードされ、長い英数字文字列として返されます。例:

    IyEv___5678___PSIK
  10. 前に作成したmetadata.jsonファイルを次のように更新します。

    • 存在する場合は、ssh_authorized_keysの値を変更しないでください。
    • user_dataの値を、更新されたcloud-initスクリプトから作成したbase64エンコードの英数字文字列に変更します。

    例:

    {
          "ssh_authorized_keys": "ssh-rsa AAAA_____ user@acme.com",
          "user_data": "IyEv___5678___PSIK"
    }
  11. 前にメモしたブート・ボリュームOCIDを使用して、次を入力して既存のブート・ボリュームの詳細を取得します:
    oci bv boot-volume get --boot-volume-id <boot-volume-ocid> --query 'data.{ "image_id": "image-id", "kms_key_id": "kms-key-id", "boot-volume-size-in-gbs": "boot-volume-size-in-gbs" }' --raw-output

    例:

    oci bv boot-volume get --boot-volume-id ocid1.bootvolume.oc1.phx.aaaa______g4a --query 'data.{ "image_id": "image-id", "kms_key_id": "kms-key-id", "boot-volume-size-in-gbs": "boot-volume-size-in-gbs" }' --raw-output

    出力例:

    {
      "image_id": "ocid1.image.oc1.phx.aaaa____cra",
      "boot-volume-size-in-gbs": 100,
      "kms_key_id": null
    }
  12. 出力を使用して、my-instance-source-details.jsonという名前の新しいjsonファイルでコンピュート・インスタンスのsource-detailsプロパティに同じ値を次の形式で指定します。
    {
    "image-id": "<returned-bv-image-ocid>",
    "source-type": "image",
    "boot-volume-size-in-gbs": <returned-bv-size>,
    "kms_key_id": <returned-bv-kms-key-ocid>
    "isPreserveBootVolumeEnabled": true
    }

    oci bv boot-volume getコマンドの出力にnull値があると表示されるmy-instance-source-details.jsonに、ブート・ボリュームのプロパティを含める必要はありません。たとえば、ブート・ボリュームがユーザー管理キーで暗号化されていない場合、kms_key_idの値はnullとして表示されます。

    例:

    {
    "image-id": "ocid1.image.oc1.phx.aaaa____cra",
    "source-type": "image",
    "boot-volume-size-in-gbs": 100,
    "isPreserveBootVolumeEnabled": true
    }

    user_dataプロパティを更新するには(特に、新しいCA証明書でcloud-initスクリプトを更新するには)、image-idの値を指定する必要があります。

  13. 次を入力して、自己管理ノードをホストするコンピュート・インスタンスの詳細を更新します

    oci compute instance update --instance-id ocid1.instance.oc1.phx.any______blra --metadata file://metadata.json --source-details file://my-instance-source-details.json
     
  14. 次を入力して、自己管理ノードをホストするコンピュート・インスタンスにuser_dataの更新値があることを確認します:

    oci compute instance get --instance-id <instance-ocid>

    例:

    oci compute instance get --instance-id ocid1.instance.oc1.phx.any______blra

    自己管理ノードをホストしているコンピュート・インスタンスに関する更新済の詳細が返されます。

    {
      "data": {
        ...
        "metadata": {
          "ssh_authorized_keys": "ssh-rsa AAAA_____ user@acme.com",
          "user_data": "IyEv___5678___PSIK"
        ...

    user_data値を、新しいクラスタCA証明書を含むbase64エンコードのcloud-initファイルに更新した後、自己管理ノードのブート・ボリュームを置換できるようになりました。

  15. 次のように入力して、自己管理ノードのブート・ボリュームを置き換えます。
    oci ce cluster replace-boot-volume-cluster-node --cluster-id <cluster-ocid> --node-id <instance-ocid> [OPTIONS]

    例:

    oci ce cluster replace-boot-volume-cluster-node --cluster-id ocid1.cluster.oc1.phx.aaaa______xoq --node-id ocid1.instance.oc1.phx.any______blra --node-eviction-settings "{\"evictionGraceDuration\": \"PT0M\",\"isForceActionAfterGraceDuration\": true}"

    詳細は、ワーカー・ノードのブート・ボリュームの置換を参照してください。