Creazione di cluster amministrativi e utente

Questa pagina mostra come creare un cluster di amministrazione e un cluster utente.

Accedi alla workstation mediante SSH

Accedi alla workstation mediante SSH:

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

dove [IP_ADDRESS] è l'indirizzo IP della workstation di amministrazione.

Esegui tutti i passaggi rimanenti di questo argomento sulla tua workstation di amministrazione.

Accesso

Accedi a Google Cloud utilizzando le credenziali del tuo account utente Google Cloud. L'account utente deve contenere almeno il ruolo IAM Visualizzatore:

gcloud auth login

Registra gcloud come assistente credenziali Docker. Scopri di più su questo comando:

gcloud auth configure-docker

Configurazione di IP statici per il cluster di amministrazione

Per specificare gli indirizzi IP statici da utilizzare per il cluster di amministrazione, crea un file di configurazione dell'host denominato admin-hostconfig.yaml. Per questo esercizio, devi specificare cinque indirizzi IP che devono essere utilizzati dal cluster di amministrazione.

Di seguito è riportato un esempio di file di configurazione host con cinque host:

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

Il campo ips è un array di indirizzi IP e nomi host. Si tratta di indirizzi IP e nomi host che GKE On-Prem assegnerà ai nodi del cluster di amministrazione.

Nel file di configurazione host, devi specificare anche gli indirizzi dei server DNS, dei server di tempo e del gateway predefinito che saranno utilizzati dai nodi del cluster di amministrazione.

Il campo searchdomainsfordns è un array di domini di ricerca DNS da utilizzare nel cluster. Questi domini vengono utilizzati come parte di un elenco di ricerca di domini.

Configurazione degli IP statici per il cluster utente

Per specificare gli indirizzi IP statici da utilizzare per il cluster utente, crea un file di configurazione host denominato user-hostconfig.yaml.

Di seguito è riportato un esempio di file di configurazione host con tre host:

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

Il campo ips è un array di indirizzi IP e nomi host. Si tratta di indirizzi IP e nomi host che GKE On-Prem assegnerà ai nodi del cluster utente.

Il campo searchdomainsfordns è un array di domini di ricerca DNS da utilizzare nel cluster. Questi domini vengono utilizzati come parte di un elenco di ricerca di domini.

Creazione di un file di configurazione GKE On-Prem

Copia il seguente YAML in un file denominato 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: ""

Modificare il file di configurazione

Modifica config.yaml come descritto nelle seguenti sezioni:

vcenter.credentials.address

Il campo vcenter.credentials.address contiene l'indirizzo IP o il nome host del server vCenter.

Prima di compilare il vsphere.credentials.address field, scarica e controlla il certificato di pubblicazione del server vCenter. Inserisci il comando seguente per scaricare il certificato e salvarlo in un file denominato vcenter.pem.

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

dove [VCENTER_IP] è l'indirizzo IP del tuo server vCenter.

Apri il file del certificato per visualizzare il nome comune del soggetto e il nome alternativo del soggetto:

openssl x509 -in vcenter.pem -text -noout

Nell'output è visualizzato il nome comune Subject (CN). Potrebbe essere un indirizzo IP o un nome host. Ad esempio:

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

L'output potrebbe includere anche uno o più nomi DNS sotto Subject Alternative Name:

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

Scegli Subject Nome comune o uno dei nomi DNS in Subject Alternative Name da utilizzare come valore di vcenter.credentials.address nel tuo file di configurazione. Ad esempio:

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

Devi scegliere un valore visualizzato nel certificato. Ad esempio, se l'indirizzo IP non compare nel certificato, non puoi utilizzarlo per vcenter.credentials.address.

vcenter.credentials

GKE On-Prem deve conoscere il nome utente e la password del server vCenter. Per fornire queste informazioni, imposta i valori username e password in vcenter.credentials. Ad esempio:

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

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

GKE On-Prem richiede alcune informazioni sulla struttura del tuo ambiente vSphere. Imposta i valori in vcenter per fornire questa informazione. Ad esempio:

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

