Conceptos de ACK - Amazon EKS

Ayude a mejorar esta página

Para contribuir a esta guía del usuario, elija el enlace Edit this page on GitHub que se encuentra en el panel derecho de cada página.

Conceptos de ACK

ACK administra los recursos de AWS a través de las API de Kubernetes mediante la conciliación continua del estado deseado de los manifiestos con el estado real en AWS. Al crear o actualizar un recurso personalizado de Kubernetes, ACK hace las llamadas a la API de AWS necesarias para crear o modificar el recurso de AWS correspondiente, lo supervisa para detectar posibles desviaciones y actualiza el estado de Kubernetes para reflejar el estado actual. Este enfoque le permite administrar la infraestructura con herramientas y flujos de trabajo de Kubernetes que ya conoce y, al mismo tiempo, mantener la coherencia entre el clúster y AWS.

En este tema se explican los conceptos fundamentales de cómo ACK administra los recursos de AWS a través de las API de Kubernetes.

Introducción a ACK

Tras crear la capacidad de ACK (consulte Creación de una capacidad de ACK), puede comenzar a administrar los recursos de AWS mediante los manifiestos de Kubernetes en su clúster.

Por ejemplo, cree este manifiesto de bucket de S3 en bucket.yaml y elija su propio nombre de bucket exclusivo.

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: my-test-bucket namespace: default spec: name: my-unique-bucket-name-12345

Aplique el manifiesto:

kubectl apply -f bucket.yaml

Compruebe el estado:

kubectl get bucket my-test-bucket kubectl describe bucket my-test-bucket

Verifique que el bucket se haya creado en AWS:

aws s3 ls | grep my-unique-bucket-name-12345

Elimine el recurso de Kubernetes:

kubectl delete bucket my-test-bucket

Compruebe que el bucket se haya eliminado de AWS:

aws s3 ls | grep my-unique-bucket-name-12345

El bucket ya no debería aparecer en la lista, lo que demuestra que ACK administra todo el ciclo de vida de los recursos de AWS.

Para obtener más información sobre cómo comenzar a utilizar Athena, consulte Introducción a ACK.

Ciclo de vida de los recursos y conciliación

ACK utiliza un ciclo de conciliación continuo para garantizar que sus recursos de AWS coincidan con el estado deseado definido en los manifiestos de Kubernetes.

Cómo funciona la conciliación:

  1. Cree o actualice un recurso personalizado de Kubernetes (por ejemplo, un bucket de S3).

  2. ACK detecta el cambio y compara el estado deseado con el estado real en AWS.

  3. Si son diferentes, ACK hace llamadas a la API de AWS para conciliar la diferencia.

  4. ACK actualiza el estado del recurso en Kubernetes para reflejar el estado actual.

  5. El ciclo se repite de forma continua, normalmente cada pocas horas.

La conciliación se activa cuando se crea un nuevo recurso de Kubernetes, se actualiza la spec de un recurso existente o cuando ACK detecta una desviación en AWS debido a cambios manuales hechos fuera de ACK. Además, ACK lleva a cabo una conciliación periódica con un periodo de resincronización de 10 horas. Los cambios en los recursos de Kubernetes activan una conciliación inmediata, mientras que la detección pasiva de los cambios en los recursos de AWS ascendentes se produce durante la resincronización periódica.

Al trabajar en el ejemplo de introducción anterior, ACK lleva a cabo los siguientes pasos:

  1. Comprueba si el bucket existe en AWS.

  2. Si no, llama a s3:CreateBucket.

  3. Actualiza el estado de Kubernetes con el ARN y el estado del bucket.

  4. Continúa supervisando para detectar desviaciones.

Para obtener más información sobre cómo funciona ACK, consulte ACK Reconciliation.

Condiciones de estado

Los recursos de ACK utilizan las condiciones de estado para comunicar su estado. Comprender estas condiciones lo ayuda a solucionar problemas y entender el estado de los recursos.

  • Listo: indica que el recurso está listo para consumirse (condición estandarizada de Kubernetes).

  • ACK.ResourceSynced: indica que la especificación del recurso coincide con el estado del recurso de AWS.

  • ACK.Terminal: indica que se ha producido un error irrecuperable.

  • ACK.Adopted: indica que el recurso se adoptó de un recurso de AWS existente en lugar de crearse.

  • ACK.Recoverable: indica un error recuperable que puede resolverse sin actualizar la especificación.

  • ACK.Advisory: proporciona información de asesoramiento sobre el recurso.

  • ACK.LateInitialized: indica si se ha completado la inicialización tardía de los campos.

  • ACK.ReferencesResolved: indica si se han resuelto todos los campos AWSResourceReference.

  • ACK.IAMRoleSelected: indica si se ha seleccionado un IAMRoleSelector para administrar este recurso.

Compruebe el estado del recurso:

# Check if resource is ready kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' # Check for terminal errors kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="ACK.Terminal")]}'

Ejemplo de estado:

status: conditions: - type: Ready status: "True" lastTransitionTime: "2024-01-15T10:30:00Z" - type: ACK.ResourceSynced status: "True" lastTransitionTime: "2024-01-15T10:30:00Z" - type: ACK.Terminal status: "True" ackResourceMetadata: arn: arn:aws:s3:::my-unique-bucket-name ownerAccountID: "111122223333" region: us-west-2

Para obtener más información sobre los estados y las condiciones de ACK, consulte ACK Conditions.

Políticas de eliminación

La política de eliminación de ACK controla lo que ocurre con los recursos de AWS cuando se elimina el recurso de Kubernetes.

