VCNネイティブ・クラスタへの移行
Kubernetes Engine (OKE)を使用して、クラスタを移行してKubernetes APIエンドポイントを独自のVCNに統合する方法をご紹介します。
以前のリリース(2021年3月16日より前)では、Kubernetes Engineは、独自のVCNに統合されていないKubernetes APIエンドポイントを含むクラスタをプロビジョニングしました。Kubernetes APIエンドポイントはパブリックであり、アクセスを制限できませんでした。CLIまたはAPIを使用してこのようなクラスタの作成を続行できますが、コンソールは使用できません。
2021年3月16日以降、Kubernetes Engineは、独自のVCNのサブネット内のKubernetes APIエンドポイントを使用してクラスタをプロビジョニングできます(これらのクラスタは「VCNネイティブ・クラスタ」と呼ばれます)。独自のセキュリティおよびネットワーキング要件を満たすように、VCNネイティブ・クラスタをより柔軟に構成できます。Kubernetes APIエンドポイントは、VCN内でプライベートにアクセスできるように(およびピアリングされたオンプレミス・ネットワーク)、またはインターネットからパブリックにアクセスできるように構成できます:
- 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に統合するには:
- ナビゲーション・メニューを開き、「開発者サービス」をクリックします。「コンテナとアーティファクト」で、「Kubernetesクラスタ(OKE)」をクリックします。
-
作業する権限があるコンパートメントを選択します。
「必要な移行」ラベルは、VCNに統合されていないKubernetes APIエンドポイントを含むクラスタの名前の横の「クラスタ・リスト」ページに表示されます。
-
「クラスタ・リスト」ページで、移行するクラスタの名前をクリックします。
移行可能なクラスタを選択すると、「クラスタの詳細」ページの上部に「クラスタの移行」ボタンが表示されます。
- クラスタのKubernetes APIエンドポイントをインターネットからパブリックにアクセスできるようにし、クラスタと同じVCNの新しいパブリック・サブネットでホストする場合(必要に応じて新しいネットワーク・リソースを作成および構成する場合)、次のように自動移行を実行します:
- 「クラスタの詳細」ページの上部で、「クラスタの移行」をクリックして、クラスタのKubernetes APIエンドポイントを独自のVCNに統合します。
- 「VCNネイティブ・クラスタへの移行」ダイアログ・ボックスで、「自動移行」を選択し、セキュリティ・リストおよびルート表とともに、10.0.0.0/28 CIDRブロックを含むクラスタVCNに新しいリージョナル・サブネットを作成します。
- 「ワークフローの起動」をクリックし、「VCNネイティブ・エンドポイント・クラスタ移行」ダイアログ・ボックスで移行サマリーを確認します。
- 「移行」をクリックして、新しいネットワーク・リソースを作成し、クラスタを移行します。
Kubernetesエンジンは、「クラスタの移行」ダイアログに示すように、クラスタの移行を開始します。
- 「閉じる」をクリックすると、「クラスタの移行」ダイアログが表示されます。
- クラスタのKubernetes APIエンドポイントに、VCN内でプライベートにアクセスできるようにするか、インターネットからパブリックにアクセスできるようにし、クラスタと同じVCN内の既存のリージョナル・パブリックまたはプライベート・サブネットでホストする場合は、次のようにカスタム移行を実行します:
- 次のネットワーク・リソースがVCNにすでに存在し、Kubernetes APIエンドポイントをホストするように正しく構成されていることを確認します(存在しない場合は、適切に作成および構成します):
- リージョナル・パブリック・サブネットまたはプライベート・サブネット(Kubernetes APIエンドポイント・サブネット構成を参照)
- サブネットがパブリックの場合、インターネット・ゲートウェイ(インターネット・ゲートウェイ構成を参照)
- サブネットがプライベートの場合、NATゲートウェイ(「NAT Gateway構成」を参照)およびサービス・ゲートウェイ(「サービス・ゲートウェイ構成」を参照)
- 必要なルート・ルールを含むルート表(Kubernetes APIエンドポイント・サブネットのルート表を参照)
- 必要なイングレス・ルールおよびエグレス・ルールを含むネットワーク・セキュリティ・グループ(推奨)またはセキュリティ・リスト(あるいはその両方) (Kubernetes APIエンドポイントのセキュリティ・ルールを参照)
構成例は、ネットワーク・リソース構成例を参照してください。
- 「クラスタの詳細」ページの上部で、「クラスタの移行」をクリックして、クラスタのKubernetes APIエンドポイントを独自のVCNに統合します。
- 「VCNネイティブ・クラスタへの移行」ダイアログ・ボックスで、「カスタム移行」を選択します。
- 「ワークフローの起動」をクリックし、次を指定します:
- 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エンドポイント・サブネット構成を参照)。
- 「移行」をクリックして、新しいネットワーク・リソースを作成し、クラスタを移行します。
Kubernetesエンジンは、クラスタの移行を開始します。
- 次のネットワーク・リソースがVCNにすでに存在し、Kubernetes APIエンドポイントをホストするように正しく構成されていることを確認します(存在しない場合は、適切に作成および構成します):
通常、移行の完了には約15分かかります。この間、Kubernetes APIには、独自のVCNに統合されていないパブリック・エンドポイントを介して引き続きアクセスできます。ただし、クラスタ・ライフサイクル操作(クラスタの更新、ノード・プールの作成、削除など)は使用できません。
移行が完了すると、「クラスタ詳細」ページに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パイプラインの構成を更新する必要があります。少なくとも、このトピックで説明するように、クラスタのKubernetes構成ファイル(通常は「kubeconfig」ファイル)を更新して、kubectlを使用して移行されたクラスタにアクセスできるようにする必要があります。クラスタのKubernetes APIエンドポイントIPアドレスへの参照を含むマニフェスト・ファイルも更新する必要があります。
このトピックの手順に従って、新しいkubeconfigファイルを生成します。この手順では、クラスタのkubeconfigファイルがデフォルトの場所($HOME/.kube
)およびデフォルト名(config
)に保存されていることを前提としています。そうでない場合は、指示に従って調整してください。
-
通常、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ファイルの設定の詳細は、クラスタ・アクセスの設定を参照してください。
-
次のコマンドを入力して、kubectlが自分のVCNのKubernetes APIエンドポイントを使用してクラスタに接続できることを確認します:
kubectl get nodes
クラスタ内のノードに関する情報が表示されます。
kubectlを使用して、独自のVCNのKubernetes APIエンドポイントを使用してクラスタで操作を実行できるようになりました。
VCNに統合されていない元のAPIエンドポイントが廃止されるまで、
oci ce cluster create-kubeconfig
コマンドから--kube-endpoint
オプションを省略することで、元のkubeconfigファイルを引き続き生成できます。クラスタ移行に関するよくある質問
VCNネイティブ・クラスタとは
Kubernetes Engineは、Oracle Cloud Infrastructure Virtual Cloud Network (VCN)に完全に統合されたKubernetesクラスタを作成します。ワーカー・ノード、ロード・バランサおよびKubernetes APIエンドポイントは、独自のVCNの一部であり、パブリックまたはプライベートとして構成できます。独自のVCNに完全に統合されたクラスタは、VCNネイティブ・クラスタと呼ばれます。
クラスタがすでにVCNネイティブ・クラスタかどうかを確認するにはどうすればよいですか。
クラスタがすでにVCNネイティブ・クラスタであるかどうかわからない場合は、クラスタに関する情報を表示します(たとえば、コンソールの「クラスタの詳細」ページ)。クラスタがすでに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パイプラインの構成を更新している間、停止時間がないことが保証されます。
廃止期間は、Kubernetes Engineがクラスタを移行して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>