Créer des clusters d'utilisateur et d'administrateur

Cette page explique comment créer un cluster d'administrateur et un cluster d'utilisateur.

Se connecter en SSH au poste de travail administrateur

Connectez-vous en SSH à votre poste de travail administrateur :

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

[IP_ADDRESS] est l'adresse IP de votre poste de travail administrateur.

Effectuez toutes les étapes restantes de cette rubrique sur votre poste de travail administrateur.

Se connecter

Connectez-vous à Google Cloud à l'aide des identifiants de votre compte utilisateur Google Cloud. Le compte utilisateur doit détenir au moins le rôle IAM de lecteur :

gcloud auth login

Enregistrez gcloud en tant qu'assistant d'identification Docker (en savoir plus sur cette commande) :

gcloud auth configure-docker

Configurer des adresses IP statiques pour votre cluster d'administrateur

Pour spécifier les adresses IP statiques que vous souhaitez utiliser pour votre cluster d'administrateur, créez un fichier de configuration d'hôte nommé admin-hostconfig.yaml. Pour cet exercice, vous devez spécifier cinq adresses IP à utiliser par le cluster d'administrateur.

Voici un exemple de fichier de configuration d'hôte avec cinq hôtes :

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

Le champ ips est un tableau d'adresses IP et de noms d'hôte. Il s'agit des adresses IP et des noms d'hôte que GKE On-Prem va affecter à vos nœuds de cluster d'administrateur.

Dans le fichier de configuration d'hôte, spécifiez également les adresses des serveurs DNS, des serveurs de temps et de la passerelle par défaut que les nœuds du cluster d'administrateur utiliseront.

Le champ searchdomainsfordns est un tableau de domaines de recherche DNS à utiliser dans le cluster. Ces domaines sont utilisés dans le cadre d'une liste de recherche de domaines.

Configurer des adresses IP statiques pour votre cluster d'utilisateur

Pour spécifier les adresses IP statiques que vous souhaitez utiliser pour votre cluster d'utilisateur, créez un fichier de configuration d'hôte nommé user-hostconfig.yaml.

Voici un exemple de fichier de configuration d'hôte comportant trois hôtes :

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

Le champ ips est un tableau d'adresses IP et de noms d'hôte. Il s'agit des adresses IP et des noms d'hôte que GKE On-Prem va attribuer aux nœuds de votre cluster d'utilisateur.

Le champ searchdomainsfordns est un tableau de domaines de recherche DNS à utiliser dans le cluster. Ces domaines sont utilisés dans le cadre d'une liste de recherche de domaines.

Créer un fichier de configuration GKE On-Prem

Copiez le code YAML suivant dans un fichier nommé 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: ""

Modifier le fichier de configuration

Modifiez config.yaml comme décrit dans les sections suivantes :

vcenter.credentials.address

Le champ vcenter.credentials.address contient l'adresse IP ou le nom d'hôte de votre serveur vCenter.

Avant de remplir le champ vsphere.credentials.address field, téléchargez et inspectez le certificat de diffusion de votre serveur vCenter. Saisissez la commande suivante pour télécharger le certificat et l'enregistrer dans un fichier nommé vcenter.pem.

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

[VCENTER_IP] est l'adresse IP du serveur vCenter.

Ouvrez le fichier de certificat pour afficher le nom commun d'objet et le nom alternatif d'objet :

openssl x509 -in vcenter.pem -text -noout

Le résultat indique le nom commun (CN) d'objet (Subject). Il peut s'agir d'une adresse IP ou d'un nom d'hôte. Exemple :

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

Le résultat peut également inclure un ou plusieurs noms DNS sous Subject Alternative Name :

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

Choisissez le nom commun Subject ou l'un des noms DNS sous Subject Alternative Name pour l'utiliser comme valeur du champ vcenter.credentials.address dans votre fichier de configuration. Exemple :

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

Vous devez choisir une valeur qui apparaît dans le certificat. Par exemple, si l'adresse IP n'apparaît pas dans le certificat, vous ne pouvez pas l'utiliser pour vcenter.credentials.address.

vcenter.credentials

GKE On-Prem doit connaître le nom d'utilisateur et le mot de passe de votre serveur vCenter. Pour fournir ces informations, définissez les valeurs username et password sous vcenter.credentials. Exemple :

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

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

