管理クラスタとユーザー クラスタの作成

このページでは、管理クラスタとユーザー クラスタを作成する方法について説明します。

管理ワークステーションへの 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.credentialsusername 値と 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.serviceiprangeadmincluster.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.serviceiprangeusercluster.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.enablevpctrue に設定します。これにより、すべてのテレメトリーが Google の制限された IP アドレスを通過するようになります。

stackdriver.serviceaccountkeypathGoogle 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