Admin- und Nutzercluster erstellen

Auf dieser Seite wird beschrieben, wie Sie einen Administrator- und einen Nutzercluster erstellen.

SSH-Verbindung zur Administrator-Workstation herstellen

Stellen Sie eine SSH-Verbindung zu Ihrer Administrator-Workstation her:

ssh -i ~/.ssh/vsphere_workstation ubuntu@[IP_ADDRESS]

Dabei ist [IP_ADDRESS] die IP-Adresse der Administrator-Workstation.

Führen Sie alle verbleibenden Schritte in diesem Thema auf Ihrer Administrator-Workstation aus.

Anmelden

Melden Sie sich mit den Anmeldedaten Ihres Google Cloud-Nutzerkontos in Google Cloud an. Das Nutzerkonto muss mindestens die IAM-Rolle "Betrachter" haben:

gcloud auth login

Registrieren Sie gcloud als Credential Helper für Docker. Weitere Informationen zu diesem Befehl:

gcloud auth configure-docker

Statische IP-Adressen für den Administratorcluster konfigurieren

Erstellen Sie eine Hostkonfigurationsdatei mit dem Namen admin-hostconfig.yaml, um die statischen IP-Adressen anzugeben, die Sie für Ihren Administratorcluster verwenden möchten. Für diese Übung müssen Sie fünf IP-Adressen angeben, die vom Administratorcluster verwendet werden sollen.

Im Folgenden finden Sie ein Beispiel für eine Hostkonfigurationsdatei mit fünf Hosts:

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

Das Feld ips enthält ein Array von IP-Adressen und Hostnamen. Dies sind die IP-Adressen und Hostnamen, die GKE On-Prem den Knoten Ihres Administratorclusters zuweist.

In der Hostkonfigurationsdatei geben Sie auch die Adressen der DNS-Server, der Zeitserver und des Standard-Gateways an, die von den Knoten des Administratorclusters verwendet werden.

Das Feld searchdomainsfordns ist ein Array von DNS-Suchdomains, die im Cluster verwendet werden sollen. Diese Domains werden als Teil einer Domainsuchliste verwendet.

Statische IP-Adressen für den Nutzercluster konfigurieren

Erstellen Sie zur Angabe der statischen IP-Adressen, die Sie für Ihren Nutzercluster verwenden möchten, eine Hostkonfigurationsdatei mit dem Namen user-hostconfig.yaml.

Im Folgenden finden Sie ein Beispiel für eine Hostkonfigurationsdatei mit drei Hosts:

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

Das Feld ips enthält ein Array von IP-Adressen und Hostnamen. Dies sind die IP-Adressen und Hostnamen, die GKE On-Prem den Knoten Ihrer Nutzerclusters zuweist.

Das Feld searchdomainsfordns ist ein Array von DNS-Suchdomains, die im Cluster verwendet werden sollen. Diese Domains werden als Teil einer Domainsuchliste verwendet.

GKE On-Prem-Konfigurationsdatei erstellen

Kopieren Sie die folgende YAML-Datei in eine Datei mit dem Namen 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: ""

Konfigurationsdatei ändern

Ändern Sie config.yaml wie in den folgenden Abschnitten beschrieben:

vcenter.credentials.address

Das Feld vcenter.credentials.address enthält die IP-Adresse oder den Hostnamen Ihres vCenter-Servers.

Bevor Sie das Feld vsphere.credentials.address field ausfüllen, laden Sie das bereitgestellte Zertifikat Ihres vCenter-Servers herunter und prüfen Sie es. Geben Sie den folgenden Befehl ein, um das Zertifikat herunterzuladen und in einer Datei namens vcenter.pem zu speichern:

true | openssl s_client -connect [VCENTER_IP]:443 -showcerts 2>/dev/null | sed -ne '/-BEGIN/,/-END/p' > vcenter.pem

Dabei ist [VCENTER_IP] die IP-Adresse Ihres vCenter-Servers.

Öffnen Sie die Zertifikatsdatei, um den "Subject Common Name" und den "Subject Alternative Name" festzustellen:

openssl x509 -in vcenter.pem -text -noout

Die Ausgabe enthält den Subject Common Name (CN). Dies kann eine IP-Adresse oder ein Hostname sein. Beispiel:

Subject: ... CN = 203.0.113.100
Subject: ... CN = my-host.my-domain.example

Die Ausgabe kann auch unter Subject Alternative Name einen oder mehrere DNS-Namen enthalten:

X509v3 Subject Alternative Name:
    DNS:vcenter.my-domain.example

Wählen Sie den Common Name Subject oder einen der DNS-Namen unter Subject Alternative Name als Wert für vcenter.credentials.address in Ihrer Konfigurationsdatei aus. Beispiel:

vcenter:
  credentials:
    address: "203.0.113.1"
    ...
vcenter:
  credentials:
    address: "my-host.my-domain.example"
    ...

Sie müssen einen Wert auswählen, der im Zertifikat angezeigt wird. Wenn die IP-Adresse beispielsweise nicht im Zertifikat enthalten ist, können Sie sie nicht für vcenter.credentials.address verwenden.

vcenter.credentials

GKE On-Prem muss den Nutzernamen und das Passwort Ihres vCenter-Servers kennen. Legen Sie dazu die Werte username und password unter vcenter.credentials fest. Beispiel:

vcenter:
  credentials:
    ...
    username: "my-name"
    password: "my-password"

vcenter.datacenter, .datastore, .cluster, .network

GKE On-Prem benötigt einige Informationen zur Struktur Ihrer vSphere-Umgebung. Legen Sie dazu die Werte unter vcenter fest. Beispiel:

vcenter:
  ...
  datacenter: "MY-DATACENTER"
  datastore: "MY-DATASTORE"
  cluster: "MY-VSPHERE-CLUSTER"
  network: "MY-VIRTUAL-NETWORK"

vcenter.resourcepool

Ein vSphere-Ressourcenpool ist eine logische Gruppierung von vSphere-VMs in Ihrem vSphere-Cluster. Wenn Sie einen anderen Ressourcenpool als den Standardpool verwenden, geben Sie seinen Namen in vcenter.resourcepool an. Beispiel:

vcenter:
  ...
  resourcepool: "my-pool"

Wenn Sie möchten, dass GKE On-Prem seine Knoten im Standardressourcenpool des vSphere-Clusters bereitstellt, geben Sie für vcenter.resourcepool einen leeren String an. Beispiel:

vcenter:
  ...
  resourcepool: ""

vcenter.datadisk

GKE On-Prem erstellt ein VM-Laufwerk (VMDK), das die Kubernetes-Objektdaten für den Administratorcluster enthält. Das Installationsprogramm erstellt das VMDK für Sie, aber Sie müssen im Feld vcenter.datadisk einen Namen für das VMDK angeben. Beispiel:

vcenter:
  ...
  datadisk: "my-disk.vmdk"
vSAN-Datenspeicher: Ordner für das VMDK erstellen

Wenn Sie einen vSAN-Datenspeicher verwenden, müssen Sie das VMDK in einem Ordner ablegen. Sie müssen den Ordner im Voraus manuell erstellen. Erstellen Sie dazu mit govc einen Ordner:

govc datastore.mkdir -namespace=true my-gke-on-prem-folder

Legen Sie dann vcenter.datadisk auf den Pfad des VMDK einschließlich des Ordners fest. Beispiel:

vcenter:
...
datadisk: "my-gke-on-prem-folder/my-disk.vmdk"

In Version 1.1.1 ist es aufgrund eines bekannten Problems erforderlich, dass Sie den UUID-Pfad (Universally Unique Identifier) des Ordners und nicht den Dateipfad für vcenter.datadisk angeben. Kopieren Sie dies aus der Ausgabe des obigen govc-Befehls.

Geben Sie dann die UUID des Ordners in das Feld vcenter.datadisk ein. Fügen Sie keinen Schrägstrich vor der UUID ein. Beispiel:

vcenter:
...
datadisk: "14159b5d-4265-a2ba-386b-246e9690c588/my-disk.vmdk"

Dieses Problem wurde ab der Version 1.1.2 behoben.

vcenter.cacertpath

Wenn ein Client wie GKE On-Prem eine Anfrage an vCenter-Server sendet, muss der Server seine Identität gegenüber dem Client durch Vorlage eines Zertifikats oder eines Zertifikatpakets bestätigen. Zum Prüfen des Zertifikats oder Pakets muss GKE On-Prem das Root-Zertifikat in der Vertrauenskette haben.

Legen Sie für vcenter.cacertpath den Pfad des Root-Zertifikats fest. Beispiel:

vcenter:
  ...
  cacertpath: "/my-cert-folder/the-root.crt"