vcenter.resourcepool

Un pool di risorse vSphere è un raggruppamento logico di VM vSphere nel cluster vSphere. Se utilizzi un pool di risorse diverso da quello predefinito, fornisci il suo nome a vcenter.resourcepool. Ad esempio:

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

Se vuoi che GKE On-Prem esegua il deployment dei suoi nodi nel pool di risorse predefinito del cluster vSphere, fornisci una stringa vuota a vcenter.resourcepool. Ad esempio:

vcenter:
  ...
  resourcepool: ""

vcenter.datadisk

GKE On-Prem crea un disco virtuale della macchina (VMDK) per contenere i dati dell'oggetto Kubernetes per il cluster di amministrazione. Il programma di installazione crea il VMDK per te, ma devi fornire un nome per il VMDK nel campo vcenter.datadisk. Ad esempio:

vcenter:
  ...
  datadisk: "my-disk.vmdk"
Datastore vSAN: creazione di una cartella per il VMDK

Se utilizzi un datastore vSAN, devi inserire il VMDK in una cartella. La cartella deve essere creata manualmente in anticipo. Per farlo, puoi utilizzare govc per creare una cartella:

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

Quindi imposta vcenter.datadisk sul percorso del VMDK, inclusa la cartella. Ad esempio:

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

Nella versione 1.1.1, un problema noto richiede che tu fornisca il percorso dell'identificatore univoco universale (UUID) della cartella anziché il percorso del file a vcenter.datadisk. Copialo dall'output del comando govc riportato sopra.

Quindi, fornisci l'UUID della cartella nel campo vcenter.datadisk. Non inserire una barra davanti all'UUID. Ad esempio:

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

Questo problema è stato risolto nelle versioni 1.1.2 e successive.

vcenter.cacertpath

Quando un client, come GKE On-Prem, invia una richiesta al server vCenter, il server deve dimostrare la propria identità presentando un certificato o un bundle di certificati. Per verificare il certificato o il bundle, GKE On-Prem deve avere il certificato radice nella catena di attendibilità.

Imposta vcenter.cacertpath sul percorso del certificato radice. Ad esempio:

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

L'installazione di VMware ha un'autorità di certificazione (CA) che emette un certificato per il server vCenter. Il certificato radice nella catena di attendibilità è un certificato autofirmato creato da VMware.

Se non vuoi utilizzare VMWare, che è l'impostazione predefinita, puoi configurare VMware in modo che utilizzi un'autorità di certificazione diversa.

Se il server vCenter utilizza un certificato emesso dall'autorità di certificazione VMware predefinita, esistono diversi modi per ottenere il certificato radice:

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

    dove [SERVER_ADDRESS] è l'indirizzo del tuo server vCenter.

  • In un browser, inserisci l'indirizzo del server vCenter. Nella casella grigia a destra, fai clic su Scarica certificati CA radice attendibili.

  • Inserisci questo comando per ottenere il certificato di gestione:

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

    Nell'output, individua un URL come questo: https://[SERVER_ADDRESS]/afd/vecs/ca. Inserisci l'URL in un browser. da cui viene scaricato il certificato radice.

Il file scaricato è denominato download.zip.

Installa il comando di decompressione e decomprimi il file:

sudo apt-get install unzip
unzip download.zip

Se il comando Decomprimi non funziona la prima volta, inseriscilo di nuovo.

Cerca il file del certificato in certs/lin.

proxy

Se la rete è protetta da un server proxy, imposta proxy.url sull'indirizzo del server proxy.

Per proxy.noproxy, fornisci un elenco di indirizzi IP, intervalli di indirizzi IP, nomi host e nomi di dominio. Quando GKE On-Prem invia una richiesta a uno di questi indirizzi, host o domini, la richiesta viene inviata direttamente. Non invierà la richiesta al server proxy. Ad esempio:

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

admincluster.ipblockfilepath