Eliminación (opción predeterminada)

El recurso de AWS se elimina al eliminar el recurso de Kubernetes: este es el comportamiento predeterminado.

# No annotation needed - this is the default apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: temp-bucket spec: name: temporary-bucket

Al eliminar este recurso, se elimina el bucket de S3 en AWS.

Retain

El recurso de AWS se conserva al eliminar el recurso de Kubernetes:

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: important-bucket annotations: services.k8s.aws/deletion-policy: "retain" spec: name: production-data-bucket

Al eliminar este recurso, se elimina de Kubernetes, pero se deja el bucket de S3 en AWS.

La política retain es útil para las bases de datos de producción que deberían durar más tiempo que el recurso de Kubernetes, los recursos compartidos utilizados por varias aplicaciones, los recursos con datos importantes que no deberían eliminarse accidentalmente o la administración temporal de ACK donde se adopta un recurso, se configura y, a continuación, se vuelve a administrar manualmente.

Para obtener más información sobre la política de eliminación de ACK, consulte ACK Deletion Policy.

Adopción de recursos

La adopción le permite administrar los recursos de AWS existentes sin necesidad de volver a crearlos.

Cuándo se utiliza la adopción:

  • Para la migración de la infraestructura existente a la administración de ACK

  • Para la recuperación de recursos de AWS huérfanos en caso de eliminación accidental de recursos en Kubernetes

  • Para la importación de recursos creados por otras herramientas (CloudFormation, Terraform)

Cómo funciona la adopción:

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: existing-bucket annotations: services.k8s.aws/adoption-policy: "adopt-or-create" spec: name: my-existing-bucket-name

Al crear este recurso:

  1. ACK comprueba si existe un bucket con ese nombre en AWS.

  2. Si lo encuentra, ACK lo adopta (no es necesario crear llamadas a la API).

  3. ACK lee la configuración actual de AWS.

  4. ACK actualiza el estado de Kubernetes para reflejar el estado actual,

  5. Las actualizaciones futuras concilian el recurso con normalidad.

Una vez adoptados, los recursos se administran como cualquier otro recurso de ACK y, al eliminar el recurso de Kubernetes, se eliminará el recurso de AWS, a menos que utilice la política de eliminación retain.

Al adoptar un recurso, el recurso de AWS debe existir previamente y ACK necesita permisos de lectura para detectarlo. La política adopt-or-create adopta el recurso si existe o lo crea si no existe. Esto resulta útil cuando se desea un flujo de trabajo declarativo que funcione independientemente de si el recurso existe o no.

Para obtener más información sobre la adopción de recursos de ACK, consulte ACK Resource Adoption.

Recursos entre cuentas y regiones

ACK puede administrar los recursos en diferentes cuentas y regiones de AWS desde un solo clúster.

Anotaciones de recursos entre regiones

Puede especificar la región de un recurso de AWS mediante una anotación:

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: eu-bucket annotations: services.k8s.aws/region: eu-west-1 spec: name: my-eu-bucket

También puede especificar la región de todos los recursos de AWS creados en un espacio de nombres determinado:

Anotaciones de espacios de nombres

Establezca una región predeterminada para todos los recursos de un espacio de nombres:

apiVersion: v1 kind: Namespace metadata: name: production annotations: services.k8s.aws/default-region: us-west-2

Los recursos creados en este espacio de nombres utilizan esta región a menos que se sustituya por una anotación de recurso.

Entre cuentas

Utilice los selectores de roles de IAM para asignar roles de IAM específicos a espacios de nombres:

apiVersion: services.k8s.aws/v1alpha1 kind: IAMRoleSelector metadata: name: target-account-config spec: arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole namespaceSelector: names: - production

Los recursos creados en el espacio de nombres asignado utilizan automáticamente el rol especificado.

Para obtener más información sobre los selectores de roles de IAM, consulte ACK Cross-Account Resource Management. Para obtener información sobre la configuración entre cuentas, consulte Configuración de los permisos de ACK.

Gestión de errores y comportamiento de los reintentos

ACK gestiona automáticamente los errores transitorios y reintenta las operaciones fallidas.

Estrategia de reintento:

  • Los errores transitorios (limitación de velocidad, problemas temporales del servicio, permisos insuficientes) provocan reintentos automáticos.

  • El retroceso exponencial evita que las API de AWS se sobrecarguen.

  • El número máximo de reintentos varía según el tipo de error.

  • Los errores permanentes (parámetros no válidos, conflictos en el nombre del recurso) no se vuelven a intentar.

Compruebe el estado del recurso para ver los detalles del error mediante kubectl describe:

kubectl describe bucket my-bucket

Busque las condiciones de estado con mensajes de error, los eventos que muestren los intentos de conciliación recientes y el campo message en las condiciones de estado que explique los errores. Los errores más comunes son la insuficiencia de permisos de IAM, los conflictos en los nombres de los recursos en AWS, los valores de configuración no válidos en la spec y la superación de AWS Service Quotas.

Para solucionar errores comunes, consulte Solución de problemas con capacidades de ACK.

Composición de recursos con kro

Para componer y conectar varios recursos de ACK entre sí, utilice la capacidad de EKS para kro (Kube Resource Orchestrator). kro proporciona una forma declarativa de definir grupos de recursos, lo que transfiere la configuración entre recursos para administrar patrones de infraestructura complejos de forma sencilla.

Para ver ejemplos detallados de cómo crear composiciones de recursos personalizados con recursos de ACK, consulte Conceptos de kro.

Siguientes pasos