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

基本構成を使用して管理者クラスタとユーザー クラスタを作成する方法について説明します。

このトピックの手順は、管理ワークステーションの作成に gkeadm を使用したことを前提としています。gkeadm を使用せず、高度なトピックの静的 IP アドレスを使用した管理ワークステーションの作成を行った場合は、必要となる調整について手順の中で都度説明します。DHCP 管理ワークステーションの場合は、対応する DHCP インストールガイドを使用する必要があります。

プロキシの内側から操作する場合、すべての gkectl コマンドは、管理ワークステーションからのインターネット リクエストの構成ファイルで設定したものと同じプロキシを自動的に使用します。管理ワークステーションが同じプロキシの内側にない場合は、「管理ワークステーションの作成」の「手動プロキシオプション」における静的 IPDHCP の高度なトピックをご覧ください。

管理ワークステーションへの SSH 接続

管理ワークステーションへの SSH 接続の確立の手順に沿って、管理ワークステーションに SSH 接続します。

許可リストに登録されたサービス アカウントは、管理ワークステーションで有効化されます。このトピックの残りの手順はすべて管理ワークステーションで行います。

管理クラスタの静的 IP を構成する

管理クラスタに使用する静的 IP アドレスを指定するには、admin-hostconfig.yaml という名前のホスト構成ファイルを作成します。この演習では、管理クラスタで使用する IP アドレスを 5 つ指定する必要があります。

5 つのホストを持つホスト構成ファイルの例を、次に示します。

hostconfig:
  dns: 172.16.255.1
  tod: 216.239.35.0
  otherdns:
  - 8.8.8.8
  - 8.8.4.4
  othertod:
  - ntp.ubuntu.com
  searchdomainsfordns:
  - "my.local.com"
blocks:
  - netmask: 255.255.252.0
    gateway: 172.16.23.254
    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: 216.239.35.0
  otherdns:
  - 8.8.8.8
  - 8.8.4.4
  othertod:
  - ntp.ubuntu.com
  searchdomainsfordns:
  - "my.local.com"
blocks:
  - netmask: 255.255.252.0
    gateway: 172.16.23.254
    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 アドレスとホスト名です。

ホスト構成ファイルでは、ユーザー クラスタノードが使用する DNS サーバー、タイムサーバー、デフォルト ゲートウェイのアドレスも指定します。

searchdomainsfordns フィールドは、クラスタで使用する DNS 検索ドメインの配列です。これらのドメインは、ドメイン検索リストの一部として使用されます。

GKE On-Prem の構成ファイルで入力されたフィールド

管理ワークステーションを作成したときに、admin-ws-config.yaml という名前の構成ファイルに入力ました。gkeadm コマンドライン ツールで admin-ws-config.yaml ファイルを使用して管理ワークステーションを作成しました。

gkeadm で管理用ワークステーションを作成したとき、2 つ目の構成ファイルの config.yaml が生成されています。管理ワークステーションにあるこの構成ファイルは、GKE On-Prem クラスタを作成するためのものです。

admin-ws-config.yaml ファイルと config.yaml ファイルには複数の共通のフィールドがあります。この共通フィールドの値は、すでに config.yaml ファイルで入力されています。

管理ワークステーションの作成時に指定した値が入力されているフィールドは、次のとおりです。

vcenter:
  credentials:
    address:
    username:
    password:
  datacenter:
  datastore:
  cluster:
  network:
  resourcepool:
  cacertpath:
gkeconnect:
  projectid:
  registerserviceaccountkeypath:
  agentserviceaccountkeypath:
stackdriver:
  projectid:
  serviceaccountkeypath:
gcrkeypath:

残りの GKE On-Prem 構成ファイルに入力する

次に、config.yaml ファイルの残りのフィールドを入力します。

bundlepath

GKE On-Prem のバンドル ファイルには、GKE On-Prem の特定のリリースのすべてのコンポーネントが含まれています。bundlepath の値を管理ワークステーションのバンドル ファイルのパスに設定します。

bundlepath: /var/lib/gke/bundles/gke-onprem-vsphere-1.3.2-gke.1-full.tgz

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)のパスを指定する必要があります。

proxy

ネットワークがプロキシ サーバーの背後にある場合は、プロキシ アドレスと、プロキシ サーバーを経由しないアドレスを指定する必要があります。

