geerlingguy.k8s_manifests

Rol de Ansible: Manifiestos de K8s

CI

Un rol de Ansible que aplica manifiestos de Kubernetes (ya sea plantillas o directamente) a clústeres de Kubernetes.

Requisitos

  • Paquete Pip: openshift
  • Si se ejecuta en localhost (por ejemplo, con connection: local), puede que necesite establecer ansible_python_interpreter: "{{ ansible_playbook_python }}" para que el rol funcione correctamente.

Variables del Rol

Las variables disponibles se enumeran a continuación, junto con sus valores predeterminados (ver defaults/main.yml):

k8s_manifests:
  # Puede ser una ruta dentro de `k8s_manifests_base_dir`.
  - monitoring/prometheus

  # Usa una búsqueda `file` si no quieres plantillar el archivo del manifiesto.
  - dir: monitoring/grafana-configmap
    lookup_type: 'file'

  # Puedes establecer un namespace por manifiesto (plantillado a `manifest_namespace`).
  - dir: docker-registry
    namespace: registry

Una lista de directorios de manifiestos de Kubernetes para aplicar a un clúster de Kubernetes. Esta lista puede ser rutas de directorios o nombres de carpetas, o puede ser un diccionario con dir (la ruta del directorio/nombre de la carpeta), lookup_type opcional (el tipo de búsqueda de Ansible utilizado para el archivo manifest.yml), y namespace opcional (plantillado a manifest_namespace).

Este rol busca dentro del directorio especificado para cada manifiesto y aplica un archivo manifest.yml (y todo su contenido) usando el módulo k8s de Ansible.

Si necesitas plantillar el archivo, este rol planta el archivo manifest.yml por defecto (y añade automáticamente cualquier variable en un archivo vars.yml junto al archivo manifest.yml). Pero también puedes desactivar la plantilla y aplicar el manifiesto directamente estableciendo lookup_type: file.

k8s_manifests_base_dir: '' # incluye / al final, por ejemplo 'base_dir/'

Si se establece, esta cadena se antepondrá a cada manifiesto dir/ruta especificada en k8s_manifests. Esto es útil si almacenas todos tus manifiestos de Kubernetes en un directorio fuera del directorio del playbook de Ansible, para que no tengas que incluir la ruta completa en cada elemento de la lista k8s_manifests.

k8s_manifests_state: present

Si el state para el módulo k8s debe ser present o absent. Ten en cuenta que usar absent no siempre elimina todos los recursos de Kubernetes definidos en un manifiesto.

k8s_force: false

Si se establece en true, y k8s_manifests_state está configurado como present, un objeto existente se reemplazará. De lo contrario, el comportamiento predeterminado del módulo k8s de Ansible y de Kubernetes (por ejemplo, si se usa apply) es parchear el recurso.

k8s_kubeconfig: ~/.kube/config

La ruta al archivo kubeconfig que se utilizará para conectarse al clúster de Kubernetes.

k8s_resource_namespace: ''
k8s_manage_namespace: true

Por defecto, este rol asume que desplegarás recursos en un namespace particular. Así que si estableces k8s_resource_namespace en el namespace con el cual estás operando, el rol se asegurará de que ese namespace exista antes de aplicar cualquier manifiesto. Puedes desactivar la gestión de namespaces de este rol (por ejemplo, si el manifiesto que estás aplicando no debería tener un namespace, o si aplicas namespaces por manifiesto) estableciendo k8s_manage_namespace: false.

k8s_no_log: true

Si se debe registrar los detalles de la aplicación de cada manifiesto al clúster en la salida de Ansible. Los secretos y otros datos sensibles podrían formar parte de un manifiesto, por lo que esto se establece como seguro por defecto. Establece en false para fines de depuración.

Dependencias

Ninguna.

Ejemplos de Playbooks

Ejemplo simple - ejecución en localhost

---
- hosts: localhost
  connection: local
  gather_facts: no

  vars:
    ansible_python_interpreter: "{{ ansible_playbook_python }}"
    k8s_kubeconfig: ~/.kube/config-my-cluster
    k8s_manifests_base_dir: k8s-manifests/
    k8s_manifests:
      - storageclass

  roles:
    - role: geerlingguy.k8s_manifests

Ve el directorio k8s-manifests y su README para un ejemplo de diseño de manifiesto plantillado con un archivo vars definido junto a él.

Ejecución como parte de un play más grande

---
- hosts: k8s_cluster
  become: true

  vars:
    ansible_python_interpreter: python
    k8s_manage_namespace: false
    k8s_no_log: false
    k8s_manifests_base_dir: k8s-manifests/
    k8s_manifests:
      - storageclass
      - dir: docker-registry
        namespace: registry

  tasks:
    - name: Establecer el intérprete de Python apropiadamente.
      set_fact:
        ansible_python_interpreter: "{{ ansible_playbook_python }}"

    - import_role:
        name: geerlingguy.k8s_manifests
      tags: ['kubernetes', 'nfs', 'drupal', 'registry']
      delegate_to: localhost
      become: false
      run_once: true

Licencia

MIT / BSD

Información del Autor

Este rol fue creado en 2018 por Jeff Geerling, autor de Ansible for DevOps.

Acerca del proyecto

Kubernetes manifest management role.

Instalar
ansible-galaxy install geerlingguy.k8s_manifests
Licencia
mit
Descargas
15.2k
Propietario
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns