Terraform: Escalado automático de clústeres AWS EKS

terraform

Escalado automático de clústeres de AWS EKS para grupos de nodos administrados con Terraform

Terraform es nuestra herramienta preferida para gestionar todo el ciclo de vida de la infraestructura utilizando la infraestructura como código. Eso significa declarar los componentes de la infraestructura en los archivos de configuración que luego utiliza Terraform para aprovisionar, ajustar y derribar la infraestructura en varios proveedores de nube.

terraform

Un desafío común al que se enfrenta DevOps Engineer después de implementar el clúster de AWS EKS es mantener los grupos de nodos administrados y escalarlos según los requisitos. Entonces, los siguientes puntos están cubiertos en esta publicación con Terraform.

  • Aprovisionamiento de un clúster de EKS con grupos de nodos administrados
  • Implementación de servicios de escalado automático en Kubernetes.

Aprovisionamiento de un clúster de EKS con grupo de nodos administrado

Terraform ya ha seleccionado el tutorial para implementar el clúster EKS:

https://learn.hashicorp.com/tutorials/terraform/eks

Por lo tanto, el repositorio de GitHub sería un buen punto de partida.

Clonar el repositorio

Clone el repositorio de learn-terraform-provision-eks-cluster en la máquina local.

$ git clone https://github.com/hashicorp/learn-terraform-provision-eks-cluster

Actualizar la información de AWS

En este repositorio, todos los valores de configuración están preestablecidos y debe colocar los valores correctos según la información de su cuenta de AWS.

VPC

En el archivo  vpc.tf, actualice la región, el proveedor y las subredes con sus valores preferidos.

module "vpc" {source  = "terraform-aws-modules/vpc/aws"version = "~> 3.0"name                 = "eks-vpc"cidr                 = "10.0.0.0/16"azs                  = data.aws_availability_zones.az.namesprivate_subnets      = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]public_subnets       = ["10.0.4.0/24", "10.0.5.0/24", "10.0.6.0/24"]enable_nat_gateway   = truesingle_nat_gateway   = trueenable_dns_hostnames = truepublic_subnet_tags = {"kubernetes.io/cluster/eks-vpc" = "owned""kubernetes.io/role/elb"        = "1"}private_subnet_tags = {"kubernetes.io/cluster/eks-vpc" = "owned""kubernetes.io/role/elb"        = "1"}}

Actualizar la configuración relacionada con el clúster de EKS eks-cluster.tf

module "eks_cluster" {source = "terraform-aws-modules/eks/aws"cluster_version = "1.21"cluster_name    = "my-cluster"vpc_id          = module.vpc.vpc_idsubnets         = module.vpc.public_subnetsnode_groups_defaults = {tags = {Name = "${module.eks_cluster.cluster_id}-Node"}}node_groups = {node_group-1 = {name = "node-group-1-${module.eks_cluster.cluster_id}"desired_capacity = 1max_capacity     = 10min_capacity     = 1instance_types = ["t2.large"]k8s_labels = {Example    = "managed_node_groups"GithubRepo = "terraform-aws-eks"GithubOrg  = "terraform-aws-modules"}tags_all = {Name     = "${module.eks_cluster.cluster_id}-Node"ExtraTag = "example"}}}}

Aplicar EKS Cluster con Terraform

Aplicar recurso

Una vez que todo esté listo, ejecute los siguientes comandos para aplicar el clúster EKS:

> terraform init

> terraform apply

Después de que el clúster EKS esté implementado y listo, verifique que las siguientes etiquetas deben estar presentes en el grupo de escalado automático

k8s.io/cluster-autoscaler/enabled true

kubernetes.io/cluster/my-cluster owned

Ahora, necesitamos implementar los servicios de escala automática del clúster en nuestro clúster. Descargue el formulario de archivo aquí.

Necesita realizar los siguientes cambios bajo el command: sección en cluster-autoscaler-autodiscover.yaml

Mi caso se muestra a continuación:

.
.
.
command:
.
.
.
- --skip-nodes-with-local-storage=false
- --expander=least-waste
- --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/my-cluster
 - --balance-similar-node-groups
- --skip-nodes-with-system-pods=false

Implementar servicios de escalado automático en clústeres de kubernetes

kubectl -f apply cluster-autoscaler-autodiscover.yaml

Las cápsulas tardarán un poco en aparecer y verá el siguiente resultado

$ kubectl get pods -n kube-system

NAME READY STATUS RESTARTS AGE
aws-node-bl65v 1/1 Running 0 21m
cluster-autoscaler-6f95fcb76d-g2fbv  1/1 Running 0 10s
coredns-66cb55d4f4-p79wf 1/1 Running 0 26m
coredns-66cb55d4f4-xppsq 1/1 Running 0 26m
kube-proxy-fkwt7 1/1 Running 0 21m

Ahora, cuando todos los servicios y pods relacionados con el escalado automático estén en funcionamiento, debemos verificar si está funcionando o no. Entonces, para verificar, ejecute los siguientes comandos que crearán una implementación de nginx y luego los escalarán hasta cien réplicas.

kubectl create deployment nginx --image nginx

kubectl scale deployment/nginx --replicas=100

Ahora, puede comprobar que las instancias EC2 en la consola de AWS se escalarán automáticamente.

Recent Post