Introducció

En aquest tema, explorarem com Ansible pot ser utilitzat per gestionar i automatitzar Kubernetes, una plataforma de codi obert per a l'orquestració de contenidors. Aprendrem a desplegar aplicacions, gestionar configuracions i mantenir la infraestructura de Kubernetes utilitzant Ansible.

Objectius

  • Entendre com Ansible pot interactuar amb Kubernetes.
  • Aprendre a utilitzar mòduls d'Ansible per gestionar recursos de Kubernetes.
  • Desplegar aplicacions en un clúster de Kubernetes utilitzant Playbooks d'Ansible.
  • Gestionar configuracions i mantenir la infraestructura de Kubernetes amb Ansible.

Requisits Prèvis

  • Coneixements bàsics de Kubernetes.
  • Coneixements bàsics d'Ansible.
  • Un clúster de Kubernetes operatiu.
  • Ansible instal·lat en la teva màquina local.

Mòduls d'Ansible per Kubernetes

Ansible proporciona diversos mòduls per interactuar amb Kubernetes. A continuació, es mostren alguns dels mòduls més utilitzats:

Mòdul Descripció
k8s Gestiona recursos de Kubernetes (crea, actualitza, elimina).
k8s_facts Obté informació sobre els recursos de Kubernetes.
k8s_auth Gestiona l'autenticació amb el clúster de Kubernetes.
k8s_scale Escala un objecte de Kubernetes (per exemple, un Deployment).
k8s_service Gestiona serveis de Kubernetes.

Exemple Pràctic: Desplegant una Aplicació en Kubernetes

  1. Configuració del Fitxer d'Inventari

Primer, hem de definir el nostre inventari. Crearem un fitxer inventory.ini:

[k8s_cluster]
k8s-master ansible_host=192.168.1.100 ansible_user=root

  1. Playbook per Desplegar una Aplicació

Crearem un Playbook d'Ansible per desplegar una aplicació en el nostre clúster de Kubernetes. Crearem un fitxer deploy_app.yml:

---
- name: Desplegar aplicació en Kubernetes
  hosts: k8s_cluster
  tasks:
    - name: Autenticar-se amb el clúster de Kubernetes
      k8s_auth:
        kubeconfig: /root/.kube/config

    - name: Crear un Namespace
      k8s:
        state: present
        definition:
          apiVersion: v1
          kind: Namespace
          metadata:
            name: my-namespace

    - name: Desplegar un Deployment
      k8s:
        state: present
        definition:
          apiVersion: apps/v1
          kind: Deployment
          metadata:
            name: my-app
            namespace: my-namespace
          spec:
            replicas: 3
            selector:
              matchLabels:
                app: my-app
            template:
              metadata:
                labels:
                  app: my-app
              spec:
                containers:
                - name: my-app
                  image: nginx:latest
                  ports:
                  - containerPort: 80

    - name: Crear un Service
      k8s:
        state: present
        definition:
          apiVersion: v1
          kind: Service
          metadata:
            name: my-app-service
            namespace: my-namespace
          spec:
            selector:
              app: my-app
            ports:
            - protocol: TCP
              port: 80
              targetPort: 80

  1. Executar el Playbook

Per executar el Playbook, utilitzarem la següent comanda:

ansible-playbook -i inventory.ini deploy_app.yml

Exercici Pràctic

Desplegar una Aplicació amb ConfigMap

  1. Objectiu: Desplegar una aplicació en Kubernetes que utilitzi un ConfigMap per a la seva configuració.

  2. Passos:

    • Crear un ConfigMap.
    • Desplegar un Deployment que utilitzi el ConfigMap.
    • Crear un Service per exposar l'aplicació.
  3. Playbook:

---
- name: Desplegar aplicació amb ConfigMap en Kubernetes
  hosts: k8s_cluster
  tasks:
    - name: Autenticar-se amb el clúster de Kubernetes
      k8s_auth:
        kubeconfig: /root/.kube/config

    - name: Crear un ConfigMap
      k8s:
        state: present
        definition:
          apiVersion: v1
          kind: ConfigMap
          metadata:
            name: my-config
            namespace: my-namespace
          data:
            my_key: my_value

    - name: Desplegar un Deployment que utilitzi el ConfigMap
      k8s:
        state: present
        definition:
          apiVersion: apps/v1
          kind: Deployment
          metadata:
            name: my-app
            namespace: my-namespace
          spec:
            replicas: 3
            selector:
              matchLabels:
                app: my-app
            template:
              metadata:
                labels:
                  app: my-app
              spec:
                containers:
                - name: my-app
                  image: nginx:latest
                  ports:
                  - containerPort: 80
                  env:
                  - name: MY_ENV_VAR
                    valueFrom:
                      configMapKeyRef:
                        name: my-config
                        key: my_key

    - name: Crear un Service
      k8s:
        state: present
        definition:
          apiVersion: v1
          kind: Service
          metadata:
            name: my-app-service
            namespace: my-namespace
          spec:
            selector:
              app: my-app
            ports:
            - protocol: TCP
              port: 80
              targetPort: 80

Solució

Executa el Playbook anterior utilitzant la següent comanda:

ansible-playbook -i inventory.ini deploy_app_with_configmap.yml

Resum

En aquest tema, hem après com utilitzar Ansible per gestionar i automatitzar Kubernetes. Hem vist com utilitzar mòduls d'Ansible per crear i gestionar recursos de Kubernetes, i hem desplegat una aplicació en un clúster de Kubernetes utilitzant un Playbook d'Ansible. També hem realitzat un exercici pràctic per reforçar els conceptes apresos. En el proper tema, explorarem com integrar Ansible amb altres eines de DevOps.

© Copyright 2024. Tots els drets reservats