k8s_manifests

Ansible роль: K8s манифесты

CI

Роль 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
Лицензия
mit
Загрузки
15158
Владелец
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns