Quiero crear varios grupos de nodos para los nodos de Amazon Elastic Kubernetes Service (Amazon EKS) mediante eksctl.
Resolución
Puedes crear un grupo de nodos mediante eksctl con parámetros predeterminados o con parámetros personalizados y un archivo de configuración para varios grupos de nodos.
Nota: Para instalar la versión más reciente de eksctl, consulta Installation options for Eksctl (Opciones de instalación de Eksctl).
Para confirmar que eksctl está configurado e instalado en tu máquina local, abre la terminal o línea de comandos que prefieras y ejecuta el siguiente comando:
eksctl version
A continuación, elige una de las siguientes resoluciones según el tipo de parámetros que desees utilizar.
Creación de un grupo de nodos con parámetros predeterminados
-
Para crear un grupo de nodos adicional con parámetros predeterminados, ejecuta este comando:
eksctl create nodegroup --cluster=CLUSTER_NAME --name=NODEGROUP_NAME --region REGION_NAME
Nota: Sustituye CLUSTER_NAME por el nombre de tu clúster, NODEGROUP_NAME por el nombre del grupo de nodos y REGION_NAME por tu región de AWS.
Los parámetros predeterminados son los siguientes:
Instance type = m5.largeAMI : latest AWS EKS AMI
Nodes-desired capacity = 2
Nodes-min capacity =2
Nodes-max capacity=2
Nota: De forma predeterminada, los nuevos grupos de nodos heredan la versión de Kubernetes del plano de control. Puedes especificar una versión diferente de Kubernetes (por ejemplo, version=1.27). Para usar la versión más reciente de Kubernetes, ejecuta el comando –version=latest.
-
Para confirmar que los nuevos grupos de nodos están asociados al clúster y comprobar que los nodos se han unido al clúster, ejecuta el siguiente comando:
kubectl get nodes
eksctl get nodegroups --cluster CLUSTER_NAME --region REGION_NAME
Nota: Sustituye CLUSTER_NAME por el nombre de tu clúster y REGION_NAME por tu región de AWS.
-
En el resultado, confirma que el estado del grupo de nodos es ACTIVE y que el estado del nodo es READY.
Ejemplo de estado de un grupo de nodos:
eksctl get nodegroups --cluster yourClusterName --region yourRegionName
CLUSTER NODEGROUP STATUS CREATED MIN SIZE MAX SIZE DESIRED CAPACITY INSTANCE TYPE IMAGE ID ASG NAME TYPE
clusterName example-workers ACTIVE 2023-10-28T14:30:00Z 2 2 2 m5.large AL2_x86_64 eks-example-workers-11223344 managed
Ejemplo de estado de nodo:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-192-168-100-101.us-west-2.compute.internal Ready <none> 4h v1.27.1-eks-1
ip-192-168-100-102.us-west-2.compute.internal Ready <none> 4h v1.27.1-eks-1
Creación de un grupo de nodos con parámetros personalizados
-
Define los parámetros del nuevo grupo de nodos en un archivo de configuración. Por ejemplo:
kind: ClusterConfig
apiVersion: eksctl.io/v1alpha5
metadata:
name: CLUSTER_NAME
region: REGION_NAME
nodeGroups:
- name: NODEGROUP_NAME
availabilityZones: ["AVAILABILITY_ZONE"]
desiredCapacity: 3
instanceType: m5.large
iam:
instanceProfileARN: "arn:aws:iam::444455556666:instance-profile/eks-nodes-base-role" #Attaching IAM role
instanceRoleARN: "arn:aws:iam::444455556666:role/eks-nodes-base-role"
privateNetworking: true
securityGroups:
withShared: true
withLocal: true
attachIDs: ['SECURITY_GROUP_ID']
ssh:
publicKeyName: 'KEY-PAIR-NAME'
kubeletExtraConfig:
kubeReserved:
cpu: "300m"
memory: "300Mi"
ephemeral-storage: "1Gi"
kubeReservedCgroup: "/kube-reserved"
systemReserved:
cpu: "300m"
memory: "300Mi"
ephemeral-storage: "1Gi"
tags:
'environment': 'development'
- name: ng-2-builders #example of a nodegroup that uses 50% spot instances and 50% on demand instances:
minSize: 2
maxSize: 5
instancesDistribution:
maxPrice: 0.017
instanceTypes: ["t3.small", "t3.medium"] # At least two instance types should be specified
onDemandBaseCapacity: 0
onDemandPercentageAboveBaseCapacity: 50
spotInstancePools: 2
tags:
'environment': 'production'
Nota: Sustituye CLUSTER_NAME por el nombre del clúster, REGION_NAME por la región de AWS y NODEGROUP_NAME por el nombre del grupo de nodos. SECURITY_GROUP_ID por el ID de tu grupo de seguridad, KEY_PAIR_NAME por el nombre de tu par de claves y AVAILABILITY_ZONE por tu zona de disponibilidad.
Para obtener más información sobre los parámetros compatibles y los tipos de grupos de nodos, consulta Grupos de nodos.
-
Para crear un grupo de nodos adicional con el archivo de configuración, ejecuta el siguiente comando:
eksctl create nodegroup --config-file=CONFIG_FILE
Nota: Sustituye CONFIG_FILE por el nombre del archivo de configuración.
-
(Opcional) El comando del paso 2 despliega una pila de AWS CloudFormation para crear recursos para el grupo de nodos de EKS. Para comprobar el estado de la pila, accede a la consola de CloudFormation y confirma que la región de AWS es la misma que la del clúster.
Cuando la pila esté en estado CREATE_COMPLETE, el comando eksctl se cierra correctamente.
-
Para confirmar que los nuevos grupos de nodos están asociados al clúster y comprobar que los nodos se han unido al clúster, ejecuta el siguiente comando:
kubectl get nodes
eksctl get nodegroups --cluster CLUSTER_NAME --region REGION_NAME
Nota: Sustituye CLUSTER_NAME por el nombre de tu clúster y REGION_NAME por tu región de AWS.
En el resultado, confirma que el estado del grupo de nodos es ACTIVE y que el estado del nodo es READY.
Ejemplo de estado de un grupo de nodos:
eksctl get nodegroups --cluster yourClusterName --region yourRegionName
CLUSTER NODEGROUP STATUS CREATED MIN SIZE MAX SIZE DESIRED CAPACITY INSTANCE TYPE IMAGE ID ASG NAME TYPE
clusterName example-workers ACTIVE 2023-10-28T14:30:00Z 2 2 3 m5.large AL2_x86_64 eks-example-workers-11223344 managed
Ejemplo de estado de nodo:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-192-168-100-101.us-west-2.compute.internal Ready <none> 4h v1.27.1-eks-1
ip-192-168-100-102.us-west-2.compute.internal Ready <none> 4h v1.27.1-eks-1
ip-192-168-100-103.us-west-2.compute.internal Ready <none> 4h v1.27.1-eks-1