GKE On-Prem a besoin d'informations sur la structure de votre environnement vSphere. Définissez les valeurs sous vcenter pour fournir ces informations. Exemple :

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

vcenter.resourcepool

Un pool de ressources vSphere est un regroupement logique de machines virtuelles vSphere dans votre cluster vSphere. Si vous utilisez un pool de ressources différent de celui par défaut, indiquez son nom à vcenter.resourcepool. Exemple :

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

Si vous souhaitez que GKE On-Prem déploie ses nœuds dans le pool de ressources par défaut du cluster vSphere, fournissez une chaîne vide à vcenter.resourcepool. Exemple :

vcenter:
  ...
  resourcepool: ""

vcenter.datadisk

GKE On-Prem crée un disque de machine virtuelle (VMDK) afin d'y stocker les données de l'objet Kubernetes pour le cluster d'administrateur. Le programme d'installation crée le VMDK, mais vous devez lui attribuer un nom dans le champ vcenter.datadisk. Exemple :

vcenter:
  ...
  datadisk: "my-disk.vmdk"
Datastore vSAN : créer un dossier pour le VMDK

Si vous utilisez un datastore vSAN, vous devez placer le VMDK dans un dossier. Vous devez créer le dossier manuellement à l'avance. Pour ce faire, vous pouvez utiliser govc :

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

Définissez ensuite vcenter.datadisk sur le chemin d'accès du VMDK, en y incluant le nom du dossier. Exemple :

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

Dans la version 1.1.1, un problème connu nécessite que vous fournissiez le chemin UUID (Universally Unique Identifier) du dossier, et non le chemin du fichier, à vcenter.datadisk. Copiez-le à partir de la sortie de la commande govc ci-dessus.

Indiquez ensuite l'UUID du dossier dans le champ vcenter.datadisk. Ne placez pas de barre oblique devant l'UUID. Exemple :

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

Ce problème a été résolu à partir de la version 1.1.2.

vcenter.cacertpath

Lorsqu'un client, tel que GKE On-Prem, envoie une requête au serveur vCenter, celui-ci doit prouver son identité au client en présentant un certificat ou un groupe de certificats. Pour valider le certificat ou le groupe, le certificat racine doit se trouver dans la chaîne de confiance de GKE On-Prem.

Définissez vcenter.cacertpath sur le chemin d'accès du certificat racine. Exemple :

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

Votre installation VMware comporte une autorité de certification qui émet un certificat sur votre serveur vCenter. Le certificat racine de la chaîne de confiance est un certificat autosigné créé par VMware.

Si vous ne souhaitez pas utiliser l'autorité de certification VMWare, qui est définie par défaut, vous pouvez configurer VMware de sorte à utiliser une autre autorité de certification.

Si votre serveur vCenter utilise un certificat émis par l'autorité de certification VMware par défaut, vous pouvez obtenir le certificat racine de plusieurs manières :

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

    [SERVER_ADDRESS] est l'adresse de votre serveur vCenter.

  • Dans un navigateur, saisissez l'adresse de votre serveur vCenter. Dans la zone grisée située à droite, cliquez sur le bouton pour télécharger les certificats racines des autorités de certification de confiance.

  • Saisissez cette commande pour obtenir le certificat de diffusion :

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

    Dans le résultat, recherchez une URL semblable à celle-ci : https://[SERVER_ADDRESS]/afd/vecs/ca. Saisissez l'URL dans un navigateur. Le certificat racine est alors téléchargé.

Le fichier téléchargé est nommé download.zip.

Installez la commande de décompression et décompressez le fichier :

sudo apt-get install unzip
unzip download.zip

Si la commande de décompression ne fonctionne pas au premier essai, saisissez-la à nouveau.

Recherchez le fichier de certificat dans certs/lin.

proxy

Si votre réseau se trouve derrière un serveur proxy, définissez proxy.url sur l'adresse de votre serveur proxy.

Pour proxy.noproxy, fournissez une liste d'adresses IP, de plages d'adresses IP, de noms d'hôte et de noms de domaine. Lorsque GKE On-Prem envoie une requête à l'une de ces adresses ou à l'un de ces hôtes ou domaines, cette requête est envoyée directement. La requête n'est pas envoyée au serveur proxy. Exemple :

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

admincluster.ipblockfilepath