Poiché utilizzi indirizzi IP statici, devi disporre di un file di configurazione dell'host, come descritto in Configurare gli IP statici. Specifica il percorso del file di configurazione dell'host nel campo admincluster.ipblockfilepath. Ad esempio:

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

admincluster.bigip.credentials

GKE On-Prem deve conoscere l'indirizzo IP o il nome host, il nome utente e la password del bilanciatore del carico BIG-IP di F5. Imposta i valori in admincluster.bigip per fornire queste informazioni. Ad esempio:

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

admincluster.bigip.partition

In precedenza, hai creato una partizione BIG-IP per il tuo cluster di amministrazione. Imposta admincluster.bigip.partition sul nome della partizione. Ad esempio:

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

admincluster.vips

Imposta il valore di admincluster.vips.controlplanevip sull'indirizzo IP che hai scelto di configurare sul bilanciatore del carico per il server API di Kubernetes del cluster di amministrazione. Imposta il valore di ingressvip sull'indirizzo IP che hai scelto di configurare sul bilanciatore del carico per il servizio in entrata del cluster di amministrazione. Ad esempio:

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

admincluster.serviceiprange e admincluster.podiprange

Il cluster di amministrazione deve avere un intervallo di indirizzi IP da utilizzare per i servizi e un intervallo di indirizzi IP da utilizzare per i pod. Questi intervalli sono specificati dai campi admincluster.serviceiprange e admincluster.podiprange. Questi campi vengono compilati quando esegui gkectl create-config. Se vuoi, puoi modificare i valori completati e scegliere quelli che preferisci.

Gli intervalli di servizi e pod non devono sovrapporsi. Inoltre, gli intervalli di servizi e pod non devono sovrapporsi agli indirizzi IP utilizzati per i nodi in qualsiasi cluster.

Esempio:

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

usercluster.bigip.partition

In precedenza, hai creato una partizione BIG-IP per il tuo cluster utente. Imposta usercluster.bigip.partition sul nome della partizione. Ad esempio:

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

usercluster.vips

Imposta il valore di usercluster.vips.controlplanevip sull'indirizzo IP che hai scelto di configurare sul bilanciatore del carico per il server API Kubernetes del cluster utente. Imposta il valore di ingressvip sull'indirizzo IP che hai scelto di configurare sul bilanciatore del carico per il servizio in entrata del cluster utente. Ad esempio:

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

usercluster.serviceiprange e usercluster.podiprange

Il cluster utente deve avere un intervallo di indirizzi IP da utilizzare per i servizi e un intervallo di indirizzi IP da utilizzare per i pod. Questi intervalli sono specificati dai campi usercluster.serviceiprange e usercluster.podiprange. Questi campi vengono compilati quando esegui gkectl create-config. Se vuoi, puoi modificare i valori scelti da te.

Gli intervalli di servizi e pod non devono sovrapporsi. Inoltre, gli intervalli di servizi e pod non devono sovrapporsi agli indirizzi IP utilizzati per i nodi in qualsiasi cluster.

Esempio:

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

Disabilitazione delle regole di anti-affinità di VMware DRS

A partire dalla versione 1.1.0-gke.6, GKE On-Prem crea automaticamente le regole di anti-affinità di Distributed Resource Scheduler (DRS) di VMware per i nodi del cluster utente, rendendole distribuite su almeno tre host fisici nel tuo data center. A partire dalla versione 1.1.0-gke.6, questa funzionalità è abilitata automaticamente per i nuovi cluster e i cluster esistenti.

Questa funzionalità richiede che l'ambiente vSphere soddisfi le seguenti condizioni:

  • VMware DRS è abilitato. VMware DRS richiede la versione di licenza vSphere Enterprise Plus. Per informazioni su come abilitare DRS, vedi Abilitare DRS VMware in un cluster.
  • L'account utente vSphere fornito nel campo vcenter dispone dell'autorizzazione Host.Inventory.EditCluster.
  • Sono disponibili almeno tre host fisici.

Ricorda che, se hai una licenza vSpphere Standard, non puoi abilitare VMware DRS.

