k8s_manifests
Ansible роль: K8s манифесты
Роль Ansible, которая применяет манифесты Kubernetes (либо с шаблонами, либо напрямую) к кластерам Kubernetes.
Требования
- Пакет Pip:
openshift
- Если вы запускаете на локальном хосте (например, с
connection: local
), вам может понадобиться установитьansible_python_interpreter: "{{ ansible_playbook_python }}"
, чтобы роль работала правильно.
Переменные роли
Доступные переменные перечислены ниже, вместе с значениями по умолчанию (см. defaults/main.yml
):
k8s_manifests:
# Может быть путь внутри `k8s_manifests_base_dir`.
- monitoring/prometheus
# Используйте поиск `file`, если не хотите шаблонизировать файл манифеста.
- dir: monitoring/grafana-configmap
lookup_type: 'file'
# Вы можете установить пространство имен для каждого манифеста (шаблонизируется в `manifest_namespace`).
- dir: docker-registry
namespace: registry
Список каталогов манифестов Kubernetes для применения к кластеру Kubernetes. Этот список может быть либо сырыми путями каталогов, либо названиями папок, или может быть словарем с dir
(путь к каталогу/имя папки), необязательным lookup_type
(тип поиска Ansible, используемый для файла manifest.yml
), и необязательным namespace
(шаблонизируется в manifest_namespace
).
Эта роль затем ищет внутри указанного каталога для каждого манифеста и применяет файл manifest.yml
(и все его содержимое), используя модуль Ansible k8s
.
Если вам нужно шаблонизировать файл, эта роль по умолчанию шаблонизирует файл manifest.yml
(и автоматически добавляет любые переменные из файла vars.yml
рядом с файлом manifest.yml
). Но вы также можете отключить шаблонизацию и применить манифест напрямую, установив lookup_type: file
.
k8s_manifests_base_dir: '' # добавьте завершающий /, например, 'base_dir/'
Если установлено, эта строка будет добавлена перед каждым манифестом dir
/путем, указанным в k8s_manifests
. Это полезно, если вы хранили все свои манифесты Kubernetes в каталоге вне каталога плейбука Ansible, чтобы вам не пришлось указывать полный путь в каждом элементе списка k8s_manifests
.
k8s_manifests_state: present
Определяет, должно ли состояние для модуля k8s
быть present
или absent
. Обратите внимание, что использование absent
не всегда удаляет все ресурсы Kubernetes, определенные в манифесте.
k8s_force: false
Если установлено в true
, и k8s_manifests_state
установлено в present
, существующий объект будет заменен. В противном случае поведение по умолчанию для модуля k8s
Ansible и самого Kubernetes (например, если используется apply
) - обновить ресурс.
k8s_kubeconfig: ~/.kube/config
Путь к файлу kubeconfig
, используемому для подключения к кластеру Kubernetes.
k8s_resource_namespace: ''
k8s_manage_namespace: true
По умолчанию эта роль предполагает, что вы будете разворачивать ресурсы в определенном пространстве имен. Так что если вы установите k8s_resource_namespace
в пространство имен, с которым вы работаете, роль убедится, что это пространство имен существует перед применением любых манифестов. Вы можете отключить управление пространством имен этой ролью (например, если манифест, который вы применяете, не должен быть в пространстве имен, или если вы применяете пространства имен для каждого манифеста), установив k8s_manage_namespace: false
.
k8s_no_log: true
Следует ли регистрировать детали применения каждого манифеста в кластер в выводе Ansible. Секреты и другие чувствительные данные могут быть частью манифеста, поэтому по умолчанию это установлено на безопасный режим. Установите false
для отладки.
Зависимости
Нет.
Примеры плейбуков
Простой пример - запуск на локальном хосте
---
- 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
Посмотрите каталог k8s-manifests
и его README для примера разметки шаблона манифеста с определенным файлом переменных рядом с ним.
Запуск в рамках большего плейбука
---
- 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: Установить соответствующий интерпретатор python.
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
Лицензия
MIT / BSD
Информация об авторе
Эта роль была создана в 2018 году Джеффом Гирлингом, автором Ansible for DevOps.
Kubernetes manifest management role.
ansible-galaxy install geerlingguy/ansible-role-k8s_manifests