Étant donné que vous utilisez des adresses IP statiques, vous devez disposer d'un fichier de configuration d'hôte comme décrit dans la section Configurer des adresses IP statiques. Indiquez le chemin d'accès de votre fichier de configuration d'hôte dans le champ admincluster.ipblockfilepath. Exemple :

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

admincluster.bigip.credentials

GKE On-Prem doit connaître l'adresse IP ou le nom d'hôte, le nom d'utilisateur et le mot de passe de l'équilibreur de charge F5 BIG-IP. Définissez les valeurs sous admincluster.bigip pour fournir ces informations. Exemple :

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

admincluster.bigip.partition

Vous avez précédemment créé une partition BIG-IP pour votre cluster d'administrateur. Définissez admincluster.bigip.partition sur le nom de votre partition. Exemple :

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

admincluster.vips

Définissez la valeur de admincluster.vips.controlplanevip sur l'adresse IP que vous avez choisi de configurer sur l'équilibreur de charge pour le serveur d'API Kubernetes du cluster d'administrateur. Définissez la valeur de ingressvip sur l'adresse IP que vous avez choisi de configurer dans l'équilibreur de charge pour le service d'entrée du cluster d'administrateur. Exemple :

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

admincluster.serviceiprange et admincluster.podiprange

Le cluster d'administrateur doit disposer d'une plage d'adresses IP à utiliser pour les services et d'une plage d'adresses IP à utiliser pour les pods. Ces plages sont spécifiées par les champs admincluster.serviceiprange et admincluster.podiprange. Ces champs sont renseignés lorsque vous exécutez gkectl create-config. Si vous le souhaitez, vous pouvez remplacer les valeurs renseignées par celles de votre choix.

Les plages de services et de pods ne doivent pas se chevaucher. En outre, les plages de services et de pods ne doivent pas chevaucher les adresses IP utilisées pour les nœuds d'un cluster.

Exemple :

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

usercluster.bigip.partition

Vous avez précédemment créé une partition BIG-IP pour votre cluster d'utilisateur. Définissez usercluster.bigip.partition sur le nom de votre partition. Exemple :

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

usercluster.vips

Définissez la valeur de usercluster.vips.controlplanevip sur l'adresse IP que vous avez choisi de configurer sur l'équilibreur de charge pour le serveur d'API Kubernetes du cluster d'utilisateur. Définissez la valeur de ingressvip sur l'adresse IP que vous avez choisi de configurer dans l'équilibreur de charge pour le service d'entrée du cluster d'utilisateur. Exemple :

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

usercluster.serviceiprange et usercluster.podiprange

Le cluster d'utilisateur doit disposer d'une plage d'adresses IP à utiliser pour les services et d'une plage d'adresses IP à utiliser pour les pods. Ces plages sont spécifiées par les champs usercluster.serviceiprange et usercluster.podiprange. Ces champs sont renseignés lorsque vous exécutez gkectl create-config. Si vous préférez, vous pouvez remplacer les valeurs renseignées par les valeurs de votre choix.

Les plages de services et de pods ne doivent pas se chevaucher. En outre, les plages de services et de pods ne doivent pas chevaucher les adresses IP utilisées pour les nœuds d'un cluster.

Exemple :

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

Désactiver les règles anti-affinité VMware DRS

Depuis la version 1.1.0-gke.6, GKE On-Prem crée automatiquement des règles anti-affinité VMware Distributed Resource Scheduler (DRS) pour les nœuds de votre cluster d'utilisateur. Ceux-ci sont ainsi répartis sur au moins trois hôtes physiques dans votre centre de données. Depuis la version 1.1.0-gke.6, cette fonctionnalité est automatiquement activée pour les nouveaux clusters et pour les clusters existants.

Cette fonctionnalité nécessite que votre environnement vSphere remplisse les conditions suivantes :

  • La fonctionnalité VMware DRS est activée. VMware DRS nécessite l'édition de licence vSphere Enterprise Plus. Pour en savoir plus sur l'activation de DRS, consultez l'article Enabling VMware DRS in a cluster (Activer VMware DRS dans un cluster).
  • Le compte utilisateur vSphere fourni dans le champ vcenter dispose de l'autorisation Host.Inventory.EditCluster.
  • Au moins trois hôtes physiques sont disponibles.

