VCNネイティブ・クラスタへの移行

Container Engine for Kubernetes (OKE)を使用して、クラスタを移行し、Kubernetes APIエンドポイントを独自のVCNに統合する方法を確認します。

以前のリリース(2021年3月16日より前)では、Container Engine for Kubernetesは、独自のVCNに統合されていないKubernetes APIエンドポイントでクラスタをプロビジョニングしていました。Kubernetes APIエンドポイントはパブリックであり、アクセスを制限できませんでした。CLIまたはAPIを使用してこのようなクラスタの作成を続行できますが、コンソールは使用できません。

2021年3月16日以降、Container Engine for Kubernetesでは、独自のVCNのサブネット内のKubernetes APIエンドポイントを使用してクラスタをプロビジョニングできます(これらのクラスタは「VCNネイティブ・クラスタ」と呼ばれます)。独自のセキュリティおよびネットワーク要件を満たすように、VCNネイティブ・クラスタをより柔軟に構成できます。VCN (およびピアリング・オンプレミス・ネットワーク)内でプライベートにアクセスできるように、またはインターネットからパブリックにアクセスできるように、Kubernetes APIエンドポイントを構成できます。

  • Kubernetes APIエンドポイントにプライベート・アクセス可能にするには、プライベート・サブネットでKubernetes APIエンドポイントをホストし、パブリックIPアドレスを割り当てません。
  • インターネットからKubernetes APIエンドポイントにパブリックにアクセスできるようにするには、パブリック・サブネットでKubernetes APIエンドポイントをホストし、パブリックIPアドレスを割り当てます。

ネットワーク・セキュリティ・グループ(推奨)またはセキュリティ・リストに定義されたセキュリティ・ルールを使用して、Kubernetes APIエンドポイント・サブネットへのアクセスを制御できます。

VCNネイティブ・クラスタによって提供されるセキュリティ制御を利用するために、既存のクラスタを移行して、そのKubernetes APIエンドポイントを独自のVCNに統合できます。

クラスタの移行には、次のステージがあります。

  • ステージ1:移行中

    移行を開始するには、移行するクラスタを選択し、既存のVCNおよび新しいKubernetes APIエンドポイントをホストするプライベートまたはパブリック・サブネットを指定します。通常、移行には約15分かかります。

    この間、Kubernetes APIには、独自のVCNに統合されていないパブリック・エンドポイントを介して引き続きアクセスできます。ただし、クラスタのライフサイクル操作(クラスタの更新、ノード・プールの作成、削除など)は使用できません。

  • ステージ2:移行が完了し、独自のVCNに統合されていないパブリックKubernetes APIエンドポイントの廃止が保留されています

    移行が完了すると、クラスタには、自分のVCNの新しいKubernetes APIエンドポイントおよびVCNに統合されていないパブリックKubernetes APIエンドポイントを介してアクセスできるようになります。この廃止期間中に、新しいKubernetes APIエンドポイントを使用するようにkubectl、ツールおよびCI/CDパイプラインの構成を更新します。デフォルトでは、更新を完了するには30日かかりますが、廃止期間をわずか5日に短縮するか、30日以上に増やすことができます。独自のVCNに統合されていないパブリックKubernetes APIエンドポイントが廃止されるまでの時間を短縮または増やす場合は、サポート・チケットを申請します。

  • ステージ3:独自のVCNに統合されていないパブリックKubernetes APIエンドポイントは廃止されます

    デコミッション期間(移行後30日またはリクエストした時間)の終了時に、VCNに統合されていないパブリックKubernetes APIエンドポイントを介してクラスタにアクセスできなくなります。クラスタには、VCNに統合された新しいKubernetes APIエンドポイントを介してのみアクセスできます。

既存のクラスタのVCNネイティブへの移行

