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
kubectlper 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
kubectlDespré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
