このドキュメントでは、Google Distributed Cloud の管理クラスタを作成する方法について説明します。管理クラスタは、ワークロードを実行するユーザー クラスタを管理します。
このページは、技術インフラストラクチャの設定、モニタリング、管理を行う管理者、アーキテクト、オペレーターを対象としています。Google Cloud のコンテンツで参照する一般的なロールとタスク例の詳細については、一般的な GKE Enterprise ユーザーロールとタスクをご覧ください。
管理クラスタの詳細については、インストールの概要をご覧ください。
手順の概要
管理クラスタの作成に関わる主な手順は次のとおりです。
- 管理ワークステーションを準備します。
- このマシンには、新しいクラスタの作成に必要なツールが備わっています。
- 構成ファイルに入力する
- 管理クラスタの構成ファイル、認証情報構成ファイル、(状況により)IP ブロック ファイルを完成させて検証し、新しい管理クラスタの詳細を指定します。
- OS イメージを vSphere にインポートし、該当する場合はコンテナ イメージをプライベート レジストリに push します。
gkectl prepare
を実行します。
- 管理クラスタを作成します。
gkectl
を使用して、完成した構成ファイルで指定した新しい管理クラスタを作成します。Google Distributed Cloud で、管理クラスタを作成する際には、Docker の Kubernetes(kind)クラスタをデプロイして、管理クラスタの作成に必要な Kubernetes コントローラを一時的にホストします。この一時的なクラスタは、ブートストラップ クラスタと呼ばれます。ユーザー クラスタは、ブートストラップ クラスタを使用せずに管理クラスタを管理することによって作成およびアップグレードされます。
- 管理クラスタが実行されていることを確認します。
kubectl
を使用してクラスタノードを表示します。
この手順を完了すると、実行中の管理クラスタでユーザー クラスタの作成と管理が可能になります。
VPC Service Controls を使用している場合、"Validation Category: GCP - [UNKNOWN] GCP
service: [Stackdriver] could not get GCP services"
などの一部の gkectl
コマンドを実行するとエラーが表示される場合があります。これらのエラーを回避するには、コマンドに --skip-validation-gcp
パラメータを追加します。
始める前に
IP アドレス計画のドキュメントを確認します。3 つのコントロールプレーン ノードとコントロールプレーンの VIP に十分な IP アドレスが利用できることを確認します。kubeception ユーザー クラスタを作成する場合は、それらのユーザー クラスタのコントロールプレーン ノードに十分な数の IP アドレスが利用できる必要があります。
ロード バランシングの概要を確認し、使用するロードバランサの種類に関する決定を再確認してください。特定のロードバランサについては、管理クラスタを作成する前にロードバランサを設定する必要があります。
privateRegistry
セクションを確認し、Google Distributed Cloud コンポーネントにパブリック レジストリとプライベート レジストリのどちらを使用するかを決定します。osImageType フィールドで今後のことを考えて、管理クラスタノードで実行するオペレーティング システムの種類を決定します。
組織でアウトバウンド トラフィックがプロキシ サーバーを通過する必要がある場合は、必要な API と Container Registry のアドレスを許可リストに登録してください。
バージョン 1.29 以降では、サーバーサイドのプリフライト チェックはデフォルトで有効になっています。サーバーサイドのプリフライト チェックには、追加のファイアウォール ルールが必要です。管理クラスタのファイアウォール ルールで、[プリフライト チェック] を検索し、必要なファイアウォール ルールがすべて構成されていることを確認します。 サーバーサイドのプリフライト チェックは、管理ワークステーションでローカルではなく、ブートストラップ クラスタで実行されます。
1. 管理ワークステーションを準備する
管理ワークステーションを作成するの説明に従って、管理ワークステーションを設定してログインできることを確認します。管理ワークステーションには、管理クラスタの作成に必要なツールが備わっています。
このドキュメントの残りの手順はすべて管理ワークステーションで行います。
2. 構成ファイルに入力する
gkeadm
を使用して管理ワークステーションを作成した場合、admin-cluster.yaml
という名前の構成ファイルが生成されます。
管理ワークステーションの作成に gkeadm
を使用しなかった場合は、管理ワークステーションで次のコマンドを実行して admin-cluster.yaml
を生成します。
gkectl create-config admin
この構成ファイルは、管理クラスタの作成用です。
管理クラスタの構成ファイルのドキュメントを詳しく調べて、構成ファイルをよく理解します。このドキュメントは別のタブまたはウィンドウで開いたままにしておくことをおすすめします。次の手順を実行する際にこれを参照するためです。
name
管理クラスタの名前を指定する場合は、name
フィールドに入力します。
bundlePath
バンドルは、クラスタ コンポーネントを含む zip ファイルです。管理ワークステーションに含まれています。このフィールドはあらかじめ入力されています。
vCenter
このセクションのフィールドには、管理ワークステーションの作成時に指定した値がすでに入力されています。
network
network.controlPlaneIPBlock
セクションと network.hostConfig
セクションに入力します。また、adminMaster.replicas
を 3
に設定します。
network.podCIDR フィールドと network.serviceCIDR フィールドには、値が事前に設定されています。この値は、ネットワークですでに使用されているアドレスと競合しない限り変更できません。Kubernetes では、これらの範囲を使用してクラスタ内の Pod と Service に IP アドレスを割り当てます。
必要に応じて、構成ファイルのネットワーク セクションの残りのフィールドに入力します。
loadBalancer
管理クラスタの Kubernetes API サーバー用に VIP を確保します。loadBalancer.vips.controlPlaneVIP
の値として VIP を指定します。
詳細については、管理クラスタ サブネット内の VIP をご覧ください。
使用するロード バランシングの種類を決めます。次のオプションがあります。
MetalLB バンドルのロード バランシング。
loadBalancer.kind
を"MetalLB"
に設定します。F5 BIG-IP による統合ロード バランシング。
loadBalancer.kind
を"F5BigIP"
に設定し、f5BigIP
セクションに入力します。手動ロード バランシング。
loadBalancer.kind
を"ManualLB"
に設定し、manualLB
セクションに入力します。
ロード バランシングのオプションの詳細については、ロード バランシングの概要をご覧ください。
antiAffinityGroups
必要に応じて、antiAffinityGroups.enabled
を true
または false
に設定します。
このフィールドを使用して、Google Distributed Cloud に管理クラスタノード用の VMware Distributed Resource Scheduler(DRS)アンチアフィニティ ルールを作成するかどうかを指定すると、管理クラスタノードはデータセンター内の少なくとも 3 つの物理ホストに分散されます。
adminMaster
管理クラスタのコントロール プレーン ノードの CPU とメモリを指定する場合は、adminMaster
セクションの cpus
と memoryMB
フィールドに入力します。
adminMaster
セクションの replicas
フィールドを 3
に設定します。
proxy
管理クラスタノードを持つネットワークがプロキシ サーバーの背後にある場合は、proxy
セクションに入力します。
privateRegistry
Google Distributed Cloud コンポーネントのコンテナ イメージを保持する場所を決定します。次のオプションがあります。
Container Registry
独自の非公開 Docker レジストリ。
独自の非公開レジストリを使用する場合は、privateRegistry
セクションに入力します。
componentAccessServiceAccountKeyPath
Google Distributed Cloud は、コンポーネント アクセス サービス アカウントを使用して、Container Registry からクラスタ コンポーネントをダウンロードします。このフィールドには、コンポーネント アクセス サービス アカウントの JSON キーファイルのパスが格納されます。
このフィールドはあらかじめ入力されています。
gkeConnect
gkeConnect
セクションに入力して Google Cloud フリートに管理クラスタを登録します。構成ファイルに stackdriver
セクションと cloudAuditLogging
セクションを含める場合、gkeConnect.projectID
の ID は stackdriver.projectID
と cloudAuditLogging.projectID
で設定した ID と同じである必要があります。プロジェクト ID が同じでない場合、クラスタの作成は失敗します。
1.28 以降では、必要に応じて、gkeConnect.location
で Fleet と Connect サービスを実行するリージョンを指定できます。このフィールドを含めない場合、クラスタはこれらのサービスのグローバル インスタンスを使用します。
gkeConnect.location
を含める場合、指定するリージョンは、cloudAuditLogging.clusterLocation
、stackdriver.clusterLocation
、gkeOnPremAPI.location
で構成されたリージョンと同じである必要があります。リージョンが同じでない場合、クラスタの作成は失敗します。
gkeOnPremAPI
Google Cloud プロジェクトで GKE On-Prem API が有効になっている場合、プロジェクト内のすべてのクラスタが、stackdriver.clusterLocation
で構成されたリージョンの GKE On-Prem API に登録(自動的に)されます。gkeOnPremAPI.location
リージョンは、cloudAuditLogging.clusterLocation
、gkeConnect.location
、stackdriver.clusterLocation
で指定されたリージョンと同じリージョンにする必要があります。リージョンが同じでない場合、クラスタの作成は失敗します。
GKE On-Prem API のプロジェクトにすべてのクラスタを登録する場合は、始める前にの手順に沿って、プロジェクト内の GKE On-Prem API を有効にしてから使用します。
GKE On-Prem API にクラスタを登録しない場合は、このセクションを追加して、
gkeOnPremAPI.enabled
をfalse
に設定します。プロジェクトにクラスタを登録しない場合は、プロジェクトでgkeonprem.googleapis.com
(GKE On-Prem API のサービス名)を無効にします。手順については、サービスの無効化をご覧ください。
stackdriver
クラスタに対して Cloud Logging と Cloud Monitoring を有効にする場合は、stackdriver
セクションに入力します。
デフォルトでは、このセクションは必須です。つまり、このセクションに入力しない場合、gkectl create admin
を実行する際に --skip-validation-stackdriver
フラグを含める必要があります。
新しいクラスタについては、次の要件に注意してください。
stackdriver.projectID
の ID は、gkeConnect.projectID
とcloudAuditLogging.projectID
の ID と同じでなければなりません。stackdriver.clusterLocation
で設定された Google Cloud リージョンは、cloudAuditLogging.clusterLocation
およびgkeConnect.location
で設定されたリージョンと同じである必要があります(フィールドが構成ファイルに含まれている場合)。 さらに、gkeOnPremAPI.enabled
がtrue
の場合、gkeOnPremAPI.location
に同じリージョンを設定する必要があります。
プロジェクト ID とリージョンが同じでない場合、クラスタの作成は失敗します。
cloudAuditLogging
クラスタの Kubernetes API サーバーの監査ログを Cloud Audit Logs と統合する場合は、cloudAuditLogging
セクションに値を入力します。
新しいクラスタについては、次の要件に注意してください。
cloudAuditLogging.projectID
の ID は、gkeConnect.projectID
とstackdriver.projectID
の ID と同じでなければなりません。cloudAuditLogging.clusterLocation
で設定された Google Cloud リージョンは、stackdriver.clusterLocation
およびgkeConnect.location
で設定されたリージョンと同じである必要があります(フィールドが構成ファイルに含まれている場合)。 さらに、gkeOnPremAPI.enabled
がtrue
の場合、gkeOnPremAPI.location
に同じリージョンを設定する必要があります。
プロジェクト ID とリージョンが同じでない場合、クラスタの作成は失敗します。
clusterBackup
管理クラスタのバックアップを有効にする場合は、clusterBackup.datastore
をクラスタのバックアップを保存する vSphere データストアに設定します。
autoRepair
管理クラスタのノードの自動修復を有効にする場合は、autoRepair.enabled
を true
に設定します。
secretsEncryption
Secret の常時暗号化を有効にする場合は、secretsEncryption
セクションに入力します。
osImageType
管理クラスタノードに使用する OS イメージのタイプを決定し、それに応じて osImageType
セクションに入力します。
入力済みの構成ファイルの例
入力済みの管理クラスタ構成ファイルの例を以下に示します。この構成により、利用可能な機能のすべてではなく、一部が有効になります。
vc-01-admin-cluster.yaml
apiVersion: v1 kind: AdminCluster name: "gke-admin-01" bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-1.28.0-gke.1-full.tgz" vCenter: address: "vc01.example" datacenter: "vc-01" cluster: "vc01-workloads-1" resourcePool: "vc-01-pool-1" datastore: "vc01-datastore-1" caCertPath: "/usr/local/google/home/me/certs/vc01-cert.pem"" credentials: fileRef: path: "credential.yaml" entry: "vCenter" network: hostConfig: dnsServers: - "203.0.113.1" - "198.51.100.1" ntpServers: - "216.239.35.4" serviceCIDR: "10.96.232.0/24" podCIDR: "192.168.0.0/16" vCenter: networkName: "vc01-net-1" controlPlaneIPBlock: netmask: "255.255.248.0" gateway: "21.0.143.254" ips: - ip: "21.0.140.226" hostname: "admin-cp-vm-1" - ip: "21.0.141.48" hostname: "admin-cp-vm-2" - ip: "21.0.141.65" hostname: "admin-cp-vm-3" loadBalancer: vips: controlPlaneVIP: "172.16.20.59" kind: "MetalLB" antiAffinityGroups: enabled: true adminMaster: cpus: 4 memoryMB: 16384 replicas: 3 componentAccessServiceAccountKeyPath: "sa-key.json" gkeConnect: projectID: "my-project-123" registerServiceAccountKeyPath: "connect-register-sa-2203040617.json" stackdriver: projectID: "my-project-123" clusterLocation: "us-central1" enableVPC: false serviceAccountKeyPath: "log-mon-sa-2203040617.json" disableVsphereResourceMetrics: false clusterBackup: datastore: "vc-01-datastore-bu" autoRepair: enabled: true osImageType: "ubuntu_containerd"
構成ファイルを検証する
管理クラスタの構成ファイルに入力したら、gkectl check-config
を実行してファイルが有効であることを検証します。
gkectl check-config --config ADMIN_CLUSTER_CONFIG
ADMIN_CLUSTER_CONFIG は、管理クラスタ構成ファイルのパスで置き換えます。
コマンドがエラー メッセージを返した場合は、問題を修正してファイルを再度検証します。
時間のかかる検証をスキップする場合は、--fast
フラグを渡します。個別の検証をスキップするには、--skip-validation-xxx
フラグを使用します。check-config
コマンドについて詳しくは、プリフライト チェックの実行をご覧ください。
3. OS イメージを取得する
gkectl prepare
を実行して、vSphere 環境を初期化します。
gkectl prepare --config ADMIN_CLUSTER_CONFIG
gkectl prepare
コマンドによって、以下の準備作業が実行されます。
OS イメージを vSphere にインポートして、VM テンプレートとしてマークします。
非公開 Docker レジストリを使用している場合は、コンテナ イメージをレジストリに push します。
必要に応じて、コンテナ イメージのビルド証明書を検証します。これにより、イメージが Google によって作成、署名されていることと、デプロイの準備ができていることを確認します。
5. 管理クラスタを作成する
管理クラスタを作成します。
gkectl create admin --config ADMIN_CLUSTER_CONFIG
VPC Service Controls を使用している場合、"Validation Category: GCP - [UNKNOWN] GCP
service: [Stackdriver] could not get GCP services"
などの一部の gkectl
コマンドを実行するとエラーが表示される場合があります。これらのエラーを回避するには、コマンドに --skip-validation-gcp
パラメータを追加します。
障害発生後に管理クラスタの作成を再開する
管理クラスタの作成が失敗またはキャンセルされた場合は、create
コマンドを再度実行してください。
gkectl create admin --config ADMIN_CLUSTER_CONFIG
管理クラスタの kubeconfig ファイルを見つける
gkectl create admin
コマンドで、現在のディレクトリに kubeconfig
という名前の kubeconfig ファイルが作成されます。この kubeconfig ファイルは後で管理クラスタとやり取りする際に必要になります。
kubeconfig ファイルには、管理クラスタの名前が含まれています。クラスタ名を表示するには、次のものを実行します。
kubectl config get-clusters --kubeconfig ADMIN_CLUSTER_KUBECONFIG
出力には、クラスタの名前が表示されます。例:
NAME gke-admin-tqk8x
kubeconfig ファイルの名前と場所は、必要に応じて変更できます。
checkpoint.yaml
ファイルを管理する
gkectl create admin
コマンドを実行して管理クラスタを作成した場合、管理クラスタのデータディスクと同じデータストア フォルダにチェックポイント ファイルが作成されています。デフォルトでは、このファイルの名前は DATA_DISK_NAME‑checkpoint.yaml
です。DATA_DISK_NAME の長さが 245 文字以上の場合、ファイル名の長さに対する vSphere の上限により、名前は DATA_DISK_NAME.yaml
になります。
このファイルには管理クラスタの状態と認証情報が含まれ、今後のアップグレードに使用されます。管理クラスタの削除プロセスを行っている場合以外は、このファイルを削除しないでください。
vCenter Server のインスタンスで VM の暗号化が有効になっている場合は、管理クラスタを作成またはアップグレードする前に、暗号オペレーション ダイレクト アクセスの権限が付与される必要があります。権限がない場合は、チェックポイントはアップロードされません。この権限を取得できない場合は、関連するコマンドを実行するときに、隠しフラグ --disable-checkpoint
を使用してチェックポイント ファイルのアップロードを無効にできます。
checkpoint.yaml
ファイルは、gkectl upgrade admin
コマンドを実行するか、管理クラスタに影響を与える gkectl update
コマンドを実行すると、自動的に更新されます。
6. 管理クラスタが実行されていることを確認します。
管理クラスタが実行されていることを確認します。
kubectl get nodes --kubeconfig ADMIN_CLUSTER_KUBECONFIG
ADMIN_CLUSTER_KUBECONFIG は、管理クラスタ kubeconfig ファイルのパスに置き換えます。
出力には、管理クラスタノードが表示されます。次に例を示します。
admin-cp-vm-1 Ready control-plane,master ... admin-cp-vm-2 Ready control-plane,master ... admin-cp-vm-3 Ready control-plane,master ...
7. ファイルをバックアップする
管理クラスタの kubeconfig ファイルをバックアップすることをおすすめします。つまり、管理ワークステーションから別の場所に kubeconfig ファイルをコピーします。その後、管理ワークステーションにアクセスできなくなった場合、または管理ワークステーションの kubeconfig ファイルが誤って削除された場合でも、管理クラスタにアクセスできます。
管理クラスタの秘密 SSH 鍵のバックアップも作成することをおすすめします。その後、管理クラスタにアクセスできなくなった場合でも、SSH を使用して管理クラスタノードに接続できます。これにより、管理クラスタへの接続に関する問題のトラブルシューティングと調査が可能になります。
管理クラスタから SSH 鍵を抽出して admin-cluster-ssh-key
という名前のファイルに保存します。
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets -n kube-system sshkeys \ -o jsonpath='{.data.vsphere_tmp}' | base64 -d > admin-cluster-ssh-key
これで、選択した別の場所に admin-cluster-ssh-key
をバックアップできるようになりました。
RBAC ポリシー
管理クラスタ構成ファイルの gkeConnect
セクションに入力すると、クラスタの作成時または更新時にフリートに登録されます。フリート機能を有効にするため、Google Cloud は Connect エージェントをデプロイし、クラスタが登録されているプロジェクトを表す Google サービス アカウントを作成します。Connect エージェントは、クラスタの Kubernetes API サーバーへのリクエストを処理するためにサービス アカウントとの接続を確立します。これにより、Google Cloud のクラスタとワークロード管理機能にアクセスできるようになります。これには、Google Cloud コンソールへのアクセスが含まれ、クラスタを操作できます。
管理クラスタの Kubernetes API サーバーは、Connect エージェントからのリクエストを承認できる必要があります。このため、サービス アカウントには、次のロールベース アクセス制御(RBAC)ポリシーが構成されています。
権限借用ポリシー: Connect エージェントがサービス アカウントに代わって Kubernetes API サーバーにリクエストを送信することを承認します。
権限ポリシー: 他の Kubernetes リソースに対して許可されているオペレーションを指定します。
Google Cloud コンソールでユーザー クラスタのライフサイクルを管理できるようにするために、サービス アカウントと RBAC ポリシーが必要です。
トラブルシューティング
クラスタの作成とアップグレードに対するトラブルシューティングをご覧ください。