Ihre VM-Installation hat eine Zertifizierungsstelle (Certificate Authority, CA), die ein Zertifikat für Ihren vCenter-Server ausstellt. Das Root-Zertifikat in der Vertrauenskette ist ein selbst signiertes Zertifikat, das von VMware erstellt wurde.

Wenn Sie nicht die VMware-Standardzertifizierungsstelle verwenden möchten, können Sie VMware so konfigurieren, dass eine andere Zertifizierungsstelle genutzt wird.

Sollte Ihr vCenter-Server ein von der VMware-Standardzertifizierungsstelle ausgestelltes Zertifikat verwenden, gibt es mehrere Möglichkeiten, das Root-Zertifikat abzurufen:

  • curl -k "https://[SERVER_ADDRESS]/certs/download.zip" > download.zip

    Dabei ist [SERVER_ADDRESS] die Adresse Ihres vCenter-Servers.

  • Geben Sie in einem Browser die Adresse Ihres vCenter-Servers ein. Klicken Sie im grauen Feld rechts auf Vertrauenswürdige Root-CA-Zertifikate herunterladen.

  • Geben Sie den folgenden Befehl ein, um das bereitgestellte Zertifikat abzurufen:

    true | openssl s_client -connect [SERVER_ADDRESS]:443 -showcerts

    Suchen Sie in der Ausgabe nach einer URL wie dieser: https://[SERVER_ADDRESS]/afd/vecs/ca. Geben Sie die URL in einen Browser ein. Dadurch wird das Root-Zertifikat heruntergeladen.

Die heruntergeladene Datei heißt download.zip.

Richten Sie den Befehl "unzip" ein und entpacken Sie die Datei:

sudo apt-get install unzip
unzip download.zip

Wenn der Befehl zum Entpacken beim ersten Mal nicht funktioniert, geben Sie ihn noch einmal ein.

Suchen Sie nach der Zertifikatsdatei in certs/lin.

proxy

Wenn sich Ihr Netzwerk hinter einem Proxyserver befindet, legen Sie proxy.url auf die Adresse Ihres Proxyservers fest.

Geben Sie für proxy.noproxy eine Liste von IP-Adressen, IP-Adressbereichen, Hostnamen und Domainnamen an. Wenn GKE On-Prem eine Anfrage an eine dieser Adressen, Hosts oder Domains sendet, wird die Anfrage direkt gesendet. Die Anfrage wird nicht an den Proxyserver gesendet. Beispiel:

proxy:
  url: "https://my-proxy.example.local"
  noproxy: "10.151.222.0/24, my-host.example.local,10.151.2.1"

admincluster.ipblockfilepath

Da Sie statische IP-Adressen verwenden, benötigen Sie eine Hostkonfigurationsdatei, wie unter Statische IP-Adressen konfigurieren beschrieben. Geben Sie den Pfad zu Ihrer Hostkonfigurationsdatei im Feld admincluster.ipblockfilepath ein. Beispiel:

admincluster:
  ipblockfilepath: "/my-config-directory/admin-hostconfig.yaml"

admincluster.bigip.credentials

GKE On-Prem benötigt die IP-Adresse oder den Hostnamen, den Nutzernamen und das Passwort Ihres F5 BIG-IP-Load-Balancers. Legen Sie die Werte unter admincluster.bigip fest, um diese Informationen anzugeben. Beispiel:

admincluster:
  ...
  bigip:
    credentials:
      address: "203.0.113.2"
      username: "my-admin-f5-name"
      password: "rJDlm^%7aOzw"

admincluster.bigip.partition

Zuvor haben Sie eine BIG-IP-Partition für Ihren Administratorcluster erstellt. Legen Sie admincluster.bigip.partition auf den Namen Ihrer Partition fest. Beispiel:

admincluster:
  ...
  bigip:
    partition: "my-admin-f5-partition"

admincluster.vips

Setzen Sie den Wert von admincluster.vips.controlplanevip auf die IP-Adresse, die Sie für den Load-Balancer für den Kubernetes API-Server des Administratorclusters konfiguriert haben. Legen Sie den Wert von ingressvip auf die IP-Adresse fest, die Sie auf dem Load-Balancer für den Dienst für eingehenden Traffic des Administratorclusters konfiguriert haben. Beispiel:

admincluster:
  ...
  vips:
    controlplanevip: 203.0.113.3
    ingressvip: 203.0.113.4

admincluster.serviceiprange und admincluster.podiprange

