En este tema, se describe cómo personalizar la configuración de un clúster de usuarios de GKE on AWS.
Te recomendamos crear un clúster de usuario personalizado por las siguientes razones:
- Crear otro clúster para un entorno de prueba o de etapa de pruebas
- Agregar grupos de nodos con diferentes tipos de máquinas
- Crear un clúster en zonas de disponibilidad (AZ) específicas de AWS.
Antes de comenzar
Antes de comenzar a usar GKE on AWS, completa las siguientes tareas:
- Completar los requisitos
Instalar un servicio de administración
Si deseas crear un clúster sin usar
terraform output example_cluster
, debes tener subredes de AWS privadas para tu plano de control. Cada subred debe pertenecer a una AZ diferente en 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 puerta de enlace NAT.Ten tu ID de nube privada virtual (VPC) de AWS. El ID de la VPC es similar a este:
vpc-012345678abcde
. Puedes encontrarlo en AWS Console.
Para conectarte a tus recursos de GKE on AWS, realiza las siguientes instrucciones. Selecciona si tienes una VPC de AWS existente (o conexión directa a tu VPC) o si creaste una VPC dedicada cuando creaste tu servicio de administración.
VPC existente
Si tienes una conexión directa o de VPN con una VPC existente, omite la línea env HTTP_PROXY=http://localhost:8118
de los comandos en este tema.
VPC dedicada
Cuando creas un servicio de administración en una VPC dedicada, GKE on AWS incluye un host de bastión en una subred pública.
Para conectarte al servicio de administración, realiza los siguientes pasos:
Cambia al directorio con la configuración de GKE en AWS. Creaste este directorio cuando instalaste el servicio de administració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 de bastión, ejecuta el siguiente comando:
./bastion-tunnel.sh -N
Los mensajes del túnel SSH aparecen en esta ventana. Cuando estés listo para cerrar la conexión, detén el proceso mediante Control+C o cierra la ventana.
Abre una terminal nueva y cambia a tu directorio de
anthos-aws
.cd anthos-aws
Verifica que puedas conectarte al clúster con
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
El resultado incluye la URL para el servidor de API del servicio de administración.
Selecciona un tamaño de instancia de plano de control
GKE on AWS no admite el cambio de tamaño de las instancias del plano de control. Antes de crear tu clúster de usuario, selecciona el tamaño de instancia de tus planos de control. Los tamaños del plano de control dependen de la cantidad de nodos en el clúster. La siguiente tabla contiene los tamaños de instancia del plano de control recomendados para varios tamaños de clúster.
Tamaño del clúster (nodos) | Tipo de instancia del plano de control |
---|---|
1 – 10 | m5.large |
11 – 100 | m5.xlarge |
101 – 200 | m5.2xlarge |
Crea un clúster nuevo con una configuración personalizada
Puedes usar terraform output example_cluster
a fin de crear la configuración para un clúster de usuarios por clúster de administración. Si deseas crear clústeres adicionales, debes aplicar una configuración personalizada.
En este ejemplo, se crea un clúster de forma manual de las CRD de AWSCluster
y AWSNodePool
.
Cambia al directorio con la configuración de GKE en AWS. Creaste este directorio cuando instalaste el servicio de administración.
cd anthos-aws
Desde tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu servicio administrado.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
Reemplaza lo siguiente:
- CLUSTER_NAME: El nombre de tu clúster.
AWS_REGION: La región de AWS en la que se ejecuta tu clúster.
VPC_ID: El ID de la VPC en la que se ejecuta tu clúster.
POD_ADDRESS_CIDR_BLOCKS: El rango de direcciones IPv4 que usan los pods del clúster. Por el momento, se admite un solo rango. Este rango no debe superponerse con ninguna subred accesible desde tu red. Es seguro usar el mismo rango en diferentes objetos de AWSCluster. Por ejemplo,
10.2.0.0/16
SERVICE_ADDRESS_CIDR_BLOCKS: El rango de direcciones IPv4 que usan los servicios del clúster. Por el momento, se admite un solo rango. Este rango no debe superponerse con ninguna subred accesible desde tu red. Es seguro usar el mismo rango en diferentes objetos de AWSCluster. Por ejemplo,
10.1.0.0/16
SERVICE_LOAD_BALANCER_SUBNETS: Los ID de las subredes en las que GKE en AWS puede crear balanceadores de cargas públicos o privados.
CLUSTER_VERSION: Una versión de Kubernetes compatible con GKE en AWS. La versión más reciente es 1.25.5-gke.2100.
AWS_INSTANCE_TYPE: Un tipo de instancia EC2 compatible.
SSH_KEY_NAME: Un par de claves de EC2 de AWS.
CONTROL_PLANE_SUBNET_IDS: Los ID de subred de los AZ en los que se ejecutan las instancias del plano de control.
CONTROL_PLANE_SECURITY_GROUPS: Es un securityGroupID creado durante la instalación del servicio de administración. Si deseas personalizar esto, agrega cualquier securityGroupID requerido para conectarte al plano de control.
CONTROL_PLANE_IAM_PROFILE: El nombre del perfil de la instancia de EC2 de AWS asignado para controlar las réplicas del plano.
ROOT_VOLUME_SIZE: El tamaño, en gibibytes (GiB), de los volúmenes raíz del plano de control.
ROOT_VOLUME_TYPE por el tipo de volumen de EBS. Por ejemplo,
gp3
.ROOT_VOLUME_IOPS por la cantidad de operaciones de E/S aprovisionadas por segundo (IOPS) para el volumen. Solo es válido cuando
volumeType
esGP3
. Para obtener más información, consulta Volúmenes de uso general SSD (gp3).ROOT_VOLUME_KEY por el nombre de recurso de Amazon de la clave de AWS KMS que encripta 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 por el tipo de volumen de EBS. Por ejemplo,
gp3
.ETCD_VOLUME_IOPS por la cantidad de operaciones de E/S aprovisionadas por segundo (IOPS) para el volumen. Solo es válido cuando
volumeType
esgp3
. Para obtener más información, consulta Volúmenes de uso general SSD (gp3).ETCD_VOLUME_KEY por el nombre de recurso de Amazon de la clave de AWS KMS que encripta los volúmenes de datos etcd del plano de control.
ARN_OF_KMS_KEY: La clave de KMS de AWS que se usa para encriptar los Secrets del clúster.
ANTHOS_CONNECT_NAME: El nombre de la membresía de Connect que se usa para registrar tu clúster. El nombre de la membresía debe ser único. Por ejemplo,
projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME
, en el queYOUR_PROJECT
es tu proyecto de Google Cloud yCLUSTER_NAME
es un nombre único en tu proyecto. Este campo es opcional.YOUR_PROJECT: el ID de tu proyecto
GCP_REGION: Es la región de Google Cloud en la que deseas almacenar los registros. Elige una región ubicada cerca de la región de AWS. Para obtener más información, consulta Ubicaciones globales: Regiones y zonas, por ejemplo,
us-central1
.ENABLE_LOGGING:
true
ofalse
, si Cloud Logging está habilitado en nodos del plano de control.ENABLE_MONITORING:
true
ofalse
, si Cloud Monitoring está habilitado en nodos del plano de control.WORKLOAD_IDENTITY_BUCKET: El nombre del bucket de Cloud Storage que contiene la información de descubrimiento de Workload Identity. Este campo es opcional.
Crea uno o más 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
Reemplaza lo siguiente:
- NODE_POOL_NAME: Un nombre único para tu AWSNodePool.
- AWSCLUSTER_NAME: Es el nombre de tu AWSCluster. Por ejemplo,
staging-cluster
- CLUSTER_VERSION: Es una versión compatible de Kubernetes de 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: Es la cantidad mínima de trabajadores en el grupo de nodos. Consulta Escala clústeres de usuario para obtener más información.
- MAXIMUM_NODE_COUNT: La cantidad máxima de nodos en el grupo de nodos.
- MAXIMUM_PODS_PER_NODE_COUNT: Es la cantidad máxima de pods que GKE en AWS asignará a un nodo.
- AWS_NODE_TYPE: Es un tipo de instancia de EC2 en AWS.
- KMS_KEY_PAIR_NAME: Es el par de claves de AWS KMS asignado a cada trabajador del grupo de nodos.
- NODE_IAM_PROFILE: Es el nombre del perfil de la instancia de AWS EC2 asignado a los nodos del grupo.
- ROOT_VOLUME_SIZE: El 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 E/S aprovisionadas por segundo (IOPS) para el volumen Solo es válido cuando
volumeType
esgp3
. - NODE_VOLUME_KEY: el ARN de la clave de AWS KMS que se usa para encriptar el volumen. Si deseas obtener más información, consulta Usa una CMK administrada por el cliente para encriptar volúmenes.
Aplica los manifiestos a tu servicio de administració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
Crea un kubeconfig
Mientras se inicia el clúster de usuario, puedes crear un contexto kubeconfig
para el clúster de usuario nuevo. Usas el contexto para autenticarte en un usuario o clúster de administración.
Usa
anthos-gke aws clusters get-credentials
a fin de generar unkubeconfig
para el clúster de usuario en~/.kube/config
.env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Reemplaza CLUSTER_NAME por el nombre del clúster. Por ejemplo,
cluster-0
Usa
kubectl
para autenticarte en el clúster de usuario nuevo.env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
Si el clúster está listo, el resultado incluye las URL de los componentes de Kubernetes dentro del clúster.
Visualiza el estado del clúster
El servicio de administración aprovisiona recursos de AWS cuando aplicas un AWSCluster
o AWSNodePool
.
Desde tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu servicio administrado.cd anthos-aws anthos-gke aws management get-credentials
Para enumerar los clústeres, usa
kubectl get AWSClusters
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSClusters
El resultado incluye el nombre, el estado, la antigüedad, la versión y el extremo de cada clúster.
Por ejemplo, el siguiente resultado incluye solo 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
Consulta los eventos de tu clúster
Para ver los eventos de Kubernetes recientes de tu clúster de usuario, usa kubectl get events
.
Desde tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu servicio administrado.cd anthos-aws anthos-gke aws management get-credentials
Ejecuta
kubectl get events
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get events
El resultado incluye información, advertencias y errores relacionados con el servicio de administración.
Borra un clúster de usuario
Para borrar un clúster de usuario, realiza los siguientes pasos:
Desde tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu servicio administrado.cd anthos-aws anthos-gke aws management get-credentials
Usa
kubectl delete
para borrar el manifiesto que contiene los clústeres de usuario.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f CLUSTER_FILE
Reemplaza CLUSTER_FILE por el nombre del manifiesto que contiene tus objetos AWScluster y AWSNodePool. Por ejemplo,
cluster-0.yaml
.
Borra todos los clústeres de usuario
Para borrar todos tus clústeres de usuario, realiza los siguientes pasos:
Desde tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu servicio administrado.cd anthos-aws anthos-gke aws management get-credentials
Use
kubectl delete
para borrar sus AWSNodePools y AWSClusters de su servicio de administració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 Desinstala GKE on AWS.
¿Qué sigue?
Configura tu proveedor de identidad con GKE Identity Service.
Inicia tu primera carga de trabajo en GKE on AWS.
Crea una implementación externa mediante un balanceador de cargas o un Ingress.
Lee las especificaciones para las definiciones de recursos personalizados de AWSCluster y AWSNodePool.