Rappelez-vous que si vous disposez d'une licence vSphere standard, vous ne pouvez pas activer VMware DRS.

Si vous n'avez pas activé DRS ou si vous n'avez pas au moins trois hôtes sur lesquels les VM vSphere peuvent être planifiées, ajoutez usercluster.antiaffinitygroups.enabled: false à votre fichier de configuration. Exemple :

usercluster:
  ...
  antiaffinitygroups:
    enabled: false

gkeconnect

La spécification gkeconnect contient les informations dont GKE On-Prem a besoin pour configurer la gestion de vos clusters sur site à partir de Google Cloud Console.

Définissez gkeconnect.projectid sur l'ID du projet Google Cloud dans lequel vous souhaitez gérer vos clusters sur site.

Définissez la valeur de gkeconnect.registerserviceaccountkeypath sur le chemin d'accès du fichier de clé JSON pour votre compte de service d'enregistrement. Définissez la valeur de gkeconnect.agentserviceaccountkeypath sur le chemin d'accès du fichier de clé JSON pour votre compte de service de connexion.

Exemple :

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

stackdriver

La spécification stackdriver contient les informations dont GKE On-Prem a besoin pour stocker les entrées de journal générées par vos clusters sur site.

Définissez stackdriver.projectid sur l'ID du projet Google Cloud que vous souhaitez associer à la suite d'opérations de Google Cloud. Connect exporte les journaux de cluster depuis Stackdriver via ce projet.

Définissez stackdriver.clusterlocation sur une région Google Cloud dans laquelle vous souhaitez stocker les journaux. Nous vous recommandons de choisir une région à proximité de votre centre de données sur site.

Définissez stackdriver.proxyconfigsecretname sur un secret Kubernetes que vous définissez dans l'espace de noms kube-system. Ce secret doit disposer d'une seule valeur définissant https_proxy_url. Le secret stackdriver-proxy-config par défaut est immuable et est utilisé à titre d'exemple.

Définissez stackdriver.enablevpc sur true si le réseau de votre cluster est contrôlé par un VPC. Ainsi, toute la télémétrie passe par les adresses IP restreintes de Google.

Définissez stackdriver.serviceaccountkeypath sur le chemin du fichier de clé JSON pour votre compte de service de la suite d'opérations Google Cloud.

Exemple :

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

gcrkeypath

Définissez la valeur de gcrkeypath sur le chemin du fichier de clé JSON pour votre compte de service sur liste d'autorisation. Par exemple : Remarque : Pour en savoir plus sur cette commande, consultez la section Exécuter des vérifications en amont.

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

Valider le fichier de configuration

Après avoir modifié le fichier de configuration, exécutez gkectl check-config pour vérifier que le fichier est valide et peut être utilisé pour l'installation :

gkectl check-config --config config.yaml

Si la commande renvoie des messages FAILURE, corrigez les problèmes et validez à nouveau le fichier.

Si vous souhaitez ignorer les validations les plus longues, transmettez l'option --fast. Pour ignorer des validations individuelles, utilisez les options --skip-validation-xxx. Pour en savoir plus sur la commande check-config, consultez la page Exécuter des vérifications préliminaires.

Exécuter gkectl prepare

Exécutez gkectl prepare pour initialiser votre environnement vSphere :

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

Créer les clusters d'administrateur et d'utilisateur

Créez le cluster d'administrateur et le cluster d'utilisateur :

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

La commande gkectl create cluster crée un fichier nommé kubeconfig dans le répertoire actuel. La documentation GKE On-Prem utilise l'espace réservé [ADMIN_CLUSTER_KUBECONFIG] pour faire référence à ce fichier.

Pour vérifier que le cluster d'administrateur a été créé, entrez la commande suivante :

kubectl get nodes --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]

Le résultat indique les nœuds du cluster d'administrateur.

La commande gkectl create cluster crée un fichier nommé init-user-cluster-kubeconfig dans le répertoire actuel. La documentation GKE On-Prem utilise l'espace réservé [USER_CLUSTER_KUBECONFIG] pour faire référence à ce fichier.

Pour vérifier que le cluster d'utilisateur a été créé, saisissez la commande suivante :

kubectl get nodes --kubeconfig [USER_CLUSTER_KUBECONFIG]

Le résultat affiche les nœuds du cluster d'utilisateur. Exemple :

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