

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.

# Complementos
<a name="addons"></a>

En este tema se describe cómo administrar los complementos de Amazon EKS para sus clústeres de Amazon EKS mediante eksctl. Los complementos de EKS son una función que le permite habilitar y administrar el software operativo de Kubernetes a través de la API de EKS, lo que simplifica el proceso de instalación, configuración y actualización de los complementos de clúster.

**aviso**  
eksctl ahora instala los complementos predeterminados (vpc-cni, coredns, kube-proxy) como complementos de EKS en lugar de como complementos autogestionables. Esto significa que debe utilizar comandos en lugar de comandos para los clústeres creados con eksctl v0.184.0 y versiones posteriores. `eksctl update addon` `eksctl utils update-*`

Puede crear clústeres sin ningún complemento de red predeterminado cuando desee utilizar complementos CNI alternativos como Cilium y Calico.

Los complementos de EKS ahora admiten la recepción de permisos de IAM a través de asociaciones de identidad de EKS Pod, lo que les permite conectarse con servicios de AWS fuera del clúster

## Creación de complementos
<a name="addons-create"></a>

Eksctl proporciona más flexibilidad para gestionar los complementos del clúster:

En su archivo de configuración, puede especificar los complementos que desea y (si es necesario) la función o las políticas que se les asignarán:

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: example-cluster
  region: us-west-2

iam:
  withOIDC: true

addons:
- name: vpc-cni
  # all below properties are optional
  version: 1.7.5
  tags:
    team: eks
  # you can specify at most one of:
  attachPolicyARNs:
  - arn:aws:iam::account:policy/AmazonEKS_CNI_Policy
  # or
  serviceAccountRoleARN: arn:aws:iam::account:role/AmazonEKSCNIAccess
  # or
  attachPolicy:
    Statement:
    - Effect: Allow
      Action:
      - ec2:AssignPrivateIpAddresses
      - ec2:AttachNetworkInterface
      - ec2:CreateNetworkInterface
      - ec2:DeleteNetworkInterface
      - ec2:DescribeInstances
      - ec2:DescribeTags
      - ec2:DescribeNetworkInterfaces
      - ec2:DescribeInstanceTypes
      - ec2:DetachNetworkInterface
      - ec2:ModifyNetworkInterfaceAttribute
      - ec2:UnassignPrivateIpAddresses
      Resource: '*'
```

Puedes especificar como máximo uno de los siguientes: `attachPolicy` `attachPolicyARNs` y`serviceAccountRoleARN`.

Si no se especifica ninguna de estas opciones, el complemento se creará con un rol al que se adjunten todas las políticas recomendadas.

**nota**  
Para poder adjuntar políticas a los complementos, el clúster debe tener `OIDC` habilitadas las opciones. Si no está activado, ignoramos las políticas adjuntas.

A continuación, puedes hacer que se creen estos complementos durante el proceso de creación del clúster:

```
eksctl create cluster -f config.yaml
```

O cree los complementos de forma explícita después de la creación del clúster mediante el archivo de configuración o los indicadores CLI:

```
eksctl create addon -f config.yaml
```

```
eksctl create addon --name vpc-cni --version 1.7.5 --service-account-role-arn <role-arn>
```

```
eksctl create addon --name aws-ebs-csi-driver --namespace-config 'namespace=custom-namespace'
```

**sugerencia**  
Usa la `--namespace-config` marca para implementar complementos en un espacio de nombres personalizado en lugar del espacio de nombres predeterminado.

Durante la creación del complemento, si ya existe una versión autogestionada del complemento en el clúster, puede elegir cómo se resolverán los posibles `configMap` conflictos configurando la opción a través del archivo de configuración, p. ej. `resolveConflicts`

```
addons:
- name: vpc-cni
  attachPolicyARNs:
    - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
  resolveConflicts: overwrite
