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.
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.