既存のクラスタを移行して、そのKubernetes APIエンドポイントを独自のVCNに統合するには:

  1. ナビゲーション・メニューを開き、「開発者サービス」をクリックします「コンテナとアーティファクト」で、「Kubernetesクラスタ(OKE)」をクリックします。
  2. 作業する権限があるコンパートメントを選択します。

    移行が必要なラベルは、クラスタ・リスト・ページで、VCNに統合されていないKubernetes APIエンドポイントを持つクラスタの名前の横に表示されます。

  3. クラスタ・リスト」ページで、移行するクラスタの名前をクリックします。

    移行可能なクラスタを選択すると、「クラスタ詳細」ページの上部に「クラスタの移行」ボタンが表示されます。

  4. クラスタのKubernetes APIエンドポイントをインターネットからパブリックにアクセス可能にし、(必要に応じて新しいネットワーク・リソースを作成および構成して)クラスタと同じVCNの新しいパブリック・サブネットでホストするには、次のように自動移行を実行します。
    1. Cluster Details」ページの上部で、「Migrate Cluster」をクリックして、クラスタのKubernetes APIエンドポイントを独自のVCNに統合します。
    2. 「VCNネイティブ・クラスタへの移行」ダイアログ・ボックスで、「自動移行」を選択して、10.0.0.0/28 CIDRブロックを持つクラスタのVCNに、セキュリティ・リストおよびルート表とともに新しいリージョナル・サブネットを作成します。
    3. ワークフローの起動」をクリックし、「VCNネイティブ・エンドポイント・クラスタ移行」ダイアログ・ボックスで移行サマリーを確認します。
    4. 移行」をクリックして新しいネットワーク・リソースを作成し、クラスタを移行します。

      クラスタの移行」ダイアログに示すように、Container Engine for Kubernetesによってクラスタの移行が開始されます。

    5. 閉じる」をクリックして「クラスタの移行中」ダイアログを閉じます。
  5. クラスタのKubernetes APIエンドポイントをVCN内でプライベートにアクセス可能にするか、インターネットからパブリックにアクセス可能にし、クラスタと同じVCN内の既存のリージョナル・パブリック・サブネットまたはプライベート・サブネットでホストする場合は、次のようにカスタム移行を実行します。
    1. 次のネットワーク・リソースがVCNにすでに存在し、Kubernetes APIエンドポイントをホストするように正しく構成されていることを確認します(存在しない場合は、適切に作成して構成します)。

      構成例については、ネットワーク・リソース構成例を参照してください。

    2. Cluster Details」ページの上部で、「Migrate Cluster」をクリックして、クラスタのKubernetes APIエンドポイントを独自のVCNに統合します。
    3. 「VCNネイティブ・クラスタに移行」ダイアログ・ボックスで、「カスタム移行」を選択します。
    4. 「ワークフローの起動」をクリックし、次を指定します。
      • Kubernetes APIエンドポイント・サブネット: クラスタのKubernetes APIエンドポイントをホストするリージョナル・サブネット。指定するサブネットは、パブリックでもプライベートでもかまいません。Kubernetes APIエンドポイントには常にプライベートIPアドレスが割り当てられます。パブリック・サブネットを指定する場合、パブリックIPアドレス(およびプライベートIPアドレス)をエンドポイントに割り当てることで、Kubernetes APIエンドポイントをインターネットにオプションで公開できます。アクセス管理を簡素化するために、Kubernetes APIエンドポイントをワーカー・ノードおよびロード・バランサとは異なるサブネットに配置することをお薦めします。詳細は、Kubernetesクラスタ・コントロール・プレーンおよびKubernetes APIを参照してください。
      • ネットワーク・セキュリティ・グループを使用してトラフィックを制御: オプションで、指定した1つ以上のネットワーク・セキュリティ・グループ(NSG)を使用して、クラスタのKubernetes APIエンドポイントへのアクセスを制限します。NSGに指定するセキュリティ・ルールの詳細は、Kubernetes APIエンドポイントのセキュリティ・ルールを参照してください。
      • APIエンドポイントにパブリックIPアドレスを割り当てます: Kubernetes APIエンドポイントのパブリック・サブネットを選択した場合(およびプライベートIPアドレス)にパブリックIPアドレスを割り当てることで、オプションでエンドポイントをインターネットに公開できます。パブリックIPアドレスを割り当てない場合は、サービス・ゲートウェイおよびNATゲートウェイを使用してエンドポイントへのアクセスを有効にするルート・ルールおよびセキュリティ・ルールを更新します(Kubernetes APIエンドポイント・サブネット構成を参照)。
    5. 移行」をクリックして新しいネットワーク・リソースを作成し、クラスタを移行します。

      Container Engine for Kubernetesがクラスタの移行を開始します。

通常、移行の完了には約15分かかります。この間、Kubernetes APIには、独自のVCNに統合されていないパブリック・エンドポイントを介して引き続きアクセスできます。ただし、クラスタのライフサイクル操作(クラスタの更新、ノード・プールの作成、削除など)は使用できません。

移行が完了すると、「Cluster Details」ページに、Kubernetes APIエンドポイント・サブネットの名前、Kubernetes APIプライベート・エンドポイントのIPアドレス、および(Kubernetes APIエンドポイントにパブリックIPアドレスを割り当てた場合) Kubernetes APIパブリック・エンドポイントのIPアドレスが表示されます。

