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

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

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.

[/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]