En este tema se describe cómo personalizar la configuración de un clúster de usuario de GKE en AWS.
Puede crear un clúster de usuarios personalizado por los siguientes motivos:
- Crear otro clúster para un entorno de pruebas o de desarrollo.
- Añadir grupos de nodos con diferentes tipos de máquinas.
- Crear un clúster en zonas de disponibilidad (AZ) de AWS específicas.
Antes de empezar
Antes de empezar a usar GKE en AWS, asegúrate de haber completado las siguientes tareas:
- Completa los requisitos previos.
Instala un servicio de gestión.
Si quieres crear un clúster sin usar
terraform output example_cluster
, debes tener subredes privadas de AWS para tu plano de control. Cada subred debe pertenecer a una zona de disponibilidad diferente de la misma región de AWS. Las tablas de rutas deben configurarse para permitir el tráfico entre subredes privadas, y cada subred debe tener acceso a una pasarela NAT.Tener el ID de tu nube privada virtual (VPC) de AWS. Un ID de VPC tiene el siguiente formato:
vpc-012345678abcde
. Puedes encontrar tu ID de VPC en la consola de AWS.
Para conectarte a tus recursos de GKE en AWS, sigue estos pasos. Selecciona si tienes una VPC de AWS (o una conexión directa a tu VPC) o si has creado una VPC específica al crear tu servicio de gestión.
VPC ya creada
Si tienes una conexión directa o VPN a una VPC, omite la línea env HTTP_PROXY=http://localhost:8118
de los comandos de este tema.
VPC dedicada
Cuando creas un servicio de gestión en una VPC dedicada, GKE en AWS incluye un host bastión en una subred pública.
Para conectarte a tu servicio de gestión, sigue estos pasos:
Cambia al directorio con tu configuración de GKE en AWS. Has creado este directorio al instalar el servicio de gestión.
cd anthos-aws
Para abrir el túnel, ejecuta la secuencia de comandos
bastion-tunnel.sh
. El túnel reenvía alocalhost:8118
.Para abrir un túnel al host bastion, ejecuta el siguiente comando:
./bastion-tunnel.sh -N
Los mensajes del túnel SSH aparecen en esta ventana. Cuando quieras cerrar la conexión, detén el proceso con Control+C o cierra la ventana.
Abre una terminal nueva y ve al directorio
anthos-aws
.cd anthos-aws
Comprueba que puedes conectarte al clúster con
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
La salida incluye la URL del servidor de la API del servicio de gestión.
Seleccionar el tamaño de una instancia del plano de control
GKE en AWS no admite el cambio de tamaño de las instancias del plano de control. Antes de crear el clúster de usuarios, selecciona el tamaño de instancia de los planos de control. El tamaño del plano de control depende del número de nodos del clúster. En la siguiente tabla se incluyen los tamaños de instancia del plano de control recomendados para distintos tamaños de clúster.
Tamaño del clúster (nodos) | Tipo de instancia del plano de control |
---|---|
De 1 a 10 | m5.large |
11-100 | m5.xlarge |
101-200 | m5.2xlarge |
Crear un clúster con una configuración personalizada
Puedes usar
terraform output example_cluster
para crear la configuración de un clúster de usuario por cada clúster de gestión. Si quieres crear clústeres adicionales, debes aplicar una configuración personalizada.
En este ejemplo, crearás un clúster manualmente a partir de los CRDs AWSCluster
y AWSNodePool
.
Cambia al directorio con tu configuración de GKE en AWS. Has creado este directorio al instalar el servicio de gestión.
cd anthos-aws
En tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu servicio de gestión.cd anthos-aws anthos-gke aws management get-credentials
Abre un editor de texto y copia la siguiente definición de
AWSCluster
en un archivo llamadocustom-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
Haz los cambios siguientes:
- CLUSTER_NAME: el nombre de tu clúster.
AWS_REGION: la región de AWS en la que se ejecuta el clúster.
VPC_ID: el ID de la VPC en la que se ejecuta el clúster.
POD_ADDRESS_CIDR_BLOCKS: el intervalo de direcciones IPv4 que usan los pods del clúster. Actualmente, solo se admite un intervalo. El intervalo no se puede solapar con ninguna subred accesible desde tu red. Es seguro usar el mismo intervalo en varios objetos AWSCluster diferentes. Por ejemplo,
10.2.0.0/16
.SERVICE_ADDRESS_CIDR_BLOCKS: el intervalo de direcciones IPv4 que usan los servicios del clúster. Actualmente, solo se admite un intervalo. El intervalo no debe solaparse con ninguna subred accesible desde tu red. Puedes usar el mismo intervalo en varios objetos AWSCluster sin problemas. Por ejemplo,
10.1.0.0/16
.SERVICE_LOAD_BALANCER_SUBNETS: los IDs de las subredes en las que GKE en AWS puede crear balanceadores de carga públicos o privados.
CLUSTER_VERSION: a versión de Kubernetes compatible con GKE en AWS. La versión más reciente es la 1.25.5-gke.2100.
AWS_INSTANCE_TYPE: un tipo de instancia de EC2 admitido.
SSH_KEY_NAME: un par de claves de AWS EC2.
CONTROL_PLANE_SUBNET_IDS: los IDs de subred de las zonas de disponibilidad en las que se ejecutan las instancias del plano de control.
CONTROL_PLANE_SECURITY_GROUPS: un securityGroupID creado durante la instalación del servicio de gestión. Para personalizarlo, añade los securityGroupIDs necesarios para conectarte al plano de control.
CONTROL_PLANE_IAM_PROFILE: nombre de la instancia de AWS EC2 perfil asignado a las réplicas del plano de control.
ROOT_VOLUME_SIZE: tamaño, en gibibytes (GiB), de los volúmenes raíz del plano de control.
ROOT_VOLUME_TYPE con el tipo de volumen de EBS. Por ejemplo,
gp3
.ROOT_VOLUME_IOPS con la cantidad de operaciones de E/S aprovisionadas por segundo (IOPS) del volumen. Solo es válido cuando
volumeType
esGP3
. Para obtener más información, consulta Volúmenes SSD de uso general (gp3).ROOT_VOLUME_KEY con el nombre de recurso de Amazon de la clave de AWS KMS que cifra los volúmenes raíz de la instancia del plano de control.
ETCD_VOLUME_SIZE: el tamaño de los volúmenes que usa etcd.
ETCD_VOLUME_TYPE con el tipo de volumen de EBS. Por ejemplo,
gp3
.ETCD_VOLUME_IOPS con la cantidad de operaciones de E/S aprovisionadas por segundo (IOPS) del volumen. Solo es válido cuando
volumeType
esgp3
. Para obtener más información, consulta Volúmenes SSD de uso general (gp3).ETCD_VOLUME_KEY con el nombre de recurso de Amazon de la clave de AWS KMS que cifra los volúmenes de datos de etcd del plano de control.
ARN_OF_KMS_KEY: la clave de KMS de AWS que se usa para cifrar los secretos del clúster.
ANTHOS_CONNECT_NAME: el nombre de miembro de Connect que se usa para registrar el clúster. El nombre de la suscripción debe ser único. Por ejemplo,
projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME
, dondeYOUR_PROJECT
es tu Google Cloud proyecto yCLUSTER_NAME
es un nombre único en tu proyecto. Este campo es opcional.YOUR_PROJECT: tu ID de proyecto.
GCP_REGION: la Google Cloud región en la que quieres almacenar los registros. Elige una región cercana a la región de AWS. Para obtener más información, consulta Ubicaciones globales: regiones y zonas, como
us-central1
.ENABLE_LOGGING:
true
ofalse
, si Cloud Logging está habilitado en los nodos del plano de control.ENABLE_MONITORING:
true
ofalse
, si Cloud Monitoring está habilitado en los nodos del plano de control.WORKLOAD_IDENTITY_BUCKET: el nombre del segmento de Cloud Storage que contiene la información de detección de tu identidad de carga de trabajo. Este campo es opcional.
Crea uno o varios AWSNodePools para tu clúster. Abre un editor de texto y copia la siguiente definición de AWSCluster en un archivo llamado
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
Haz los cambios siguientes:
- NODE_POOL_NAME: nombre único de tu AWSNodePool.
- AWSCLUSTER_NAME: el nombre de tu AWSCluster. Por ejemplo,
staging-cluster
. - CLUSTER_VERSION: una versión de Kubernetes compatible con GKE en AWS.
- AWS_REGION: la misma región de AWS que tu AWSCluster.
- AWS_SUBNET_ID: una subred de AWS en la misma región que tu AWSCluster.
- MINIMUM_NODE_COUNT: número mínimo de nodos del grupo de nodos. Consulta más información sobre cómo escalar clústeres de usuarios.
- MAXIMUM_NODE_COUNT: número máximo de nodos del grupo de nodos.
- MAXIMUM_PODS_PER_NODE_COUNT: número máximo de pods que GKE en AWS puede asignar a un nodo.
- AWS_NODE_TYPE: un tipo de instancia de AWS EC2.
- KMS_KEY_PAIR_NAME: el par de claves de KMS de AWS asignado a cada trabajador del grupo de nodos.
- NODE_IAM_PROFILE: nombre del perfil de instancia de AWS EC2 asignado a los nodos del grupo.
- ROOT_VOLUME_SIZE: tamaño, en gibibytes (GiB), de los volúmenes raíz del plano de control.
- VOLUME_TYPE: el tipo de volumen de EBS de AWS del nodo.
Por ejemplo,
gp3
. - IOPS: la cantidad de operaciones de entrada/salida por segundo (IOPS) aprovisionadas para los volúmenes. Solo es válido cuando
volumeType
esgp3
. - NODE_VOLUME_KEY: el ARN de la clave de KMS de AWS que se usa para cifrar el volumen. Para obtener más información, consulta Usar una CMK gestionada por el cliente para cifrar volúmenes.
Aplica los manifiestos a tu servicio de gestión.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f custom-cluster.yaml env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f custom-nodepools.yaml
Crear un archivo kubeconfig
Mientras se inicia el clúster de usuarios, puedes crear un contexto kubeconfig
para el nuevo clúster de usuarios. El contexto se usa para autenticar a un usuario o a un clúster de gestión.
Usa
anthos-gke aws clusters get-credentials
para generar unkubeconfig
para tu clúster de usuarios en~/.kube/config
.env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Sustituye CLUSTER_NAME por el nombre de tu clúster. Por ejemplo,
cluster-0
.Usa
kubectl
para autenticarte en tu nuevo clúster de usuarios.env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
Si el clúster está listo, el resultado incluye las URLs de los componentes de Kubernetes del clúster.
Ver el estado de un clúster
El servicio de gestión aprovisiona recursos de AWS cuando aplicas un AWSCluster
o un AWSNodePool
.
En tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu servicio de gestión.cd anthos-aws anthos-gke aws management get-credentials
Para enumerar tus clústeres, usa
kubectl get AWSClusters
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSClusters
La salida incluye el nombre, el estado, la antigüedad, la versión y el endpoint de cada clúster.
Por ejemplo, el siguiente resultado solo incluye un
AWSCluster
llamadocluster-0
:NAME STATE AGE VERSION ENDPOINT cluster-0 Provisioning 2m41s 1.25.5-gke.2100 gke-xyz.elb.us-east-1.amazonaws.com
Ver los eventos de un clúster
Para ver los eventos de Kubernetes recientes de tu clúster de usuario, usa kubectl get events
.
En tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu servicio de gestión.cd anthos-aws anthos-gke aws management get-credentials
Ejecuta
kubectl get events
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get events
La salida incluye información, advertencias y errores relacionados con tu servicio de gestión.
Eliminar un clúster de usuarios
Para eliminar un clúster de usuarios, sigue estos pasos:
En tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu servicio de gestión.cd anthos-aws anthos-gke aws management get-credentials
Usa
kubectl delete
para eliminar el manifiesto que contiene tus clústeres de usuarios.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f CLUSTER_FILE
Sustituye CLUSTER_FILE por el nombre del manifiesto que contiene tus objetos AWSCluster y AWSNodePool. Por ejemplo,
cluster-0.yaml
.
Eliminar todos los clústeres de usuarios
Para eliminar todos tus clústeres de usuarios, sigue estos pasos:
En tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu servicio de gestión.cd anthos-aws anthos-gke aws management get-credentials
Usa
kubectl delete
para eliminar tus AWSNodePools y AWSClusters de tu servicio de gestión.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete AWSNodePool --all env HTTPS_PROXY=http://localhost:8118 \ kubectl delete AWSCluster --all
Para obtener más información, consulta el artículo sobre cómo desinstalar GKE on AWS.
Siguientes pasos
Configura tu proveedor de identidades con Identity Service para GKE.
Lanza tu primera carga de trabajo en GKE on AWS.
Crea un despliegue orientado al exterior mediante un balanceador de carga o un Ingress.
Consulta las especificaciones de las definiciones de recursos personalizados AWSCluster y AWSNodePool.