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.
- 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
- 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
- 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
- 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
- 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
Exercici Pràctic
Desplegar una Aplicació Web Completa
- Crea els fitxers YAML per al Pod, Service, Ingress, PersistentVolume, PersistentVolumeClaim, ConfigMap i Secret.
- Aplica cada fitxer utilitzant
kubectl apply -f <fitxer>.yaml
. - 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
- Què és Kubernetes?
- Arquitectura de Kubernetes
- Conceptes i Terminologia Clau
- Configuració d'un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
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
- Monitorització amb Prometheus
- Registre amb Elasticsearch, Fluentd i Kibana (EFK)
- Controls de Salut i Probes
- Servidor de Mètriques
Mòdul 8: Seguretat en Kubernetes
- Control d'Accés Basat en Rols (RBAC)
- Polítiques de Seguretat de Pods
- Seguretat de Xarxa
- Seguretat d'Imatges
Mòdul 9: Escalabilitat i Rendiment
- Autoscalat Horitzontal de Pods
- Autoscalat Vertical de Pods
- Autoscalat de Clúster
- Optimització del Rendiment
Mòdul 10: Ecosistema i Eines de Kubernetes
Mòdul 11: Estudis de Cas i Aplicacions del Món Real
- Desplegament d'una Aplicació Web
- CI/CD amb Kubernetes
- Execució d'Aplicacions Stateful
- Gestió Multi-Clúster