Concepts d'ACK - Amazon EKS

Aidez à améliorer cette page

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Pour contribuer à ce guide de l'utilisateur, cliquez sur le GitHub lien Modifier cette page sur qui se trouve dans le volet droit de chaque page.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Concepts d'ACK

ACK gère les AWS ressources via Kubernetes en APIs conciliant en permanence l'état souhaité dans vos manifestes avec l'état réel dans. AWS Lorsque vous créez ou mettez à jour une ressource personnalisée Kubernetes, ACK effectue les appels d' AWS API nécessaires pour créer ou modifier la AWS ressource correspondante, puis surveille sa dérive et met à jour le statut de Kubernetes pour refléter l'état actuel. Cette approche vous permet de gérer l'infrastructure à l'aide d'outils et de flux de travail Kubernetes familiers tout en maintenant la cohérence entre votre cluster et. AWS

Cette rubrique explique les concepts fondamentaux qui sous-tendent la façon dont ACK gère les AWS ressources via Kubernetes APIs.

Commencer à utiliser ACK

Après avoir créé la fonctionnalité ACK (voirCréation d'une fonctionnalité ACK), vous pouvez commencer à gérer les AWS ressources à l'aide de manifestes Kubernetes dans votre cluster.

Par exemple, créez ce manifeste de compartiment S3 dansbucket.yaml, en choisissant votre propre nom de compartiment unique.

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

Appliquez le manifeste :

kubectl apply -f bucket.yaml

Vérifiez le statut :

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

Vérifiez que le bucket a été créé dans AWS :

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

Supprimez la ressource Kubernetes :

kubectl delete bucket my-test-bucket

Vérifiez que le bucket a été supprimé de AWS :

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

Le bucket ne doit plus apparaître dans la liste, ce qui prouve qu'ACK gère le cycle de vie complet des AWS ressources.

Pour plus d'informations sur la prise en main d'ACK, consultez Getting Started with ACK.

Cycle de vie et réconciliation des ressources

ACK utilise une boucle de réconciliation continue pour garantir que vos AWS ressources correspondent à l'état souhaité défini dans vos manifestes Kubernetes.

Comment fonctionne la réconciliation :

  1. Vous créez ou mettez à jour une ressource personnalisée Kubernetes (par exemple, un compartiment S3)

  2. ACK détecte le changement et compare l'état souhaité avec l'état réel dans AWS

  3. S'ils diffèrent, ACK effectue des appels d' AWS API pour concilier la différence

  4. ACK met à jour le statut des ressources dans Kubernetes pour refléter l'état actuel

  5. La boucle se répète en continu, généralement toutes les quelques heures

La réconciliation est déclenchée lorsque vous créez une nouvelle ressource Kubernetes, que vous mettez à jour une ressource existante ou lorsque ACK détecte une dérive due à des modifications manuelles effectuées en AWS dehors d'ACK. spec En outre, ACK effectue des rapprochements périodiques avec une période de resynchronisation de 10 heures. Les modifications apportées aux ressources Kubernetes déclenchent une réconciliation immédiate, tandis que la détection passive des modifications des AWS ressources en amont se produit lors de la resynchronisation périodique.

Lorsque vous suivez l'exemple de démarrage ci-dessus, ACK exécute les étapes suivantes :

  1. Vérifie si le bucket existe dans AWS

  2. Si ce n'est pas le cas, appelez s3:CreateBucket

  3. Met à jour le statut de Kubernetes avec l'ARN et l'état du bucket

  4. Poursuite de la surveillance de la dérive

Pour en savoir plus sur le fonctionnement d'ACK, consultez ACK Reconciliation.

Conditions relatives au statut

Les ressources ACK utilisent des conditions d'état pour communiquer leur état. La compréhension de ces conditions vous aide à résoudre les problèmes et à comprendre l'état des ressources.

  • Prêt : indique que la ressource est prête à être consommée (condition Kubernetes standardisée).

  • ACK. ResourceSynced: indique que la spécification de la ressource correspond à l'état de la AWS ressource.

  • ACK.terminal : indique qu'une erreur irrécupérable s'est produite.

  • ACK.adopted : indique que la ressource a été adoptée à partir d'une AWS ressource existante plutôt que créée.

  • Ack.Recoverable : indique une erreur récupérable qui peut être résolue sans mettre à jour les spécifications.

  • ACK.advisory : fournit des informations consultatives sur la ressource.

  • ACK. LateInitialized: indique si l'initialisation tardive des champs est terminée.

  • ACK. ReferencesResolved: indique si tous les AWSResourceReference champs ont été résolus.

  • ACK. IAMRoleSélectionné : indique si un IAMRole sélecteur a été sélectionné pour gérer cette ressource.

Vérifiez l'état de la ressource :

# 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")]}'

Exemple de statut :

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

Pour en savoir plus sur le statut et les conditions de l'ACK, consultez la section Conditions de l'ACK.

Politiques de suppression

La politique de suppression d'ACK contrôle ce qui arrive aux AWS ressources lorsque vous supprimez la ressource Kubernetes.

Supprimer (par défaut)

La AWS ressource est supprimée lorsque vous supprimez la ressource Kubernetes : il s'agit du comportement par défaut.

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

La suppression de cette ressource entraîne la suppression du compartiment S3 dans AWS.

Conserver

La AWS ressource est conservée lorsque vous supprimez la ressource 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

La suppression de cette ressource la supprime de Kubernetes mais laisse le compartiment S3 dedans. AWS

Cette retain politique est utile pour les bases de données de production qui doivent survivre à la ressource Kubernetes, pour les ressources partagées utilisées par plusieurs applications, pour les ressources contenant des données importantes qui ne doivent pas être supprimées accidentellement ou pour la gestion temporaire d'ACK dans le cadre de laquelle vous adoptez une ressource, la configurez, puis la relancez à la gestion manuelle.

Pour en savoir plus sur la politique de suppression d'ACK, consultez la section Politique de suppression d'ACK.

Adoption des ressources

L'adoption vous permet de placer les AWS ressources existantes sous la gestion d'ACK sans les recréer.

Quand utiliser l'adoption :

  • Migration de l'infrastructure existante vers la gestion ACK

  • Récupération de AWS ressources orphelines en cas de suppression accidentelle de ressources dans Kubernetes

  • Importation de ressources créées par d'autres outils (CloudFormation, Terraform)

Comment fonctionne l'adoption :

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

Lorsque vous créez cette ressource :

  1. ACK vérifie si un bucket portant ce nom existe dans AWS

  2. S'il est trouvé, ACK l'adopte (aucun appel d'API à créer)

  3. ACK lit la configuration actuelle depuis AWS

  4. ACK met à jour le statut de Kubernetes pour refléter l'état réel

  5. Les mises à jour futures réconcilient normalement la ressource

Une fois adoptées, les ressources sont gérées comme n'importe quelle autre ressource ACK, et la suppression de la ressource Kubernetes entraîne la suppression de la AWS ressource, sauf si vous utilisez la retain politique de suppression.

Lors de l'adoption de ressources, AWS celles-ci doivent déjà exister et ACK a besoin d'autorisations de lecture pour les découvrir. La adopt-or-create politique adopte la ressource si elle existe ou la crée si elle n'existe pas. Cela est utile lorsque vous souhaitez un flux de travail déclaratif qui fonctionne, que la ressource existe ou non.

Pour en savoir plus sur l'adoption des ressources ACK, consultez la section Adoption des ressources ACK.

Ressources entre comptes et entre régions

ACK peut gérer les ressources de différents AWS comptes et régions à partir d'un seul cluster.

Annotations de ressources interrégionales

Vous pouvez spécifier la région d'une AWS ressource à l'aide d'une annotation :

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

Vous pouvez également spécifier la région de toutes les AWS ressources créées dans un espace de noms donné :

Annotations relatives à l'espace de noms

Définissez une région par défaut pour toutes les ressources d'un espace de noms :

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

Les ressources créées dans cet espace de noms utilisent cette région sauf si elles sont remplacées par une annotation au niveau des ressources.

Compte croisé

Utilisez les sélecteurs de rôles IAM pour associer des rôles IAM spécifiques à des espaces de noms :

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

Les ressources créées dans l'espace de noms mappé utilisent automatiquement le rôle spécifié.

Pour en savoir plus sur les sélecteurs de rôles IAM, consultez la section Gestion des ressources entre comptes ACK. Pour plus de détails sur la configuration entre comptes, voirConfigurer les autorisations ACK.

Gestion des erreurs et comportement des nouvelles tentatives

ACK gère automatiquement les erreurs transitoires et réessaie les opérations qui ont échoué.

Réessayez la stratégie :

  • Les erreurs transitoires (limitation du débit, problèmes de service temporaires, autorisations insuffisantes) déclenchent de nouvelles tentatives automatiques

  • Le recul exponentiel évite le surmenage AWS APIs

  • Le nombre maximal de tentatives varie en fonction du type d'erreur

  • Erreurs permanentes (paramètres non valides, conflits de noms de ressources), ne réessayez pas

Vérifiez l'état de la ressource pour obtenir des informations détaillées sur les erreurs en utilisant kubectl describe :

kubectl describe bucket my-bucket

Recherchez les conditions d'état avec des messages d'erreur, les événements indiquant les récentes tentatives de rapprochement et le message champ des conditions d'état expliquant les échecs. Les erreurs courantes incluent des autorisations IAM insuffisantes, des conflits de noms de ressources AWS, des valeurs de configuration non valides dans le spec et des quotas de AWS service dépassés.

Pour résoudre les erreurs courantes, consultezRésoudre les problèmes liés aux fonctionnalités ACK.

Composition des ressources avec kro

Pour composer et connecter plusieurs ressources ACK ensemble, utilisez la fonctionnalité EKS pour kro (Kube Resource Orchestrator). kro fournit un moyen déclaratif de définir des groupes de ressources, en transmettant la configuration entre les ressources afin de gérer simplement des modèles d'infrastructure complexes.

Pour des exemples détaillés de création de compositions de ressources personnalisées avec des ressources ACK, voir concepts kro

Étapes suivantes