Fermer

juillet 6, 2022

Implémentation du groupe de nœuds AWS EKS à l’aide de Terraform


[*]


Implémentation du groupe de nœuds AWS EKS à l’aide de Terraform

Gère un groupe de nœuds EKS, qui peut provisionner et éventuellement mettre à jour un groupe Auto Scaling de nœuds de travail Kubernetes compatibles avec EKS.

Les groupes de nœuds gérés Amazon EKS automatisent le provisionnement et la gestion du cycle de vie des nœuds (instances Amazon EC2) pour les clusters Amazon EKS Kubernetes.

Avec les groupes de nœuds gérés Amazon EKS, vous n’avez pas besoin de provisionner ou d’enregistrer séparément les instances Amazon EC2 qui fournissent la capacité de calcul pour exécuter vos applications Kubernetes. Vous pouvez créer, mettre à jour automatiquement ou résilier des nœuds pour votre cluster en une seule opération. Les mises à jour et les terminaisons de nœud drainent automatiquement les nœuds pour garantir que vos applications restent disponibles.

Chaque nœud géré est provisionné dans le cadre d’un groupe Amazon EC2 Auto Scaling qui est géré pour vous par Amazon EKS. Chaque ressource, y compris les instances et les groupes Auto Scaling, s’exécute dans votre compte AWS. Chaque groupe de nœuds s’exécute sur plusieurs zones de disponibilité que vous définissez.

Types de capacité de groupe de nœuds gérés

À la demande

Avec les instances à la demande, vous payez la capacité de calcul à la seconde, sans engagement à long terme.

Endroit

Les instances Spot Amazon EC2 sont des capacités de réserve Amazon EC2 qui offrent des remises importantes sur les prix à la demande. Les instances Spot Amazon EC2 peuvent être interrompues avec un préavis d’interruption de deux minutes lorsqu’EC2 a besoin de la capacité. Pour plus d’informations, consultez Instances Spot dans le Guide de l’utilisateur Amazon EC2 pour les instances Linux. Vous pouvez configurer un groupe de nœuds gérés avec des instances Spot Amazon EC2 pour optimiser les coûts des nœuds de calcul exécutés dans votre cluster Amazon EKS.

Exemple d’utilisation

ressource « aws_eks_node_group » « exemple » {

cluster_name = aws_eks_cluster.example.name

node_group_name = « exemple »

node_role_arn = aws_iam_role.example.arn

subnet_ids = aws_subnet.exemple[*].identifiant

mise à l’échelle_config {

taille_souhaitée = 1

taille_max = 1

taille_min = 1

}

mise à jour_config {

max_unavailable = 2

}

# Assurez-vous que les autorisations de rôle IAM sont créées avant et supprimées après la gestion du groupe de nœuds EKS.

# Sinon, EKS ne pourra pas supprimer correctement les instances EC2 et les interfaces réseau Elastic.

dépend_de = [

    aws_iam_role_policy_attachment.example-AmazonEKSWorkerNodePolicy,

    aws_iam_role_policy_attachment.example-AmazonEKS_CNI_Policy,

    aws_iam_role_policy_attachment.example-AmazonEC2ContainerRegistryReadOnly,

  ]

}

Code utilisé dans un projet existant.

ressource « aws_eks_node_group » « aws_eks_node_group » {

cluster_name = »${var.environment}_${var.cluster_name} »

node_group_name = « ${var.environment}-worker »

node_role_arn = aws_iam_role.eks_worker_role.arn

subnet_ids = « ${concat(var.private_subnets)} »

mise à l’échelle_config {

taille_souhaitée = 2

taille_max = 3

taille_min = 1

}

mise à jour_config {

max_unavailable = 2

}

balises = {

« Nom » = « csg-qa-worker »

« Classe de sécurité » = « C »

« Clients » = « CSG International »

« Niveau de service » = « QA »

« Facturable » = « Non »

« RemedyGroup » = « FSM-Qa-RD-L3 »

« Fonction » = « Application »

« Code produit » = « 4040 »

}

# Assurez-vous que les autorisations de rôle IAM sont créées avant et supprimées après la gestion du groupe de nœuds EKS.

# Sinon, EKS ne pourra pas supprimer correctement les instances EC2 et les interfaces réseau Elastic.

dépend_de = [

    aws_iam_role_policy_attachment.AmazonEKSWorkerNodePolicy,

    aws_iam_role_policy_attachment.AmazonEKS_CNI_Policy,

    aws_iam_role_policy_attachment.AmazonEC2ContainerRegistryReadOnly,

  ]

}

Ignorer les modifications apportées à la taille souhaitée

Vous pouvez utiliser la ressource générique Terraform bloc de configuration du cycle de vie avec ignore_changes pour créer un groupe de nœuds EKS avec une taille initiale d’instances en cours d’exécution, puis ignorez toute modification de ce nombre causée de manière externe (par exemple, mise à l’échelle automatique des applications).

ressource « aws_eks_node_group » « exemple » {

# … autres configurations …

mise à l’échelle_config {

# Exemple : Créer un groupe de nœuds EKS avec 2 instances pour démarrer

taille_souhaitée = 2

# … autres configurations …

}

# Facultatif : Autoriser les modifications externes sans différence de plan Terraform

cycle de la vie {

ignore_changes = [scaling_config[0].desired_size]

}

}

Exemple de rôle IAM pour le groupe de nœuds EKS

ressource « aws_iam_role » « exemple » {

name = « eks-node-group-example »

assume_role_policy = jsonencode({

Déclaration = [{

      Action = “sts:AssumeRole”

      Effect = “Allow”

      Principal = {

        Service = “ec2.amazonaws.com”

      }

    }]

Variante = « 2012-10-17 »

})

}

ressource « aws_iam_role_policy_attachment » « exemple-AmazonEKSWorkerNodePolicy » {

policy_arn = « arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy »

role = aws_iam_role.example.name

}

ressource « aws_iam_role_policy_attachment » « exemple-AmazonEKS_CNI_Policy » {

policy_arn = « arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy »

role = aws_iam_role.example.name

}

ressource « aws_iam_role_policy_attachment » « exemple-AmazonEC2ContainerRegistryReadOnly » {

policy_arn = « arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly »

role = aws_iam_role.example.name

}

Exemples de sous-réseaux pour le groupe de nœuds EKS

données « aws_availability_zones » « disponible » {

état = « disponible »

}

ressource « aws_subnet » « exemple » {

compter = 2

disponibilité_zone = data.aws_availability_zones.available.names[count.index]

cidr_block = cidrsubnet(aws_vpc.example.cidr_block, 8, count.index)

vpc_id = aws_vpc.exemple.id

balises = {

« kubernetes.io/cluster/${aws_eks_cluster.example.name} » = « partagé »

}

}

Importer

Les groupes de nœuds EKS peuvent être importés en utilisant le cluster_name et le node_group_name séparés par deux points (:), par exemple,

$ importation terraform aws_eks_node_group.my_node_group my_cluster:my_node_group

TROUVÉ CELA UTILE ? PARTAGEZ-LE

[*]



[*]Source link