geerlingguy.k8s_manifests
Rol de Ansible: Manifiestos de K8s
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 estableceransible_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.
Kubernetes manifest management role.
ansible-galaxy install geerlingguy.k8s_manifests