Introducció
En aquest projecte, aprendrem a desplegar un clúster de Kubernetes utilitzant Terraform. Kubernetes és una plataforma de codi obert per a l'automatització del desplegament, l'escalat i la gestió d'aplicacions en contenidors. Terraform ens permetrà definir la infraestructura necessària per a Kubernetes de manera declarativa i repetible.
Objectius del Projecte
- Configurar un clúster de Kubernetes utilitzant Terraform.
- Desplegar aplicacions en el clúster de Kubernetes.
- Gestionar la infraestructura de Kubernetes amb Terraform.
Requisits Previs
- Coneixements bàsics de Kubernetes.
- Coneixements bàsics de Terraform.
- Un compte en un proveïdor de núvol (AWS, Azure, GCP).
- Instal·lació de
kubectl
per gestionar el clúster de Kubernetes.
Passos del Projecte
- Configuració del Proveïdor de Núvol
Primer, hem de configurar el proveïdor de núvol que utilitzarem per desplegar el clúster de Kubernetes. En aquest exemple, utilitzarem AWS.
Exemple de codi:
- Creació del Clúster de Kubernetes
Utilitzarem el servei EKS (Elastic Kubernetes Service) d'AWS per crear el clúster de Kubernetes.
Exemple de codi:
resource "aws_eks_cluster" "example" { name = "example-cluster" role_arn = aws_iam_role.example.arn vpc_config { subnet_ids = aws_subnet.example[*].id } } resource "aws_iam_role" "example" { name = "example-role" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = "sts:AssumeRole" Effect = "Allow" Principal = { Service = "eks.amazonaws.com" } }, ] }) } resource "aws_subnet" "example" { count = 2 vpc_id = aws_vpc.example.id cidr_block = cidrsubnet(aws_vpc.example.cidr_block, 8, count.index) } resource "aws_vpc" "example" { cidr_block = "10.0.0.0/16" }
- Configuració de
kubectl
kubectl
Després de crear el clúster, necessitem configurar kubectl
per interactuar amb el clúster de Kubernetes.
Exemple de codi:
resource "local_file" "kubeconfig" { content = data.aws_eks_cluster_auth.example.kubeconfig filename = "${path.module}/kubeconfig" } data "aws_eks_cluster_auth" "example" { name = aws_eks_cluster.example.name }
- Desplegament d'Aplicacions en el Clúster
Desplegarem una aplicació simple en el clúster de Kubernetes utilitzant un manifest de Kubernetes.
Exemple de codi:
resource "kubernetes_deployment" "nginx" { metadata { name = "nginx" labels = { App = "nginx" } } spec { replicas = 2 selector { match_labels = { App = "nginx" } } template { metadata { labels = { App = "nginx" } } spec { container { image = "nginx:1.14.2" name = "nginx" ports { container_port = 80 } } } } } }
- Validació del Desplegament
Un cop desplegada l'aplicació, validarem que tot funciona correctament.
Comandes de validació:
Exercicis Pràctics
- Desplegar una aplicació de base de dades en el clúster de Kubernetes.
- Configurar un ingress controller per gestionar el tràfic HTTP i HTTPS.
- Implementar un autoscaler per escalar automàticament les aplicacions en funció de la càrrega.
Solucions dels Exercicis
Exercici 1: Desplegar una aplicació de base de dades
Exemple de codi:
resource "kubernetes_deployment" "mysql" { metadata { name = "mysql" labels = { App = "mysql" } } spec { replicas = 1 selector { match_labels = { App = "mysql" } } template { metadata { labels = { App = "mysql" } } spec { container { image = "mysql:5.7" name = "mysql" env { name = "MYSQL_ROOT_PASSWORD" value = "password" } ports { container_port = 3306 } } } } } }
Exercici 2: Configurar un ingress controller
Exemple de codi:
resource "kubernetes_ingress" "example" { metadata { name = "example-ingress" } spec { rule { http { path { path = "/" backend { service_name = "nginx" service_port = 80 } } } } } }
Exercici 3: Implementar un autoscaler
Exemple de codi:
resource "kubernetes_horizontal_pod_autoscaler" "nginx" { metadata { name = "nginx" } spec { scale_target_ref { kind = "Deployment" name = "nginx" api_version = "apps/v1" } min_replicas = 1 max_replicas = 10 target_cpu_utilization_percentage = 50 } }
Conclusió
En aquest projecte, hem après a desplegar un clúster de Kubernetes utilitzant Terraform, a configurar kubectl
per gestionar el clúster, i a desplegar aplicacions en el clúster. També hem realitzat exercicis pràctics per reforçar els conceptes apresos. Amb aquests coneixements, estem preparats per gestionar infraestructures de Kubernetes de manera eficient i escalable utilitzant Terraform.
Curs de Terraform
Mòdul 1: Introducció a Terraform
- Què és Terraform?
- Instal·lant Terraform
- Conceptes bàsics de Terraform
- Primera configuració de Terraform
Mòdul 2: Llenguatge de configuració de Terraform
Mòdul 3: Gestió de l'estat
Mòdul 4: Mòduls de Terraform
Mòdul 5: Proveïment de recursos
- Conceptes bàsics de proveïment
- Proveïment de recursos AWS
- Proveïment de recursos Azure
- Proveïment de recursos GCP
Mòdul 6: Funcionalitats avançades de Terraform
Mòdul 7: Millors pràctiques de Terraform
- Organització del codi
- Control de versions
- Proves del codi de Terraform
- Millors pràctiques de seguretat
Mòdul 8: Terraform en CI/CD
- Integració de Terraform amb CI/CD
- Automatització de Terraform amb Jenkins
- Ús de Terraform amb GitHub Actions
- Terraform Cloud i Enterprise