このページでは、管理クラスタとユーザー クラスタを作成する方法について説明します。
管理ワークステーションへの SSH 接続
管理ワークステーションに SSH で接続します。
ssh -i ~/.ssh/vsphere_workstation ubuntu@[IP_ADDRESS]
ここで、[IP_ADDRESS] は管理ワークステーションの IP アドレスです。
このトピックの残りの手順はすべて管理ワークステーションで行います。
ログイン
Google Cloud ユーザー アカウントの認証情報を使用して Google Cloud にログインします。ユーザー アカウントには、少なくとも閲覧者の IAM ロールが必要です。
gcloud auth login
gcloud
を Docker 認証ヘルパーとして登録します(このコマンドの詳細については、こちらをご覧ください)。
gcloud auth configure-docker
管理クラスタの静的 IP の構成
管理クラスタに使用する静的 IP アドレスを指定するには、admin-hostconfig.yaml
という名前のホスト構成ファイルを作成します。この演習では、管理クラスタで使用する IP アドレスを 5 つ指定する必要があります。
5 つのホストを持つホスト構成ファイルの例を、次に示します。
hostconfig: dns: 172.16.255.1 tod: 192.138.210.214 otherdns: - 8.8.8.8 - 8.8.4.4 othertod: - ntp.ubuntu.com searchdomainsfordns: - "my.local.com" blocks: - netmask: 255.255.252.0 gateway: 110.116.232.1 ips: - ip: 172.16.20.10 hostname: admin-host1 - ip: 172.16.20.11 hostname: admin-host2 - ip: 172.16.20.12 hostname: admin-host3 - ip: 172.16.20.13 hostname: admin-host4 - ip: 172.16.20.14 hostname: admin-host5
ips
フィールドは、IP アドレスとホスト名の配列です。これらは、GKE On-Prem が管理クラスタノードに割り当てる IP アドレスとホスト名です。
ホスト構成ファイルでは、管理クラスタノードが使用する DNS サーバー、タイムサーバー、デフォルト ゲートウェイのアドレスも指定します。
searchdomainsfordns
フィールドは、クラスタで使用する DNS 検索ドメインの配列です。これらのドメインは、ドメイン検索リストの一部として使用されます。
ユーザー クラスタの静的 IP を構成する
ユーザー クラスタに使用する静的 IP アドレスを指定するには、user-hostconfig.yaml
という名前のホスト構成ファイルを作成します。
3 つのホストを持つホスト構成ファイルの例を、次に示します。
hostconfig: dns: 172.16.255.1 tod: 192.138.210.214 otherdns: - 8.8.8.8 - 8.8.4.4 othertod: - ntp.ubuntu.com searchdomainsfordns: - "my.local.com" blocks: - netmask: 255.255.252.0 gateway: 110.116.232.1 ips: - ip: 172.16.20.15 hostname: user-host1 - ip: 172.16.20.16 hostname: user-host2 - ip: 172.16.20.17 hostname: user-host3
ips
フィールドは、IP アドレスとホスト名の配列です。これらは、GKE On-Prem がユーザー クラスタノードに割り当てる IP アドレスとホスト名です。
searchdomainsfordns
フィールドは、クラスタで使用する DNS 検索ドメインの配列です。これらのドメインは、ドメイン検索リストの一部として使用されます。
GKE On-Prem 構成ファイルの作成
次の YAML を config.yaml
という名前のファイルにコピーします。
bundlepath: "/var/lib/gke/bundles/gke-onprem-vsphere-1.2.2-gke.2-full.tgz" vcenter: credentials: address: "" username: "" password: "" datacenter: "" datastore: "" cluster: "" network: "" resourcepool: "" datadisk: "" cacertpath: "" proxy: url: "" noproxy: "" admincluster: ipblockfilepath: "admin-hostconfig.yaml" bigip: credentials: &bigip-credentials address: "" username: "" password: "" partition: "" vips: controlplanevip: "" ingressvip: "" serviceiprange: 10.96.232.0/24 podiprange: 192.168.0.0/16 usercluster: ipblockfilepath: "user-hostconfig.yaml" bigip: credentials: *bigip-credentials partition: "" vips: controlplanevip: "" ingressvip: "" clustername: "initial-user-cluster" masternode: cpus: 4 memorymb: 8192 replicas: 1 workernode: cpus: 4 memorymb: 8192 replicas: 3 serviceiprange: 10.96.0.0/12 podiprange: 192.168.0.0/16 lbmode: Integrated gkeconnect: projectid: "" registerserviceaccountkeypath: "" agentserviceaccountkeypath: "" stackdriver: projectid: "" clusterlocation: "" enablevpc: false serviceaccountkeypath: "" gcrkeypath: ""
構成ファイルの変更
次のセクションの説明に従って config.yaml
を変更します。
vcenter.credentials.address
vcenter.credentials.address
フィールドには、vCenter Server の IP アドレスまたはホスト名が格納されます。
vsphere.credentials.address field
を入力する前に、vCenter Server のサービス証明書をダウンロードして検査します。次のコマンドを入力して証明書をダウンロードし、vcenter.pem
という名前のファイルに保存します。
true | openssl s_client -connect [VCENTER_IP]:443 -showcerts 2>/dev/null | sed -ne '/-BEGIN/,/-END/p' > vcenter.pem
ここで、[VCENTER_IP] は vCenter Server の IP アドレスです。
証明書ファイルを開き、サブジェクトの共通名とサブジェクトの代替名を表示します。
openssl x509 -in vcenter.pem -text -noout
出力に Subject
共通名(CN)が表示されます。これが IP アドレスである場合も、ホスト名である場合もあります。例:
Subject: ... CN = 203.0.113.100
Subject: ... CN = my-host.my-domain.example
出力では、Subject Alternative Name
に 1 つ以上の DNS 名を含めることもできます。
X509v3 Subject Alternative Name: DNS:vcenter.my-domain.example
Subject
共通名または Subject Alternative Name
のいずれか 1 つの DNS 名を選択して、構成ファイルの vcenter.credentials.address
の値として使用します。例:
vcenter: credentials: address: "203.0.113.1" ...
vcenter: credentials: address: "my-host.my-domain.example" ...
証明書に含まれる値は選択する必要があります。たとえば、IP アドレスが証明書に含まれていない場合は、vcenter.credentials.address
には使用できません。
vcenter.credentials
GKE On-Prem では、vCenter Server のユーザー名とパスワードの情報が必要です。この情報を指定するには、vcenter.credentials
で username
値と password
値を設定します。例:
vcenter: credentials: ... username: "my-name" password: "my-password"
vcenter.datacenter
、.datastore
、.cluster
、.network
GKE On-Prem には、vSphere 環境の構造に関する情報が必要です。vcenter
で値を設定して、この情報を指定します。例:
vcenter: ... datacenter: "MY-DATACENTER" datastore: "MY-DATASTORE" cluster: "MY-VSPHERE-CLUSTER" network: "MY-VIRTUAL-NETWORK"
vcenter.resourcepool
vSphere リソースプールは、vSphere クラスタ内の vSphere VM の論理グループです。デフォルト以外のリソースプールを使用している場合は、その名前を vcenter.resourcepool
に指定します。例:
vcenter: ... resourcepool: "my-pool"
GKE On-Prem でそのノードを vSphere クラスタのデフォルト リソースプールにデプロイするには、空の文字列を vcenter.resourcepool
に指定します。例:
vcenter: ... resourcepool: ""
vcenter.datadisk
GKE On-Prem は、管理クラスタの Kubernetes オブジェクト データを保持する仮想マシンディスク(VMDK)を作成します。インストーラによって VMDK が作成されますが、vcenter.datadisk
フィールドに VMDK の名前を指定する必要があります。例:
vcenter: ... datadisk: "my-disk.vmdk"
- vSAN データストア: VMDK 用フォルダの作成
vSAN データストアを使用する場合は、VMDK をフォルダに格納する必要があります。フォルダは、事前に手動で作成する必要があります。
govc
を使用してフォルダを作成することで、これを行えます。govc datastore.mkdir -namespace=true my-gke-on-prem-folder
次に、
vcenter.datadisk
を VMDK のパス(フォルダを含む)に設定します。例:vcenter: ... datadisk: "my-gke-on-prem-folder/my-disk.vmdk"
バージョン 1.1.1 では、既知の問題により、フォルダのファイルパスではなく、Universally Unique Identifier(UUID)のパスを
vcenter.datadisk
に指定する必要があります。上記のgovc
コマンドの出力からコピーします。次に、
vcenter.datadisk
フィールドにフォルダの UUID を入力します。UUID の前にスラッシュを付けないでください。例:vcenter: ... datadisk: "14159b5d-4265-a2ba-386b-246e9690c588/my-disk.vmdk"
この問題は、バージョン 1.1.2 以降で修正されています。
vcenter.cacertpath
GKE On-Prem などのクライアントが vCenter Server にリクエストを送信する場合、サーバーはクライアントに証明書または証明書バンドルを提示して ID を証明する必要があります。証明書またはバンドルを確認するには、GKE On-Prem に信頼チェーン内のルート証明書が必要です。
vcenter.cacertpath
をルート証明書のパスに設定します。例:
vcenter: ... cacertpath: "/my-cert-folder/the-root.crt"
ご使用の VMware インストレーションには、vCenter サーバーに証明書を発行する認証局(CA)があります。信頼チェーンのルート証明書は、VMware が作成した自己署名証明書です。
デフォルトの VMWare CA を使用しない場合は、別の認証局を使用するように VMware を構成できます。
vCenter サーバーでデフォルトの VMware CA が発行した証明書を使用している場合は、いくつかの方法でルート証明書を取得できます。
curl -k "https://[SERVER_ADDRESS]/certs/download.zip" > download.zip
[SERVER_ADDRESS] は vCenter サーバーのアドレスです。
ブラウザで、vCenter サーバーのアドレスを入力します。右側の灰色のボックスで、[信頼されたルート CA 証明書をダウンロード] をクリックします。
提供中の証明書を取得するには、次のコマンドを入力します。
true | openssl s_client -connect [SERVER_ADDRESS]:443 -showcerts
出力で、https://[SERVER_ADDRESS]/afd/vecs/ca のような URL を見つけます。ブラウザで URL を入力します。これにより、ルート証明書がダウンロードされます。
ダウンロードしたファイルの名前は download.zip
です。
unzip コマンドをインストールし、ファイルを展開します。
sudo apt-get install unzip unzip download.zip
1 回の unzip コマンドで解凍できない場合は、再度コマンドを入力します。
certs/lin
で証明書ファイルを見つけます。
proxy
ネットワークがプロキシ サーバーの背後にある場合は、proxy.url
をプロキシ サーバーのアドレスに設定します。
proxy.noproxy
には、IP アドレス、IP アドレス範囲、ホスト名、ドメイン名のリストを指定します。GKE On-Prem が、これらのアドレス、ホスト、ドメインのいずれかにリクエストを送信する際には直接送信します。リクエストはプロキシ サーバーに送信されません。次に例を示します。
proxy: url: "https://my-proxy.example.local" noproxy: "10.151.222.0/24, my-host.example.local,10.151.2.1"
admincluster.ipblockfilepath
静的 IP アドレスを使用しているため、静的 IP の構成で説明されているホスト構成ファイルが必要です。ホスト構成ファイルへのパスを admincluster.ipblockfilepath
フィールドに入力します。例:
admincluster: ipblockfilepath: "/my-config-directory/admin-hostconfig.yaml"
admincluster.bigip.credentials
GKE On-Prem では、F5 BIG-IP ロードバランサの IP アドレスまたはホスト名、ユーザー名、パスワードの情報が必要です。admincluster.bigip
で値を設定して、この情報を指定します。次に例を示します。
admincluster: ... bigip: credentials: address: "203.0.113.2" username: "my-admin-f5-name" password: "rJDlm^%7aOzw"
admincluster.bigip.partition
以前は、管理クラスタ用に BIG-IP パーティションを作成しました。admincluster.bigip.partition
をパーティションの名前に設定します。例:
admincluster: ... bigip: partition: "my-admin-f5-partition"
admincluster.vips
admincluster.vips.controlplanevip
の値を、管理クラスタの Kubernetes API サーバー用のロードバランサに構成するよう選択した IP アドレスに設定します。ingressvip
の値を、管理クラスタの Ingress サービスのロードバランサに構成するために選択した IP アドレスに設定します。例:
admincluster: ... vips: controlplanevip: 203.0.113.3 ingressvip: 203.0.113.4
admincluster.serviceiprange
と admincluster.podiprange
管理クラスタには、Service に使用する IP アドレスの範囲と Pod に使用する IP アドレスの範囲が必要です。これらの範囲は、admincluster.serviceiprange
フィールドと admincluster.podiprange
フィールドで指定します。gkectl create-config
を実行すると、これらのフィールドに入力されます。入力した値は、必要に応じて任意の値に変更できます。
Service と Pod の範囲は重複しないようにします。また、Service と Pod の範囲が、クラスタ内のノードで使用する IP アドレスと重複しないようにしてください。
例:
admincluster: ... serviceiprange: 10.96.232.0/24 podiprange: 192.168.0.0/16
usercluster.bigip.partition
以前は、ユーザー クラスタ用に BIG-IP パーティションを作成しました。usercluster.bigip.partition
をパーティションの名前に設定します。例:
usercluster: ... bigip: partition: "my-user-f5-partition" ...
usercluster.vips
usercluster.vips.controlplanevip
の値を、ユーザー クラスタの Kubernetes API サーバー用のロードバランサに構成するよう選択した IP アドレスに設定します。ingressvip
の値を、ユーザー クラスタの Ingress サービスのロードバランサに構成するために選択した IP アドレスに設定します。例:
usercluster: ... vips: controlplanevip: 203.0.113.6 ingressvip: 203.0.113.7
usercluster.serviceiprange
と usercluster.podiprange
ユーザー クラスタには、Service に使用する IP アドレスの範囲と Pod に使用する IP アドレスの範囲が必要です。これらの範囲は、usercluster.serviceiprange
フィールドと usercluster.podiprange
フィールドで指定します。gkectl create-config
を実行すると、これらのフィールドに入力されます。入力した値は、必要に応じて任意の値に変更できます。
Service と Pod の範囲は重複しないようにします。また、Service と Pod の範囲が、クラスタ内のノードで使用する IP アドレスと重複しないようにしてください。
例:
usercluster: ... serviceiprange: 10.96.233.0/24 podiprange: 172.16.0.0/12
VMware DRS の反アフィニティ ルールの無効化
バージョン 1.1.0-gke.6 以降、GKE On-Prem はユーザー クラスタのノードに対して VMware Distributed Resource Scheduler(DRS)の反アフィニティ ルールを自動的に作成し、データセンター内の少なくとも 3 つの物理ホストにそれらを分散させます。バージョン 1.1.0-gke.6 以降、この機能は新しいクラスタと既存のクラスタで自動的に有効になります。
この機能を使用するには、vSphere 環境が次の条件を満たしている必要があります。
- VMware DRS が有効になっていること。VMware DRS には、vSphere Enterprise Plus ライセンス エディションが必要です。DRS を有効にする方法については、クラスタ内の VMware DRS の有効化をご覧ください。
vcenter
フィールドで指定された vSphere ユーザー アカウントにHost.Inventory.EditCluster
権限があること。- 利用可能な物理ホストが 3 台以上あること。
前述のとおり、vSphere スタンダード ライセンスがある場合、VMware DRS を有効にすることはできません。
DRS が有効になっていない場合、または vSphere VM をスケジュール設定できるホストが 3 つ以上ない場合は、usercluster.antiaffinitygroups.enabled: false
を構成ファイルに追加します。例:
usercluster: ... antiaffinitygroups: enabled: false
gkeconnect
gkeconnect
仕様には、GKE On-Prem で Google Cloud Console からオンプレミス クラスタの管理を設定するために必要な情報が含まれています。
gkeconnect.projectid
を、オンプレミス クラスタを管理する Google Cloud プロジェクトのプロジェクト ID に設定します。
gkeconnect.registerserviceaccountkeypath
の値を、登録サービス アカウントの JSON キーファイルのパスに設定します。gkeconnect.agentserviceaccountkeypath
の値を、接続サービス アカウントの JSON キーファイルのパスに設定します。
例:
gkeconnect: projectid: "my-project" registerserviceaccountkeypath: "/my-key-directory/register-key.json" agentserviceaccountkeypath: "/my-key-directory/connect-key.json"
stackdriver
stackdriver
仕様には、オンプレミス クラスタで生成されたログエントリの保存のために GKE On-Prem で必要な情報が含まれています。
stackdriver.projectid
を、Google Cloud のオペレーション スイートに関連付ける Google Cloud プロジェクトのプロジェクト ID に設定します。Connect は、このプロジェクト経由でクラスタから Stackdriver にクラスタログをエクスポートします。
stackdriver.clusterlocation
を、ログを保存する Google Cloud リージョンに設定します。お使いのオンプレミス データセンターの近くのリージョンを選択することをおすすめします。
stackdriver.proxyconfigsecretname
を、kube-system
名前空間で定義する Kubernetes Secret に設定します。この Secret には、https_proxy_url
を定義する単一の値が必要です。デフォルトの Secret stackdriver-proxy-config
は不変で、単に例として提供されます。
クラスタのネットワークが VPC によって制御されている場合は、stackdriver.enablevpc
を true
に設定します。これにより、すべてのテレメトリーが Google の制限された IP アドレスを通過するようになります。
stackdriver.serviceaccountkeypath
を Google Cloud のオペレーション スイートのサービス アカウント用 JSON キーファイルのパスに設定します。
例:
stackdriver: projectid: "my-project" clusterlocation: "us-west1" enablevpc: false serviceaccountkeypath: "/my-key-directory/stackdriver-key.json"
gcrkeypath
gcrkeypath
の値を、許可リストに登録されたサービス アカウント用の JSON キーファイルのパスに設定します。例: 注: このコマンドの詳細については、プリフライト チェックの実行をご覧ください。
gcrkeypath: "/my-key-directory/whitelisted-key.json"
構成ファイルの検証
構成ファイルを変更したら、gkectl check-config
を実行して、ファイルが有効でインストールに使用できることを確認します。
gkectl check-config --config config.yaml
コマンドが FAILURE
メッセージを返した場合は、問題を修正してファイルを再度検証します。
時間のかかる検証をスキップする場合は、--fast
フラグを渡します。個別の検証をスキップするには、--skip-validation-xxx
フラグを使用します。check-config
コマンドについて詳しくは、プリフライト チェックの実行をご覧ください。
gkectl prepare
の実行
gkectl prepare
を実行して、vSphere 環境を初期化します。
gkectl prepare --config config.yaml --skip-validation-all
管理クラスタとユーザー クラスタの作成
管理クラスタとユーザー クラスタを作成します。
gkectl create cluster --config config.yaml --skip-validation-all
gkectl create cluster
コマンドで、現在のディレクトリに kubeconfig
という名前のファイルが作成されます。GKE On-prem ドキュメントでは、プレースホルダ [ADMIN_CLUSTER_KUBECONFIG] を使用してこのファイルを参照します。
管理クラスタが作成されたことを確認するには、次のコマンドを入力します。
kubectl get nodes --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]
出力には、管理クラスタノードが表示されます。
gkectl create cluster
コマンドで、現在のディレクトリに init-user-cluster-kubeconfig
という名前のファイルが作成されます。GKE On-prem ドキュメントでは、プレースホルダ [USER_CLUSTER_KUBECONFIG] を使用してこのファイルを参照します。
ユーザー クラスタが作成されたことを確認するには、次のコマンドを入力します。
kubectl get nodes --kubeconfig [USER_CLUSTER_KUBECONFIG]
出力には、ユーザー クラスタノードが表示されます。次に例を示します。
NAME STATUS ROLES AGE VERSION xxxxxx-1234-ipam-15008527 Ready <none> 12m v1.14.7-gke.24 xxxxxx-1234-ipam-1500852a Ready <none> 12m v1.14.7-gke.24 xxxxxx-1234-ipam-15008536 Ready <none> 12m v1.14.7-gke.24