クラスタ詳細」ページには、新しいKubernetes APIエンドポイントにアクセスするためにkubectl、ツールおよびCI/CDパイプラインの構成を更新する日数が30日あることも示されます(「移行されたクラスタへのアクセスの設定」を参照)。この廃止期間中、新しく移行されたクラスタには、VCNの新しいKubernetes APIエンドポイントと、独自のVCNに統合されていないパブリックKubernetes APIエンドポイントの両方を介してアクセスできます。

移行したクラスタへのアクセスの設定

クラスタを移行してKubernetes APIエンドポイントを独自のVCNに統合した後、新しいKubernetes APIエンドポイントを使用するようにkubectl、ツールおよびCI/CDパイプラインの構成を更新する必要があります。少なくとも、このトピックで説明するように、kubectlを使用して移行したクラスタにアクセスできるように、クラスタのKubernetes構成ファイル(通常は'kubeconfig'ファイルと呼ばれる)を更新する必要があります。また、クラスタのKubernetes APIエンドポイントIPアドレスへの参照を含むマニフェスト・ファイルも更新する必要があります。

このトピックの手順に従って、新しいkubeconfigファイルを生成します。この手順では、クラスタのkubeconfigファイルがデフォルトの場所($HOME/.kube)にデフォルト名(config)で保存されていることを前提としています。そうでない場合は、それに応じて手順を調整します。

  1. 通常Oracle Cloud Infrastructure CLIコマンドを実行する端末ウィンドウで、次のコマンドを実行してクラスタの既存のkubeconfigファイルを更新します。

    oci ce cluster create-kubeconfig --cluster-id <cluster-ocid> --file <kubeconfig-file-location> --region <region-name> --token-version 2.0.0 --kube-endpoint PRIVATE_ENDPOINT|PUBLIC_ENDPOINT

    ここでは:

    • --cluster-id <cluster-OCID>は、VCNネイティブにする既存のクラスタのOCIDです。
    • --file <kubeconfig-file-location>は、クラスタのkubeconfigファイルの場所です。
    • --region <region-name>は、クラスタが存在するリージョンです。
    • --kube-endpoint PRIVATE_ENDPOINT|PUBLIC_ENDPOINTでは、クラスタのKubernetes APIエンドポイントのプライベートIPアドレスまたはパブリックIPアドレスをkubeconfigファイルに追加するかどうかを指定します。詳細は、Kubernetesクラスタ・コントロール・プレーンおよびKubernetes APIを参照してください。

    例:

    oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.phx.aaaaaaaaae... --file $HOME/.kube/config --region us-phoenix-1 --token-version 2.0.0 --kube-endpoint PUBLIC_ENDPOINT

    指定した場所にkubeconfigファイルがすでに存在する場合、クラスタの詳細は、独自のVCNでのクラスタの新しいKubernetes APIエンドポイントなど、既存のkubeconfigファイルに新しいコンテキストとして追加されます。kubeconfigファイルのcurrent-context:要素は、新しく追加されたコンテキストを指すように設定されます。

    kubeconfigファイルの設定の詳細は、クラスタ・アクセスの設定を参照してください。

  2. 次のコマンドを入力して、kubectlが独自のVCNのKubernetes APIエンドポイントを使用してクラスタに接続できることを確認します。

    kubectl get nodes

    クラスタ内のノードに関する情報が表示されます。

    kubectlを使用して、独自のVCNのKubernetes APIエンドポイントを使用してクラスタで操作を実行できるようになりました。

ノートVCNに統合されていない元のAPIエンドポイントが廃止される

までは、oci ce cluster create-kubeconfigコマンドから--kube-endpointオプションを省略して、元のkubeconfigファイルを生成し続けることができます。

クラスタの移行に関するよくある質問

VCNネイティブ・クラスタとは

Container Engine for Kubernetesは、Oracle Cloud Infrastructure Virtual Cloud Network (VCN)に完全に統合されたKubernetesクラスタを作成します。ワーカー・ノード、ロード・バランサおよびKubernetes APIエンドポイントは、独自のVCNの一部であり、パブリックまたはプライベートとして構成できます。独自のVCNに完全に統合されたクラスタは、VCNネイティブ・クラスタと呼ばれます。

クラスタがすでにVCNネイティブ・クラスタであるかどうかを確認するにはどうすればよいですか。

クラスタがすでにVCNネイティブ・クラスタであるかどうかわからない場合は、クラスタに関する情報を表示します(たとえば、コンソールの「Cluster Details」ページ)。クラスタがすでにVCNネイティブ・クラスタである場合、クラスタの詳細にはKubernetes APIエンドポイント情報が含まれます。クラスタがまだVCNネイティブ・クラスタでない場合、クラスタの詳細にはKubernetesアドレスのみが含まれます。