```

Para la creación de complementos, el `resolveConflicts` campo admite tres valores distintos:
+  `none`- EKS no cambia el valor. La creación podría fallar.
+  `overwrite`- EKS sobrescribe cualquier cambio de configuración con los valores predeterminados de EKS.
+  `preserve`- EKS no cambia el valor. La creación podría fallar. (Similar a`none`, pero diferente, a [`preserve`la actualización de complementos](#update-addons)).

## Listado de complementos habilitados
<a name="_listing_enabled_addons"></a>

Para ver qué complementos están habilitados en su clúster, ejecute:

```
eksctl get addons --cluster <cluster-name>
```

o

```
eksctl get addons -f config.yaml
```

## Configurar la versión del complemento
<a name="_setting_the_addons_version"></a>

La configuración de la versión del complemento es opcional. Si el `version` campo se deja vacío, `eksctl` se resolverá la versión predeterminada del complemento. Puede encontrar más información sobre qué versión es la predeterminada para complementos específicos en la documentación de AWS sobre EKS. Tenga en cuenta que la versión predeterminada puede no ser necesariamente la última versión disponible.

La versión del complemento se puede configurar en. `latest` Como alternativa, la versión se puede configurar con la etiqueta de compilación EKS especificada, como `v1.7.5-eksbuild.1` o`v1.7.5-eksbuild.2`. También se puede configurar en la versión de lanzamiento del complemento, por ejemplo, `v1.7.5` o`1.7.5`, y la etiqueta de `eksbuild` sufijo se detectará y configurará automáticamente.

Consulta la siguiente sección sobre cómo descubrir los complementos disponibles y sus versiones.

## Descubriendo complementos
<a name="_discovering_addons"></a>

Para descubrir qué complementos están disponibles para su instalación en el clúster, ejecute:

```
eksctl utils describe-addon-versions --cluster <cluster-name>
```

Esto descubrirá la versión de kubernetes de tu clúster y la filtrará. Como alternativa, si quieres ver qué complementos están disponibles para una versión concreta de Kubernetes, puedes ejecutar:

```
eksctl utils describe-addon-versions --kubernetes-version <version>
```

También puedes descubrir complementos filtrando por sus,. `type` `owner` and/or `publisher` Por ejemplo, para ver los complementos de un propietario y tipo en particular, puedes ejecutar:

```
eksctl utils describe-addon-versions --kubernetes-version 1.22 --types "infra-management, policy-management" --owners "aws-marketplace"
```

Los `types` `publishers` indicadores `owners` y son opcionales y se pueden especificar juntos o individualmente para filtrar los resultados.

## Descubriendo el esquema de configuración de los complementos
<a name="_discovering_the_configuration_schema_for_addons"></a>

Tras descubrir el complemento y la versión, puede ver las opciones de personalización consultando su esquema de configuración JSON.

```
eksctl utils describe-addon-configuration --name vpc-cni --version v1.12.0-eksbuild.1
```

Esto devuelve un esquema JSON de las distintas opciones disponibles para este complemento.

## Trabajando con valores de configuración
<a name="_working_with_configuration_values"></a>

 `ConfigurationValues`se puede proporcionar en el archivo de configuración durante la creación o actualización de los complementos. Solo se admiten los formatos JSON y YAML.

Por ejemplo ,

```
addons:
- name: coredns
  configurationValues: |-
    replicaCount: 2
```

```
addons:
- name: coredns
  version: latest
  configurationValues: "{\"replicaCount\":3}"
  resolveConflicts: overwrite
```

**nota**  
Tenga en cuenta que cuando se modifiquen los valores de configuración de los complementos, surgirán conflictos de configuración.

```
Thus, we need to specify how to deal with those by setting the `resolveConflicts` field accordingly.
As in this scenario we want to modify these values, we'd set `resolveConflicts: overwrite`.
```

Además, el comando get ahora también se recuperará `ConfigurationValues` para el complemento. p.ej.

```
eksctl get addon --cluster my-cluster --output yaml
```

```
- ConfigurationValues: '{"replicaCount":3}'
  IAMRole: ""
  Issues: null
  Name: coredns
  NewerVersion: ""
  Status: ACTIVE
  Version: v1.8.7-eksbuild.3
```

## Uso de un espacio de nombres personalizado
<a name="_using_custom_namespace"></a>

Se puede proporcionar un espacio de nombres personalizado en el archivo de configuración durante la creación de los complementos. Un espacio de nombres no se puede actualizar una vez creado un complemento.

### Uso del archivo de configuración
<a name="_using_config_file"></a>

```
addons:
  - name: aws-ebs-csi-driver
    version: latest
    namespaceConfig:
      namespace: custom-namespace