Der Administratorcluster muss einen Bereich von IP-Adressen für Dienste und einen Bereich von IP-Adressen für Pods haben. Diese Bereiche werden durch die Felder admincluster.serviceiprange und admincluster.podiprange angegeben. Diese Felder werden ausgefüllt, wenn Sie gkectl create-config ausführen. Sie können die Werte auch ändern.

Die Bereich für Dienste und Pods dürfen sich nicht überschneiden. Außerdem dürfen sich diese beiden Bereiche nicht mit IP-Adressen überschneiden, die für Knoten in einem Cluster verwendet werden.

Beispiel:

admincluster:
  ...
  serviceiprange: 10.96.232.0/24
  podiprange: 192.168.0.0/16

usercluster.bigip.partition

Zuvor haben Sie eine BIG-IP-Partition für Ihren Nutzercluster erstellt. Legen Sie usercluster.bigip.partition auf den Namen Ihrer Partition fest. Beispiel:

usercluster:
  ...
  bigip:
    partition: "my-user-f5-partition"
  ...

usercluster.vips

Setzen Sie den Wert von usercluster.vips.controlplanevip auf die IP-Adresse, die Sie für den Load-Balancer für den Kubernetes API-Server des Nutzerclusters konfiguriert haben. Legen Sie den Wert von ingressvip auf die IP-Adresse fest, die Sie auf dem Load-Balancer für den Dienst für eingehenden Traffic des Nutzerclusters konfiguriert haben. Beispiel:

usercluster:
  ...
  vips:
    controlplanevip: 203.0.113.6
    ingressvip: 203.0.113.7

usercluster.serviceiprange und usercluster.podiprange

Der Nutzercluster muss einen IP-Adressbereich für Dienste und einen IP-Adressbereich für Pods haben. Diese Bereiche werden durch die Felder usercluster.serviceiprange und usercluster.podiprange angegeben. Diese Felder werden ausgefüllt, wenn Sie gkectl create-config ausführen. Sie können die Werte auch ändern.

Die Bereich für Dienste und Pods dürfen sich nicht überschneiden. Außerdem dürfen sich diese beiden Bereiche nicht mit IP-Adressen überschneiden, die für Knoten in einem Cluster verwendet werden.

Beispiel:

usercluster:
  ...
  serviceiprange: 10.96.233.0/24
  podiprange: 172.16.0.0/12

VMware DRS-Anti-Affinitätsregeln deaktivieren

Ab Version 1.1.0-gke.6 erstellt GKE On-Prem automatisch Anti-Affinitätsregeln des Typs Distributed Resource Scheduler (DRS) für die Knoten Ihres Nutzerclusters, sodass sie auf mindestens drei physische Hosts in Ihrem Rechenzentrum verteilt werden. Ab Version 1.1.0-gke.6 wird diese Funktion automatisch für neue und vorhandene Cluster aktiviert.

Für diese Funktion muss die vSphere-Umgebung die folgenden Bedingungen erfüllen:

  • VMware DRS ist aktiviert. Für VMware DRS ist die vSphere Enterprise Plus-Lizenzversion erforderlich. Informationen zum Aktivieren von DRS finden Sie unter Enabling VMware DRS in a cluster.
  • Das im Feld vcenter angegebene vSphere-Nutzerkonto hat die Berechtigung Host.Inventory.EditCluster.
  • Es sind mindestens drei physische Hosts verfügbar.

Wenn Sie eine vSphere Standard-Lizenz haben, können Sie VMware DRS nicht aktivieren.

Wenn Sie DRS nicht aktiviert haben oder nicht mindestens drei Hosts haben, für die vSphere VMs geplant werden können, fügen Sie Ihrer Konfigurationsdatei usercluster.antiaffinitygroups.enabled: false hinzu. Beispiel:

usercluster:
  ...
  antiaffinitygroups:
    enabled: false

gkeconnect

Die gkeconnect-Spezifikation enthält Informationen, die GKE On-Prem benötigt, um die Verwaltung Ihrer lokalen Cluster über die Google Cloud Console einzurichten.

Legen Sie für gkeconnect.projectid die Projekt-ID des Google Cloud-Projekts fest, in dem Sie Ihre lokalen Cluster verwalten möchten.

Legen Sie den Wert von gkeconnect.registerserviceaccountkeypath auf den Pfad der JSON-Schlüsseldatei für Ihr Registrierungsdienstkonto fest. Legen Sie den Wert von gkeconnect.agentserviceaccountkeypath auf den Pfad der JSON-Schlüsseldatei für Ihr Verbindungsdienstkonto fest.

