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

  1. Configurar un clúster de Kubernetes utilitzant Terraform.
  2. Desplegar aplicacions en el clúster de Kubernetes.
  3. 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

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

provider "aws" {
  region = "us-west-2"
}

  1. 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"
}

  1. Configuració de 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
}

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

  1. Validació del Desplegament

Un cop desplegada l'aplicació, validarem que tot funciona correctament.

Comandes de validació:

kubectl get nodes
kubectl get pods
kubectl get services

Exercicis Pràctics

  1. Desplegar una aplicació de base de dades en el clúster de Kubernetes.
  2. Configurar un ingress controller per gestionar el tràfic HTTP i HTTPS.
  3. 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.

© Copyright 2024. Tots els drets reservats