Se non hai abilitato DRS o se non hai almeno tre host per cui programmare le VM vSphere, aggiungi usercluster.antiaffinitygroups.enabled: false al file di configurazione. Ad esempio:

usercluster:
  ...
  antiaffinitygroups:
    enabled: false

gkeconnect

La specifica gkeconnect contiene le informazioni necessarie a GKE On-Prem per configurare la gestione dei cluster on-prem da Google Cloud Console.

Imposta gkeconnect.projectid sull'ID progetto del progetto Google Cloud in cui vuoi gestire i cluster on-prem.

Imposta il valore di gkeconnect.registerserviceaccountkeypath sul percorso del file della chiave JSON per il tuo account di servizio di registrazione. Imposta il valore di gkeconnect.agentserviceaccountkeypath sul percorso del file della chiave JSON per il tuo account di servizio di connessione.

Esempio:

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

stackdriver

La specifica stackdriver contiene le informazioni necessarie a GKE On-Prem per archiviare le voci di log generate dai cluster on-prem.

Imposta stackdriver.projectid sull'ID del progetto Google Cloud che vuoi associare alla suite operativa di Google Cloud. Collega i log del cluster di esportazione da Stackdriver in questo progetto.

Imposta stackdriver.clusterlocation su un'area geografica di Google Cloud in cui vuoi archiviare i log. È consigliabile scegliere un'area geografica vicina al tuo data center on-prem.

Imposta stackdriver.proxyconfigsecretname su un secret Kubernetes che definisci nello spazio dei nomi kube-system. Questo Secret deve avere un singolo valore che definisce https_proxy_url. Il Secret predefinito di stackdriver-proxy-config è immutabile e semplicemente come esempio.

Imposta stackdriver.enablevpc su true se la rete del cluster è controllata da un VPC. Ciò garantisce che tutta la telemetria passi attraverso gli indirizzi IP limitati di Google.

Imposta stackdriver.serviceaccountkeypath sul percorso del file della chiave JSON per l'account di servizio della suite operativa di Google Cloud.

Esempio:

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

gcrkeypath

Imposta il valore di gcrkeypath sul percorso del file della chiave JSON dell'account di servizio inserito nella lista consentita. Ad esempio: Nota: per ulteriori informazioni su questo comando, consulta Esecuzione di controlli preflight.

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

Convalida del file di configurazione

Dopo aver modificato il file di configurazione, esegui gkectl check-config per verificare che il file sia valido e possa essere utilizzato per l'installazione:

gkectl check-config --config config.yaml

Se il comando restituisce un messaggio FAILURE, correggi i problemi e convalida di nuovo il file.

Se vuoi ignorare le convalide più lunghe, supera il flag --fast. Per ignorare le singole convalide, utilizza i flag --skip-validation-xxx. Per ulteriori informazioni sul comando check-config, consulta Esecuzione di controlli preflight.

Esecuzione del gkectl prepare

Esegui gkectl prepare per inizializzare il tuo ambiente vSphere:

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

Creazione dei cluster amministratore e utente

Crea il cluster di amministrazione e il cluster utente:

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

Il comando gkectl create cluster crea un file denominato kubeconfig nella directory corrente. La documentazione di GKE On-Prem utilizza il segnaposto [ADMIN_CLUSTER_KUBECONFIG] per fare riferimento a questo file.

Per verificare che il cluster di amministrazione sia stato creato, inserisci il seguente comando:

kubectl get nodes --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]

L'output mostra i nodi del cluster di amministrazione.

Il comando gkectl create cluster crea un file denominato init-user-cluster-kubeconfig nella directory corrente. La documentazione di GKE On-Prem utilizza il segnaposto [USER_CLUSTER_KUBECONFIG] per fare riferimento a questo file.

Per verificare che il cluster utente sia stato creato, inserisci il seguente comando:

kubectl get nodes --kubeconfig [USER_CLUSTER_KUBECONFIG]

L'output mostra i nodi del cluster utente. Ad esempio:

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