Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Grupos de nodos gestionados por EKS
Los grupos de nodos gestionados por Amazon EKS son una función que automatiza el aprovisionamiento y la administración del ciclo de vida de los nodos (instanciasEC2 ) para los clústeres de Kubernetes de Amazon EKS. Los clientes pueden aprovisionar grupos de nodos optimizados para sus clústeres y EKS los mantendrá actualizados con las versiones más recientes de Kubernetes y del sistema operativo host.
Un grupo de nodos gestionado por EKS es un grupo de escalado automático e EC2 instancias asociadas que AWS administra para un clúster de Amazon EKS. Cada grupo de nodos utiliza la AMI Amazon Linux 2 optimizada para Amazon EKS. Amazon EKS facilita la aplicación de correcciones de errores y parches de seguridad a los nodos, así como su actualización a las versiones más recientes de Kubernetes. Cada grupo de nodos lanza un grupo de escalado automático para el clúster, que puede abarcar varias subredes y zonas de disponibilidad de VPC de AWS para lograr una alta disponibilidad.
NUEVA plantilla de lanzamiento: compatibilidad con grupos de nodos administrados
nota
El término «grupos de nodos no gestionados» se ha utilizado para referirse a los grupos de nodos que eksctl ha admitido desde el principio (representados mediante el campo). nodeGroups
El ClusterConfig
archivo sigue utilizando el nodeGroups
campo para definir los grupos de nodos no gestionados, y los grupos de nodos gestionados se definen con el campo. managedNodeGroups
Creación de grupos de nodos gestionados
$ eksctl create nodegroup
Nuevos clústeres
Para crear un clúster nuevo con un grupo de nodos gestionado, ejecute
eksctl create cluster
Para crear varios grupos de nodos gestionados y tener más control sobre la configuración, se puede utilizar un archivo de configuración.
nota
Los grupos de nodos administrados no tienen una paridad de funciones completa con los grupos de nodos no administrados.
# cluster.yaml # A cluster with two managed nodegroups --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 managedNodeGroups: - name: managed-ng-1 minSize: 2 maxSize: 4 desiredCapacity: 3 volumeSize: 20 ssh: allow: true publicKeyPath: ~/.ssh/ec2_id_rsa.pub # new feature for restricting SSH access to certain AWS security group IDs sourceSecurityGroupIds: ["sg-00241fbb12c607007"] labels: {role: worker} tags: nodegroup-role: worker iam: withAddonPolicies: externalDNS: true certManager: true - name: managed-ng-2 instanceType: t2.large minSize: 2 maxSize: 3
Es posible tener un clúster con grupos de nodos gestionados y no gestionados. Los grupos de nodos no administrados no aparecen en la consola EKS de AWS, pero eksctl get nodegroup
muestran ambos tipos de grupos de nodos.
# cluster.yaml # A cluster with an unmanaged nodegroup and two managed nodegroups. --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 nodeGroups: - name: ng-1 minSize: 2 managedNodeGroups: - name: managed-ng-1 minSize: 2 maxSize: 4 desiredCapacity: 3 volumeSize: 20 ssh: allow: true publicKeyPath: ~/.ssh/ec2_id_rsa.pub # new feature for restricting SSH access to certain AWS security group IDs sourceSecurityGroupIds: ["sg-00241fbb12c607007"] labels: {role: worker} tags: nodegroup-role: worker iam: withAddonPolicies: externalDNS: true certManager: true - name: managed-ng-2 instanceType: t2.large privateNetworking: true minSize: 2 maxSize: 3
NEW Support para AMI personalizadas, grupos de seguridadinstancePrefix
,instanceName
,ebsOptimized
,volumeType
,volumeName
,volumeEncrypted
,volumeKmsKeyID
,volumeIOPS
,maxPodsPerNode
,preBootstrapCommands
,overrideBootstrapCommand
, y disableIMDSv1
# cluster.yaml # A cluster with a managed nodegroup with customization. --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 managedNodeGroups: - name: custom-ng ami: ami-0e124de4755b2734d securityGroups: attachIDs: ["sg-1234"] maxPodsPerNode: 80 ssh: allow: true volumeSize: 100 volumeName: /dev/xvda volumeEncrypted: true # defaults to true, which enforces the use of IMDSv2 tokens disableIMDSv1: false overrideBootstrapCommand: | #!/bin/bash /etc/eks/bootstrap.sh managed-cluster --kubelet-extra-args '--node-labels=eks.amazonaws.com/nodegroup=custom-ng,eks.amazonaws.com/nodegroup-image=ami-0e124de4755b2734d'
Si solicitas un tipo de instancia que solo está disponible en una zona (y la configuración de eksctl requiere la especificación de dos), asegúrate de añadir la zona de disponibilidad a tu solicitud de grupo de nodos:
# cluster.yaml # A cluster with a managed nodegroup with "availabilityZones" --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: flux-cluster region: us-east-2 version: "1.23" availabilityZones: ["us-east-2b", "us-east-2c"] managedNodeGroups: - name: workers instanceType: hpc6a.48xlarge minSize: 64 maxSize: 64 labels: { "fluxoperator": "true" } availabilityZones: ["us-east-2b"] efaEnabled: true placement: groupName: eks-efa-testing
Esto puede ocurrir con tipos de instancias como la familia Hpc6
Clústeres existentes
eksctl create nodegroup --managed
Consejo: si utilizas un ClusterConfig
archivo para describir todo el clúster, describe el nuevo grupo de nodos gestionado en el managedNodeGroups
campo y ejecuta:
eksctl create nodegroup --config-file=YOUR_CLUSTER.yaml
Actualización de los grupos de nodos gestionados
Puede actualizar un grupo de nodos a la última versión de la versión de AMI optimizada para EKS para el tipo de AMI que esté utilizando en cualquier momento.
Si su grupo de nodos es de la misma versión de Kubernetes que el clúster, puede actualizar a la última versión de AMI para esa versión de Kubernetes del tipo de AMI que esté utilizando. Si su grupo de nodos es la versión de Kubernetes anterior a la versión de Kubernetes del clúster, puede actualizar el grupo de nodos a la última versión de AMI que coincida con la versión de Kubernetes del grupo de nodos, o actualizar a la última versión de AMI que coincida con la versión de Kubernetes del clúster. No puedes revertir un grupo de nodos a una versión anterior de Kubernetes.
Para actualizar un grupo de nodos gestionado a la última versión de la AMI:
eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster
El grupo de nodos se puede actualizar a la última versión de AMI para una versión específica de Kubernetes mediante:
eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster --kubernetes-version=<kubernetes-version>
Para actualizar a una versión de lanzamiento de AMI específica en lugar de a la última versión, pase--release-version
:
eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster --release-version=1.19.6-20210310
nota
Si los nodos gestionados se implementan de forma personalizada AMIs, se debe seguir el siguiente flujo de trabajo para implementar una nueva versión de la AMI personalizada.
-
El despliegue inicial del grupo de nodos debe realizarse mediante una plantilla de lanzamiento. p. ej.
managedNodeGroups: - name: launch-template-ng launchTemplate: id: lt-1234 version: "2" #optional (uses the default version of the launch template if unspecified)
-
cree una nueva versión de la AMI personalizada (mediante la consola AWS EKS).
-
cree una nueva versión de la plantilla de lanzamiento con el nuevo ID de AMI (mediante la consola AWS EKS).
-
actualice los nodos a la nueva versión de la plantilla de lanzamiento, p. ej.
eksctl upgrade nodegroup --name nodegroup-name --cluster cluster-name --launch-template-version new-template-version
Gestión de actualizaciones paralelas para nodos
Se pueden actualizar varios nodos gestionados simultáneamente. Para configurar las actualizaciones paralelas, defina el grupo updateConfig
de nodos al crear el grupo de nodos. Puede encontrar un ejemplo updateConfig
aquí.
Para evitar que sus cargas de trabajo se pierdan debido a la actualización de varios nodos a la vez, puede limitar el número de nodos que pueden dejar de estar disponibles durante una actualización especificándolo en el maxUnavailable
campo de unaupdateConfig
. Como alternativamaxUnavailablePercentage
, utilice esta opción, que define el número máximo de nodos no disponibles como un porcentaje del número total de nodos.
Tenga en cuenta que maxUnavailable
no puede ser superior amaxSize
. Además, maxUnavailable
maxUnavailablePercentage
no se puede usar simultáneamente.
Esta función solo está disponible para los nodos gestionados.
Actualización de grupos de nodos gestionados
eksctl
permite actualizar la UpdateConfigsección de un grupo de nodos gestionado. En esta sección se definen dos campos. MaxUnavailable
yMaxUnavailablePercentage
. Tus grupos de nodos no se ven afectados durante la actualización, por lo que no es de esperar un tiempo de inactividad.
El comando update nodegroup
debe usarse con un archivo de configuración que use la bandera. --config-file
El grupo de nodos debe contener una nodeGroup.updateConfig
sección. Puede encontrar más información aquí.
Problemas de salud de Nodegroup
Los grupos de nodos gestionados por EKS comprueban automáticamente la configuración del grupo de nodos y los nodos para detectar problemas de estado y los notifican a través de la API y la consola de EKS. Para ver los problemas de estado de un grupo de nodos:
eksctl utils nodegroup-health --name=managed-ng-1 --cluster=managed-cluster
Administrar etiquetas
EKS Managed Nodegroups permite adjuntar etiquetas que se aplican a los nodos de Kubernetes del grupo de nodos. Esto se especifica mediante el labels
campo de eksctl durante la creación del clúster o grupo de nodos.
Para establecer etiquetas nuevas o actualizar las etiquetas existentes en un grupo de nodos:
eksctl set labels --cluster managed-cluster --nodegroup managed-ng-1 --labels kubernetes.io/managed-by=eks,kubernetes.io/role=worker
Para desconfigurar o eliminar etiquetas de un grupo de nodos:
eksctl unset labels --cluster managed-cluster --nodegroup managed-ng-1 --labels kubernetes.io/managed-by,kubernetes.io/role
Para ver todas las etiquetas configuradas en un grupo de nodos:
eksctl get labels --cluster managed-cluster --nodegroup managed-ng-1
Escalar los grupos de nodos gestionados
eksctl scale nodegroup
también admite grupos de nodos gestionados. La sintaxis para escalar un grupo de nodos administrado o no administrado es la misma.
eksctl scale nodegroup --name=managed-ng-1 --cluster=managed-cluster --nodes=4 --nodes-min=3 --nodes-max=5