Ansible et Kubernetes 28 min de lecture

Module k8s et gestion de ressources

Collection kubernetes.core

La collection kubernetes.core fournit les modules pour interagir avec les clusters Kubernetes.

ansible-galaxy collection install kubernetes.core
pip install kubernetes

Module k8s : creer des ressources

Le module k8s permet d'appliquer des manifestes Kubernetes directement depuis Ansible.

- name: Creer un namespace
  kubernetes.core.k8s:
    state: present
    definition:
      apiVersion: v1
      kind: Namespace
      metadata:
        name: production

- name: Deployer une application
  kubernetes.core.k8s:
    state: present
    definition:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: web-app
        namespace: production
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: web-app
        template:
          metadata:
            labels:
              app: web-app
          spec:
            containers:
            - name: web
              image: "{{ app_image }}:{{ app_tag }}"
              ports:
              - containerPort: 8080
              resources:
                requests:
                  memory: "128Mi"
                  cpu: "100m"
                limits:
                  memory: "256Mi"
                  cpu: "200m"

Appliquer un fichier YAML externe

- name: Appliquer un manifeste YAML
  kubernetes.core.k8s:
    state: present
    src: /path/to/deployment.yaml

- name: Appliquer depuis un template
  kubernetes.core.k8s:
    state: present
    template: deployment.yaml.j2

Interroger les ressources

- name: Lister les pods du namespace
  kubernetes.core.k8s_info:
    kind: Pod
    namespace: production
    label_selectors:
      - app=web-app
  register: pod_list

- name: Afficher les pods
  ansible.builtin.debug:
    msg: "Pod {{ item.metadata.name }} - {{ item.status.phase }}"
  loop: "{{ pod_list.resources }}"

Attendre qu'une ressource soit prete

- name: Attendre que le Deployment soit pret
  kubernetes.core.k8s_info:
    kind: Deployment
    name: web-app
    namespace: production
    wait: true
    wait_condition:
      type: Available
      status: "True"
    wait_timeout: 300
Conseil : Utilisez k8s_info avec wait pour synchroniser vos deploiements et eviter les erreurs de timing.