既存のすべてのクラスタを移行する必要がありますか。

いいえ。移行する必要があるのは、VCNネイティブ・クラスタに変換する既存のクラスタのみです。クラスタのKubernetes APIエンドポイントを独自のVCNに統合しない場合は、そのクラスタを移行しないでください。

移行には停止時間が含まれますか。

クラスタがVCNネイティブ・クラスタに移行されている間、クラスタのKubernetes APIには、独自のVCNに統合されていないパブリック・エンドポイントを介して引き続きアクセスできます。ただし、クラスタのライフサイクル操作(クラスタの更新、ノード・プールの作成、削除など)は使用できません。

自動移行またはカスタム移行を選択する必要がありますか。

自動移行では、10.0.0.0/28 CIDRブロックを持つクラスタのVCNに、セキュリティ・リストおよびルート表とともにリージョナル・サブネットが作成されます。サブネットはパブリックで、APIエンドポイントにはパブリックIPアドレスが割り当てられます。自動移行では、クラスタと同じコンパートメントにノード・プールがあるクラスタのみがサポートされます。異なるコンパートメントにノード・プールがあるクラスタの場合は、カスタム移行を実行します。

カスタム移行では、クラスタのKubernetes APIエンドポイントをホストする既存のパブリックまたはプライベートのリージョナル・サブネットを選択できます。パブリック・リージョナル・サブネットを選択した場合は、パブリックIPアドレスをエンドポイントに割り当てることで、オプションでKubernetes APIエンドポイントをインターネットに公開できます。オプションで、ネットワーク・セキュリティ・グループを使用できます。

Kubernetes APIエンドポイントをホストするようにVCNのサブネットを構成するには、どのようにしますか。

Kubernetes APIエンドポイント・サブネット、セキュリティ・リストおよびルート表の構成の詳細は、「クラスタの作成およびデプロイメントのネットワーク・リソース構成」を参照してください。

VCNネイティブ・クラスタへの移行をテストします。VCNに統合されていないKubernetes APIエンドポイントを使用してクラスタを作成するにはどうすればよいですか。

通常Oracle Cloud Infrastructure CLIコマンドを実行する端末ウィンドウで、次のコマンドを実行して、VCNに統合されていないKubernetes APIエンドポイントでテスト・クラスタを作成します。

oci ce cluster create --compartment-id <compartment-ocid> --kubernetes-version v<kubernetes-version-number> --name <cluster-name> --vcn-id <vcn-ocid>

ここでは:

  • --compartment-id <compartment-OCID>は、テスト・クラスタが属するコンパートメントのOCIDです。
  • --kubernetes-version v<kubernetes-version-number>は、サポートされているKubernetesのバージョンです(現在サポートされているKubernetesバージョンを参照)。例: --kubernetes-version v1.19.7
  • --name <cluster-name>は、テスト・クラスタの任意の名前です。たとえば、--name test-vcn-native-migrationです。
  • --vcn-id <vcn-OCID>は、テスト・クラスタを作成するVCNのOCIDです。

VCNに統合されていないKubernetes APIエンドポイントでテスト・クラスタを作成したら、テスト・クラスタを移行してVCNネイティブ・クラスタにすることができます。「既存のクラスタのVCNネイティブへの移行」を参照してください。

不要になったテスト・クラスタは必ず削除してください。

自分のVCNに統合されていないパブリックKubernetes APIエンドポイントが廃止されるまでの時間を増減するにはどうすればよいですか。

デコミッション期間は、新しく移行されたクラスタが、独自のVCNの新しいKubernetes APIエンドポイントと、VCNに統合されていないパブリックAPIエンドポイントの両方を介してアクセスできる期間です。廃止期間により、新しいKubernetes APIエンドポイントを使用するようにkubectl、ツールおよびCI/CDパイプラインの構成を更新する際に停止時間が発生しなくなります。

廃止期間は、Container Engine for Kubernetesがクラスタを移行してKubernetes APIエンドポイントを独自のVCNに統合するとすぐに開始されます。デフォルトでは、更新を完了するには30日かかりますが、廃止期間をわずか5日に減らすか、30日以上に増やすことができます。廃止期間を短縮または延長する場合は、サポート・チケットを申請し、次を指定します:

  • サマリー: Request to modify Reclamation Extension in <region-name>
  • リージョン: <<region-name>
  • コンポーネント: Control Plane
  • 詳細は次のとおりです。
    • Tenancy: <tenancy-name>
    • Tenancy Id: <tenancy-ocid>
    • Cluster: <cluster-name>
    • Cluster Id: <cluster-ocid>
    • Requested expiration date/time: <date-and-time>