En aquest tema, aprendrem a desplegar una aplicació web en un clúster de Kubernetes. Aquest procés inclou la creació de recursos bàsics com Pods, Services i Ingress, així com la configuració de l'emmagatzematge i la gestió de la configuració necessària per a l'aplicació.

Objectius d'Aprenentatge

  • Entendre com crear i desplegar un Pod en Kubernetes.
  • Configurar un Service per exposar l'aplicació.
  • Utilitzar Ingress per gestionar l'accés extern a l'aplicació.
  • Configurar l'emmagatzematge persistent per a l'aplicació.
  • Gestionar la configuració de l'aplicació mitjançant ConfigMaps i Secrets.

  1. Creació del Pod

Definició del Pod

Un Pod és la unitat bàsica de desplegament en Kubernetes. Conté un o més contenidors que comparteixen el mateix espai de xarxa i emmagatzematge.

apiVersion: v1
kind: Pod
metadata:
  name: web-app
  labels:
    app: web-app
spec:
  containers:
  - name: web-app
    image: nginx:latest
    ports:
    - containerPort: 80

Explicació del Codi

  • apiVersion: La versió de l'API de Kubernetes que estem utilitzant.
  • kind: El tipus de recurs que estem creant, en aquest cas, un Pod.
  • metadata: Informació sobre el Pod, incloent el nom i les etiquetes.
  • spec: L'especificació del Pod, que inclou els contenidors que conté.
  • containers: Una llista de contenidors dins del Pod.
  • name: El nom del contenidor.
  • image: La imatge del contenidor que s'utilitzarà.
  • ports: Els ports que el contenidor exposarà.

Comandes per Crear el Pod

kubectl apply -f pod.yaml

  1. Creació del Service

Un Service en Kubernetes exposa un conjunt de Pods com un servei de xarxa.

Definició del Service

apiVersion: v1
kind: Service
metadata:
  name: web-app-service
spec:
  selector:
    app: web-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: LoadBalancer

Explicació del Codi

  • selector: Selecciona els Pods que coincideixen amb les etiquetes especificades.
  • ports: Defineix els ports que el servei exposarà.
  • type: El tipus de servei, en aquest cas, LoadBalancer per exposar l'aplicació a Internet.

Comandes per Crear el Service

kubectl apply -f service.yaml

  1. Configuració d'Ingress

Ingress gestiona l'accés extern als serveis dins del clúster.

Definició d'Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-app-ingress
spec:
  rules:
  - host: webapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-app-service
            port:
              number: 80

Explicació del Codi

  • rules: Defineix les regles per a l'accés extern.
  • host: El domini que gestionarà l'Ingress.
  • paths: Defineix els camins i els serveis de backend que gestionaran les sol·licituds.

Comandes per Crear l'Ingress

kubectl apply -f ingress.yaml

  1. Configuració de l'Emmagatzematge Persistent

Definició del PersistentVolume (PV)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: web-app-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

Definició del PersistentVolumeClaim (PVC)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: web-app-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Explicació del Codi

  • PersistentVolume: Defineix un volum físic en el clúster.
  • PersistentVolumeClaim: Sol·licita un volum persistent per a un Pod.

Comandes per Crear el PV i PVC

kubectl apply -f pv.yaml
kubectl apply -f pvc.yaml

  1. Gestió de la Configuració

Definició del ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: web-app-config
data:
  APP_ENV: "production"
  APP_DEBUG: "false"

Definició del Secret

apiVersion: v1
kind: Secret
metadata:
  name: web-app-secret
type: Opaque
data:
  DB_PASSWORD: cGFzc3dvcmQ=

Explicació del Codi

  • ConfigMap: Emmagatzema dades de configuració no sensibles.
  • Secret: Emmagatzema dades sensibles, com contrasenyes.

Comandes per Crear el ConfigMap i Secret

kubectl apply -f configmap.yaml
kubectl apply -f secret.yaml

Exercici Pràctic

Desplegar una Aplicació Web Completa

  1. Crea els fitxers YAML per al Pod, Service, Ingress, PersistentVolume, PersistentVolumeClaim, ConfigMap i Secret.
  2. Aplica cada fitxer utilitzant kubectl apply -f <fitxer>.yaml.
  3. Verifica que l'aplicació està funcionant accedint al domini configurat en l'Ingress.

Solució

kubectl apply -f pod.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml
kubectl apply -f pv.yaml
kubectl apply -f pvc.yaml
kubectl apply -f configmap.yaml
kubectl apply -f secret.yaml

Resum

En aquest tema, hem après a desplegar una aplicació web en Kubernetes utilitzant recursos bàsics com Pods, Services i Ingress. També hem configurat l'emmagatzematge persistent i gestionat la configuració de l'aplicació mitjançant ConfigMaps i Secrets. Aquestes habilitats són fonamentals per gestionar aplicacions en un entorn de producció amb Kubernetes.

Curs de Kubernetes

Mòdul 1: Introducció a Kubernetes

Mòdul 2: Components Bàsics de Kubernetes

Mòdul 3: Gestió de Configuració i Secrets

Mòdul 4: Xarxes en Kubernetes

Mòdul 5: Emmagatzematge en Kubernetes

Mòdul 6: Conceptes Avançats de Kubernetes

Mòdul 7: Monitorització i Registre

Mòdul 8: Seguretat en Kubernetes

Mòdul 9: Escalabilitat i Rendiment

Mòdul 10: Ecosistema i Eines de Kubernetes

Mòdul 11: Estudis de Cas i Aplicacions del Món Real

Mòdul 12: Preparació per a la Certificació de Kubernetes

© Copyright 2024. Tots els drets reservats