Beispiel:

gkeconnect:
  projectid: "my-project"
  registerserviceaccountkeypath: "/my-key-directory/register-key.json"
  agentserviceaccountkeypath: "/my-key-directory/connect-key.json"

stackdriver

Die stackdriver-Spezifikation enthält Informationen, die GKE On-Prem zum Speichern von Logeinträgen benötigt, die von Ihren lokalen Clustern generiert wurden.

Setzen Sie stackdriver.projectid auf die Projekt-ID des Google Cloud-Projekts, das Sie mit der Operations-Suite von Google Cloud verknüpfen möchten. Connect exportiert über dieses Projekts Clusterlogs aus Stackdriver.

Legen Sie stackdriver.clusterlocation auf eine Google Cloud-Region fest, in der Logs gespeichert werden sollen. Es empfiehlt sich, eine Region in der Nähe Ihres lokalen Rechenzentrums auszuwählen.

Legen Sie für stackdriver.proxyconfigsecretname ein Kubernetes-Secret fest, das Sie im Namespace kube-system definieren. Dieses Secret sollte einen einzelnen Wert haben, mit dem https_proxy_url definiert wird. Das Standard-Secret stackdriver-proxy-config ist unveränderlich und dient lediglich als Beispiel.

Setzen Sie stackdriver.enablevpc auf true, wenn das Netzwerk Ihres Clusters durch eine VPC gesteuert wird. So wird gewährleistet, dass alle Telemetriedaten über die eingeschränkten IP-Adressen von Google übertragen werden.

Setzen Sie stackdriver.serviceaccountkeypath auf den Pfad der JSON-Schlüsseldatei für Ihr Dienstkonto der Operations-Suite von Google Cloud.

Beispiel:

stackdriver:
  projectid: "my-project"
  clusterlocation: "us-west1"
  enablevpc: false
  serviceaccountkeypath: "/my-key-directory/stackdriver-key.json"

gcrkeypath

Setzen Sie den Wert von gcrkeypath auf den Pfad der JSON-Schlüsseldatei für Ihr Dienstkonto auf der Zulassungsliste. Beispiel: Hinweis: Weitere Informationen zu diesem Befehl finden Sie unter Vorabprüfungen ausführen.

gcrkeypath: "/my-key-directory/whitelisted-key.json"

Konfigurationsdatei validieren

Nachdem Sie die Konfigurationsdatei geändert haben, führen Sie gkectl check-config aus, um zu prüfen, ob die Datei gültig ist und für die Installation verwendet werden kann:

gkectl check-config --config config.yaml

Wenn der Befehl FAILURE-Meldungen zurückgibt, beheben Sie die Probleme und validieren Sie die Datei noch einmal.

Wenn Sie die zeitaufwendigeren Validierungen überspringen möchten, übergeben Sie das Flag --fast. Verwenden Sie die Flags --skip-validation-xxx, um einzelne Validierungen zu überspringen. Weitere Informationen zum Befehl check-config finden Sie unter Vorabprüfungen ausführen.

gkectl prepare ausführen

Führen Sie gkectl prepare aus, um Ihre vSphere-Umgebung zu initialisieren:

gkectl prepare --config config.yaml --skip-validation-all

Administrator- und Nutzercluster erstellen

Erstellen Sie den Administratorcluster und den Nutzercluster.

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

Mit dem Befehl gkectl create cluster wird im aktuellen Verzeichnis die Datei kubeconfig erstellt. In der GKE On-Prem-Dokumentation wird der Platzhalter [ADMIN_CLUSTER_KUBECONFIG] verwendet, um auf diese Datei zu verweisen.

Geben Sie den folgenden Befehl ein, um zu überprüfen, ob der Administratorcluster erstellt wurde:

kubectl get nodes --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]

Die Ausgabe zeigt die Knoten des Administratorclusters.

Mit dem Befehl gkectl create cluster wird im aktuellen Verzeichnis eine Datei namens init-user-cluster-kubeconfig erstellt. In der GKE On-Prem-Dokumentation wird der Platzhalter [USER_CLUSTER_KUBECONFIG] verwendet, um auf diese Datei zu verweisen.

Prüfen Sie mit dem folgenden Befehl, ob der Nutzercluster erstellt wurde:

kubectl get nodes --kubeconfig [USER_CLUSTER_KUBECONFIG]

Die Ausgabe zeigt die Knoten des Nutzerclusters. Beispiel:

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