proxy.url を設定して、プロキシ サーバーの HTTP アドレスを指定します。スキームのデフォルト ポートと同じ場合でも、ポート番号を含める必要があります。ここで指定するプロキシ サーバーは、GKE On-Prem クラスタで使用されます。また、管理ワークステーションで HTTPS_PROXY 環境変数を設定しない限り、管理ワークステーションはこの同じプロキシ サーバーを使用するように自動的に構成されます。

プロキシ サーバーを経由しない IP アドレス、IP アドレス範囲、ホスト名、ドメイン名のリストを定義するには、proxy.noproxy を設定します。GKE On-Prem がこれらのアドレス、ホスト、ドメインのいずれかにリクエストを送信する場合、そのリクエストは直接送信されます。

例:

proxy:
  url: "http://my-proxy.example.local:80"
  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 で値を設定して、この情報を指定します。credentials の後ろにアンカー&bigip-credentials を置くことにより、この情報を usercluster セクションで繰り返す必要がなくなります。例:

admincluster:
  ...
  bigip:
    credentials: &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.ipblockfilepath

静的 IP アドレスを使用しているため、静的 IP の構成で説明されているホスト構成ファイルが必要です。ホスト構成ファイルへのパスを usercluster.ipblockfilepath フィールドに入力します。例:

usercluster:
  ipblockfilepath: "/my-config-directory/user-hostconfig.yaml"

usercluster.bigip.credentials

usercluster.bigip.credentials の後にリファレンス*bigip-credentials を置いて、admincluster.bigip.credentials で指定したものと同じ addressusernamepassword を使用します。例:

usercluster:
  ...
  bigip:
    credentials: *bigip-credentials

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 の反アフィニティ ルールの無効化

GKE On-Prem はユーザー クラスタのノードに対して VMware Distributed Resource Scheduler(DRS)の反アフィニティ ルールを自動的に作成し、データセンター内の少なくとも 3 つの物理ホストにそれを分散させます。

この機能を使用するには、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

詳細については、バージョン 1.1.0-gke.6 のリリースノートをご覧ください。

lbmode

lbmode"Integrated" に設定します。例:

lbmode: "Integrated"

stackdriver.clusterlocation

stackdriver.clusterlocation を、ログを保存する Google Cloud リージョンに設定します。お使いのオンプレミス データセンターの近くのリージョンを選択することをおすすめします。

stackdriver.enablevpc

クラスタのネットワークが VPC によって制御されている場合は、stackdriver.enablevpctrue に設定します。これにより、すべてのテレメトリーが Google の制限された IP アドレスを通過するようになります。

構成ファイルの追加フィールド

GKE On-Prem の構成ファイルには、このトピックに示されているフィールド以外にもいくつかのフィールドがあります。たとえば、manuallbspec フィールドを使用して、GKE On-Prem を手動負荷分散モードで実行するように構成できます。

構成ファイルのフィールドの詳細については、DHCP を使用したインストール静的 IP アドレスを使用したインストールをご覧ください。

構成ファイルを検証する

構成ファイルを変更したら、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

管理クラスタとユーザー クラスタを作成する

  1. gkectl create cluster コマンドを実行して、管理クラスタとユーザー クラスタを作成します。

    gkectl create cluster --config config.yaml --skip-validation-all

    gkectl create cluster コマンドは、現在のディレクトリに [CLUSTER_NAME]-kubeconfig という名前の kubeconfig ファイルを作成します。ここで、[CLUSTER_NAME]cluster に設定した名前です。例: MY-CLUSTER-kubeconfig

    GKE On-Prem のドキュメントでは、次のプレースホルダを使用して、これらの kubeconfig ファイルを参照します。

    • 管理クラスタ: [ADMIN_CLUSTER_KUBECONFIG]
    • ユーザー クラスタ: [USER_CLUSTER_KUBECONFIG]
  2. クラスタが作成され、運用中であることを確認します。

    1. 管理クラスタを確認するには、次のコマンドを実行します。

      kubectl get nodes --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]

      出力には、管理クラスタノードが表示されます。

    2. ユーザー クラスタを確認するには、次のコマンドを実行します。

      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
      

ユーザー クラスタにアプリケーションをデプロイする方法については、次のセクションに進んでください。