```

### Uso del indicador CLI
<a name="_using_cli_flag"></a>

Como alternativa, puede especificar un espacio de nombres personalizado mediante el `--namespace-config` indicador:

```
eksctl create addon --cluster my-cluster --name aws-ebs-csi-driver --namespace-config 'namespace=custom-namespace'
```

El comando get también recuperará el valor del espacio de nombres del complemento

```
- ConfigurationValues: ""
  IAMRole: ""
  Issues: null
  Name: aws-ebs-csi-driver
  NamespaceConfig:
    namespace: custom-namespace
  NewerVersion: ""
  PodIdentityAssociations: null
  Status: ACTIVE
  Version: v1.47.0-eksbuild.1
```

## Actualización de complementos
<a name="update-addons"></a>

Puedes actualizar tus complementos a versiones más recientes y cambiar las políticas adjuntas ejecutando lo siguiente:

```
eksctl update addon -f config.yaml
```

```
eksctl update addon --name vpc-cni --version 1.8.0 --service-account-role-arn <new-role>
```

**nota**  
La configuración del espacio de nombres no se puede actualizar una vez que se ha creado un complemento. La `--namespace-config` marca solo está disponible durante la creación del complemento.

Al igual que en la creación de complementos, al actualizar un complemento, tienes el control total sobre los cambios de configuración que hayas aplicado anteriormente en ese complemento. `configMap` En concreto, puedes conservarlos o sobrescribirlos. Esta funcionalidad opcional está disponible en el mismo campo del archivo de configuración`resolveConflicts`. p. ej.,

```
addons:
- name: vpc-cni
  attachPolicyARNs:
    - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
  resolveConflicts: preserve
```

Para la actualización del complemento, el `resolveConflicts` campo acepta tres valores distintos:
+  `none`- EKS no cambia el valor. La actualización puede fallar.
+  `overwrite`- EKS sobrescribe cualquier cambio de configuración con los valores predeterminados de EKS.
+  `preserve`- EKS conserva el valor. Si elige esta opción, le recomendamos que pruebe cualquier cambio de campo y valor en un clúster que no sea de producción antes de actualizar el complemento en su clúster de producción.

## Eliminar complementos
<a name="_deleting_addons"></a>

Puedes eliminar un complemento ejecutando:

```
eksctl delete addon --cluster <cluster-name> --name <addon-name>
```

Esto eliminará el complemento y cualquier función de IAM asociada a él.

Al eliminar el clúster, también se eliminan todas las funciones de IAM asociadas a los complementos.

## Flexibilidad de creación de clústeres para los complementos de red predeterminados
<a name="barecluster"></a>

Cuando se crea un clúster, EKS instala automáticamente VPC CNI, CoreDNS y kube-proxy como complementos autogestionados. Para deshabilitar este comportamiento y poder usar otros complementos de CNI, como Cilium y Calico, eksctl ahora permite crear un clúster sin ningún complemento de red predeterminado. Para crear un clúster de este tipo, defina, como en: `addonsConfig.disableDefaultAddons`

```
addonsConfig:
  disableDefaultAddons: true
```

```
eksctl create cluster -f cluster.yaml
```

Para crear un clúster solo con CoredNS y kube-proxy y no con el CNI de VPC, especifique los complementos de forma explícita y configúrelos, como en: `addons` `addonsConfig.disableDefaultAddons`

```
addonsConfig:
  disableDefaultAddons: true
addons:
  - name: kube-proxy
  - name: coredns
```

```
eksctl create cluster -f cluster.yaml
```

Como parte de este cambio, eksctl ahora instala los complementos predeterminados como complementos de EKS en lugar de como complementos autogestionados durante la creación del clúster si no se establece explícitamente en true. `addonsConfig.disableDefaultAddons` Por lo tanto, `eksctl utils update-*` los comandos ya no se pueden usar para actualizar los complementos de los clústeres creados con eksctl v0.184.0 y versiones posteriores:
+  `eksctl utils update-aws-node` 
+  `eksctl utils update-coredns` 
+  `eksctl utils update-kube-proxy` 

En su lugar, debería usarse ahora. `eksctl update addon`

Para obtener más información, consulte [Amazon EKS introduce la flexibilidad de creación de clústeres para complementos de redes](https://aws.amazon.com/about-aws/whats-new/2024/06/amazon-eks-cluster-creation-flexibility-networking-add-ons/).