Cette article explique comment personnaliser la configuration d'un cluster d'utilisateur GKE sur AWS.
Vous pourriez souhaiter créer un cluster d'utilisateur personnalisé pour les raisons suivantes :
- Créer un autre cluster pour un environnement de préproduction ou de test
- Ajouter des pools de nœuds avec différents types de machines
- Créer un cluster dans des zones de disponibilité AWS spécifiques
Avant de commencer
Avant de commencer à utiliser GKE sur AWS, veillez à effectuer les tâches suivantes :
- Remplissez les conditions préalables.
Installez un service de gestion.
Si vous souhaitez créer un cluster sans utiliser
terraform output example_cluster
, disposez de sous-réseaux AWS privés pour votre plan de contrôle. Chaque sous-réseau doit appartenir à une zone de disponibilité différente dans la même région AWS. Les tables de routage doivent être configurées de façon à autoriser le trafic entre des sous-réseaux privés, et chaque sous-réseau doit avoir accès à une passerelle NAT.Vous devez disposez de votre ID de cloud privé virtuel (VPC) AWS. Un ID de VPC ressemble à
vpc-012345678abcde
. Cet ID figure dans la console AWS.
Pour vous connecter à vos ressources GKE sur AWS, suivez les instructions suivantes. Indiquez si vous disposez d'un VPC AWS (ou d'une connexion directe à votre VPC) ou si vous avez créé un VPC dédié lors de la création de votre service de gestion.
VPC existant
Si vous disposez d'une connexion directe ou VPN à un VPC existant, omettez la ligne env HTTP_PROXY=http://localhost:8118
des commandes de cette rubrique.
VPC dédié
Lorsque vous créez un service de gestion dans un VPC dédié, GKE sur AWS inclut un hôte bastion placé dans un sous-réseau public.
Pour vous connecter à votre service de gestion, procédez comme suit :
Accédez au répertoire contenant votre configuration GKE sur AWS. Vous avez créé ce répertoire lors de l'installation du service de gestion.
cd anthos-aws
Pour ouvrir le tunnel, exécutez le script
bastion-tunnel.sh
. Le tunnel est transféré verslocalhost:8118
.Pour ouvrir un tunnel vers l'hôte bastion, exécutez la commande suivante :
./bastion-tunnel.sh -N
Les messages en provenance du tunnel SSH s'affichent dans cette fenêtre. Lorsque vous êtes prêt à fermer la connexion, arrêtez le processus à l'aide du raccourci Ctrl+C ou en fermant la fenêtre.
Ouvrez un nouveau terminal et accédez au répertoire
anthos-aws
.cd anthos-aws
Vérifiez que vous êtes en mesure de vous connecter au cluster à l'aide de
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
La sortie inclut l'URL du serveur d'API du service de gestion.
Sélectionner une taille d'instance de plan de contrôle
GKE sur AWS n'est pas compatible avec le redimensionnement des instances de plan de contrôle. Avant de créer votre cluster d'utilisateur, sélectionnez la taille d'instance de vos plans de contrôle. La taille du plan de contrôle dépend du nombre de nœuds du cluster. Le tableau suivant contient les tailles d'instance de plan de contrôle recommandées pour différentes tailles de cluster.
Taille du cluster (nœuds) | Type d'instance de plan de contrôle |
---|---|
1 – 10 | m5.large |
11 – 100 | m5.xlarge |
101 – 200 | m5.2xlarge |
Créer un cluster avec une configuration personnalisée
Vous pouvez utiliser terraform output example_cluster
afin de créer une configuration pour un cluster d'utilisateur par cluster de gestion. Si vous souhaitez créer des clusters supplémentaires, vous devez appliquer une configuration personnalisée.
Dans cet exemple, vous créez un cluster manuellement à partir des objets CRD AWSCluster
et AWSNodePool
.
Accédez au répertoire contenant votre configuration GKE sur AWS. Vous avez créé ce répertoire lors de l'installation du service de gestion.
cd anthos-aws
À partir de votre répertoire
anthos-aws
, utilisezanthos-gke
pour basculer vers le contexte de votre service de gestion.cd anthos-aws anthos-gke aws management get-credentials
Ouvrez un éditeur de texte et copiez la définition
AWSCluster
suivante dans un fichier nommécustom-cluster.yaml
.apiVersion: multicloud.cluster.gke.io/v1 kind: AWSCluster metadata: name: CLUSTER_NAME spec: region: AWS_REGION networking: vpcID: VPC_ID podAddressCIDRBlocks: POD_ADDRESS_CIDR_BLOCKS serviceAddressCIDRBlocks: SERVICE_ADDRESS_CIDR_BLOCKS ServiceLoadBalancerSubnetIDs: SERVICE_LOAD_BALANCER_SUBNETS controlPlane: version: CLUSTER_VERSION # Latest version is 1.25.5-gke.2100 instanceType: AWS_INSTANCE_TYPE keyName: SSH_KEY_NAME subnetIDs: - CONTROL_PLANE_SUBNET_IDS securityGroupIDs: - CONTROL_PLANE_SECURITY_GROUPS iamInstanceProfile: CONTROL_PLANE_IAM_ROLE rootVolume: sizeGiB: ROOT_VOLUME_SIZE volumeType: ROOT_VOLUME_TYPE # Optional iops: ROOT_VOLUME_IOPS # Optional kmsKeyARN: ROOT_VOLUME_KEY # Optional etcd: mainVolume: sizeGiB: ETCD_VOLUME_SIZE volumeType: ETCD_VOLUME_TYPE # Optional iops: ETCD_VOLUME_IOPS # Optional kmsKeyARN: ETCD_VOLUME_KEY # Optional databaseEncryption: kmsKeyARN: ARN_OF_KMS_KEY hub: # Optional membershipName: ANTHOS_CONNECT_NAME cloudOperations: # Optional projectID: YOUR_PROJECT location: GCP_REGION enableLogging: ENABLE_LOGGING enableMonitoring: ENABLE_MONITORING workloadIdentity: # Optional oidcDiscoveryGCSBucket: WORKLOAD_IDENTITY_BUCKET
Remplacez l'élément suivant :
- CLUSTER_NAME : nom du cluster
AWS_REGION : région AWS dans laquelle le cluster s'exécute.
VPC_ID : ID du VPC dans lequel votre cluster s'exécute.
POD_ADDRESS_CIDR_BLOCKS : plage d'adresses IPv4 utilisées par les pods du cluster. Actuellement, une seule plage est acceptée. La plage ne doit chevaucher aucun sous-réseau accessible depuis votre réseau. Vous pouvez utiliser la même plage en toute sécurité sur plusieurs objets AWSCluster différents. Exemple :
10.2.0.0/16
SERVICE_ADDRESS_CIDR_BLOCKS : plage d'adresses IPv4 utilisées par les services du cluster. Actuellement, une seule plage est acceptée. La plage ne doit chevaucher aucun sous-réseau accessible depuis votre réseau. Vous pouvez utiliser la même plage en toute sécurité sur plusieurs objets AWSCluster différents. Exemple :
10.1.0.0/16
SERVICE_LOAD_BALANCER_SUBNETS : ID de sous-réseau où GKE sur AWS peut créer des équilibreurs de charge publics ou privés.
CLUSTER_VERSION : version de Kubernetes compatible avec GKE sur AWS. La version la plus récente est 1.25.5-gke.2100.
AWS_INSTANCE_TYPE : type d'instance EC2 compatible.
SSH_KEY_NAME : paire de clé AWS EC2.
CONTROL_PLANE_SUBNET_IDS : ID de sous-réseau dans les zones de disponibilité où vos instances de plan de contrôle sont exécutées.
CONTROL_PLANE_SECURITY_GROUPS : ID de groupe de sécurité créé lors de l'installation du service de gestion. Vous pouvez personnaliser ce paramètre en ajoutant tous les identifiants de groupe de sécurité requis pour la connexion au plan de contrôle.
CONTROL_PLANE_IAM_PROFILE : nom du profil d'instance AWS EC2 attribué aux instances dupliquées du plan de contrôle.
ROOT_VOLUME_SIZE : taille, en gibioctet (Gio) des volumes racines de votre plan de contrôle.
ROOT_VOLUME_TYPE par le type de volume EBS. Par exemple,
gp3
.ROOT_VOLUME_IOPS par le nombre d'opérations d'E/S par seconde (IOPS) provisionné pour le volume. Valable uniquement lorsque la valeur de
volumeType
estGP3
. Pour plus d'informations, consultez la section Volumes SSD à usage général (gp3).ROOT_VOLUME_KEY par le nom de ressource Amazon de la clé KMS AWS qui chiffre les volumes racine de votre instance de plan de contrôle.
ETCD_VOLUME_SIZE : taille des volumes utilisés par etcd.
ETCD_VOLUME_TYPE par le type de volume EBS. Par exemple,
gp3
.ETCD_VOLUME_IOPS par le nombre d'opérations d'E/S par seconde (IOPS) provisionné pour le volume. Valable uniquement lorsque la valeur de
volumeType
estgp3
. Pour plus d'informations, consultez la section Volumes SSD à usage général (gp3).ETCD_VOLUME_KEY par le nom de ressource Amazon de la clé KMS AWS qui chiffre les volumes de données etcd de votre plan de contrôle.
ARN_OF_KMS_KEY : clé AWS KMS utilisée pour chiffrer les secrets du cluster.
ANTHOS_CONNECT_NAME : nom d'appartenance Connect utilisé pour enregistrer votre cluster. Le nom de l'appartenance doit être unique. Par exemple,
projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME
, oùYOUR_PROJECT
est votre projet Google Cloud etCLUSTER_NAME
est un nom unique dans votre projet. Ce champ est facultatif.YOUR_PROJECT : ID de votre projet.
GCP_REGION : région Google Cloud dans laquelle vous souhaitez stocker les journaux. Choisissez une région proche de la région AWS. Pour plus d'informations, consultez la section Emplacements mondiaux – Régions et zones. Vous pouvez, par exemple, opter pour la région
us-central1
.ENABLE_LOGGING :
true
oufalse
, pour indiquer si Cloud Logging doit être activé ou non sur les nœuds du plan de contrôle.ENABLE_MONITORING :
true
oufalse
, pour indiquer si Cloud Monitoring doit être activé ou non sur les nœuds du plan de contrôle.WORKLOAD_IDENTITY_BUCKET : nom du bucket Cloud Storage contenant vos informations de découverte Workload Identity. Ce champ est facultatif.
Créez un ou plusieurs pools AWSNodePools pour votre cluster. Ouvrez un éditeur de texte et copiez la définition AWSCluster suivante dans un fichier nommé
custom-nodepools.yaml
.apiVersion: multicloud.cluster.gke.io/v1 kind: AWSNodePool metadata: name: NODE_POOL_NAME spec: clusterName: AWSCLUSTER_NAME version: CLUSTER_VERSION # latest version is 1.25.5-gke.2100 region: AWS_REGION subnetID: AWS_SUBNET_ID minNodeCount: MINIMUM_NODE_COUNT maxNodeCount: MAXIMUM_NODE_COUNT maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT instanceType: AWS_NODE_TYPE keyName: KMS_KEY_PAIR_NAME iamInstanceProfile: NODE_IAM_PROFILE proxySecretName: PROXY_SECRET_NAME rootVolume: sizeGiB: ROOT_VOLUME_SIZE volumeType: VOLUME_TYPE # Optional iops: IOPS # Optional kmsKeyARN: NODE_VOLUME_KEY # Optional
Remplacez l'élément suivant :
- NODE_POOL_NAME : un nom unique pour votre pool AWSNodePool ;
- AWSCLUSTER_NAME : nom du cluster AWSCluster. Exemple :
staging-cluster
. - CLUSTER_VERSION: GKE compatible avec Kubernetes sur AWS version.
- AWS_REGION : même région AWS que votre AWSCluster.
- AWS_SUBNET_ID : sous-réseau AWS situé dans la même région que votre cluster AWS.
- MINIMUM_NODE_COUNT : nombre minimal de nœuds dans le pool de nœuds. Pour en savoir plus, consultez la page Procéder au scaling des clusters d'utilisateur.
- MAXIMUM_NODE_COUNT : nombre maximal de nœuds dans le pool de nœuds.
- MAXIMUM_PODS_PER_NODE_COUNT : nombre maximal de pods que GKE sur AWS peut attribuer à un nœud.
- AWS_NODE_TYPE : un type d'instance AWS EC2.
- KMS_KEY_PAIR_NAME : Paire de clés KMS AWS attribuée à chaque nœud de calcul de pool de nœuds.
- NODE_IAM_PROFILE : Nom du profil d'instance AWS EC2 attribué aux nœuds du pool.
- ROOT_VOLUME_SIZE : taille, en gibioctet (Gio) des volumes racines de votre plan de contrôle.
- VOLUME_TYPE : type de volume EBS AWS du nœud.
Par exemple,
gp3
. - IOPS : nombre d'opérations d'E/S par seconde (IOPS) provisionné pour les volumes. Valable uniquement lorsque la valeur de
volumeType
estgp3
. - NODE_VOLUME_KEY : ARN de la clé KMS AWS utilisée pour chiffrer le volume. Pour plus d'informations, consultez la page Utiliser des clés gérées par le client (CMK) pour chiffrer des volumes.
Appliquez les fichiers manifeste à votre service de gestion.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f custom-cluster.yaml env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f custom-nodepools.yaml
Créer un fichier kubeconfig
Pendant le démarrage de votre cluster d'utilisateur, vous pouvez créer un contexte kubeconfig
pour votre nouveau cluster d'utilisateur. Vous utilisez ce contexte pour vous authentifier auprès d'un utilisateur ou d'un cluster de gestion.
Utilisez
anthos-gke aws clusters get-credentials
pour générer un objetkubeconfig
pour votre cluster d'utilisateur dans~/.kube/config
.env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Remplacez CLUSTER_NAME par le nom de votre cluster. Exemple :
cluster-0
.Utilisez
kubectl
pour vous authentifier auprès de votre nouveau cluster d'utilisateur.env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
Si votre cluster est prêt, le résultat inclut les URL des composants Kubernetes qu'il contient.
Afficher l'état de votre cluster
Le service de gestion provisionne les ressources AWS lorsque vous appliquez un élément AWSCluster
ou AWSNodePool
.
À partir de votre répertoire
anthos-aws
, utilisezanthos-gke
pour basculer vers le contexte de votre service de gestion.cd anthos-aws anthos-gke aws management get-credentials
Pour répertorier vos clusters, utilisez
kubectl get AWSClusters
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSClusters
Le résultat inclut le nom, l'état, l'âge, la version et le point de terminaison de chaque cluster.
Par exemple, le résultat suivant n'inclut qu'un seul
AWSCluster
nommécluster-0
:NAME STATE AGE VERSION ENDPOINT cluster-0 Provisioning 2m41s 1.25.5-gke.2100 gke-xyz.elb.us-east-1.amazonaws.com
Afficher les événements de votre cluster
Pour afficher les événements Kubernetes récents de votre cluster d'utilisateur, utilisez kubectl get events
.
À partir de votre répertoire
anthos-aws
, utilisezanthos-gke
pour basculer vers le contexte de votre service de gestion.cd anthos-aws anthos-gke aws management get-credentials
Exécutez
kubectl get events
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get events
Le résultat inclut des informations, des avertissements et des erreurs liés à votre service de gestion.
Supprimer un cluster d'utilisateur
Pour supprimer un cluster d'utilisateur, procédez comme suit :
À partir de votre répertoire
anthos-aws
, utilisezanthos-gke
pour basculer vers le contexte de votre service de gestion.cd anthos-aws anthos-gke aws management get-credentials
Exécutez la commande
kubectl delete
pour supprimer le fichier manifeste contenant vos clusters utilisateur.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f CLUSTER_FILE
Remplacez CLUSTER_FILE par le nom du fichier manifeste contenant vos objets AWScluster et AWSNodePool. Exemple :
cluster-0.yaml
Supprimer tous les clusters utilisateur
Pour supprimer tous vos clusters utilisateur, procédez comme suit :
À partir de votre répertoire
anthos-aws
, utilisezanthos-gke
pour basculer vers le contexte de votre service de gestion.cd anthos-aws anthos-gke aws management get-credentials
Utilisez
kubectl delete
pour supprimer vos AWSNodePools et AWSClusters de votre service de gestion.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete AWSNodePool --all env HTTPS_PROXY=http://localhost:8118 \ kubectl delete AWSCluster --all
Pour en savoir plus, consultez la section Désinstaller GKE sur AWS.
Étapes suivantes
Configurez votre fournisseur d'identité avec GKE Identity Service.
Lancez votre première charge de travail sur GKE sur AWS.
Créez un déploiement externe à l'aide d'un équilibreur de charge ou d'un objet Ingress.
Consultez les spécifications des définitions de ressources personnalisées AWSCluster et AWSNodePool.