[vc_row el_class=”blog-info”][vc_column][vc_single_image source=”featured_image” img_size=”full” style=”vc_box_rounded”][vc_empty_space height=”40px”][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text el_class=”font-weight-bold”]
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.
[/vc_column_text][vc_empty_space height=”40px”][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text]
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.
[/vc_column_text][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row][vc_row el_class=”social-info”][vc_column width=”1/6″][/vc_column][vc_column width=”2/3″][vc_row_inner][vc_column_inner width=”1/2″][vc_column_text][social_share_button themes=’theme1′][/vc_column_text][/vc_column_inner][vc_column_inner el_class=”youtube-inner-col” width=”1/2″][vc_column_text][likebtn theme=”youtube” lang=”auto” show_like_label=”0″ white_label=”1″ alignment=”right”][/vc_column_text][/vc_column_inner][/vc_row_inner][vc_row_inner el_class=”social-info-inner”][vc_column_inner width=”1/4″][vc_single_image image=”921″][/vc_column_inner][vc_column_inner width=”3/4″][vc_column_text]
Diego Pacheco
Ingeniero en Sitemas, MBA (Babson College). Desarrollador PHP/Java/JavaScript. Fundador & CEO de EpicStudio. Entusiasta de las tecnologías web (JavaScript, Vue, Laravel, AWS, Docker) Viajes, Negocios, Surf y Growth.[/vc_column_text][asvc_list_item icon_fontawesome=”fa fa-calendar-o” icon_size=”14px”]Programar una reunión[/asvc_list_item][/vc_column_inner][/vc_row_inner][/vc_column][vc_column width=”1/6″][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Recent Post
[/vc_column_text][lvca_posts_carousel posts_query=”size:3|order_by:rand|post_type:post” image_linkable=”true” image_size=”full” taxonomy_chosen=”post_tag” display_title=”true” display_post_date=”true” display_summary=”true” autoplay_speed=”3000″ animation_speed=”300″ display_columns=”3″ scroll_columns=”3″ gutter=”3″ tablet_display_columns=”2″ tablet_scroll_columns=”2″ tablet_gutter=”3″ tablet_width=”800″ mobile_display_columns=”1″ mobile_scroll_columns=”1″ mobile_gutter=”3″ mobile_width=”480″][vc_empty_space height=”20px”][/vc_column][/vc_row]
