Рубрики
Uncategorized

Управление конфигурацией Kubernetes с Ansible (часть 1)

С 0 -й день я начал администрировать OpenShift в прошлом году, одну из основных вещей, которые я хотел, мы занялись W … с меткой Ansible, Kubernetes, Automation, DevOps.

С 0 -го дня я начал управлять OpenShift в прошлом году, одной из основных вещей, которые я хотел, мы занимаемся командой, было то, как управлять всей настройкой, которую мы должны были бы сделать. Я привык к программному обеспечению для автоматизации, от сценариев с голой оболочки (да, это автоматизация:) для таких вещей, как Puppet, Cfengine или Ansible, и я не могу себе представить, что сейчас управляет приложением, парком узлов, кластер, не имея возможности автоматизировать развертывание конфигурации.

Поэтому я делюсь здесь — не подробно — что мы сделали в нашей команде. Я разделил объяснение в нескольких постах. Это довольно просто, но эффективно, мы недавно начали регулярно запускать это задание из AWX в контрольном режиме, чтобы наблюдать дрейф конфигурации и рано или поздно запустить его в режиме запуска.

Установить план

Мы начали делать некоторый статус и требования к коллегам (это всегда важно это сделать)

  • Мы будем управлять несколькими кластерами.
  • Большая часть конфигурации кластеров будет одинаковой для всех кластеров.
  • Мы должны быть в состоянии развернуть для каждого кластера некоторые конкретные манифесты
  • Те же самые манифесты будут развернуты на нескольких кластерах, но могут немного отличаться (например, значения квот), и мы не хотим хранить все эти проявления только ради разных значений внутри. Таким образом, мы должны быть в состоянии иметь заполнителя в манифестах, которые будут заполнены каждым кластером.
  • Мы должны быть в состоянии добавить манифесты, а также удалить манифесты из кластера.

Структура каталога

Вот пример структуры мы выбрали

project-dir
├── config
│   ├── common.yml
│   ├── dev.yml
│   └── prod.yml
└── manifests
    ├── common
    │   ├── 05_authentication
    │   ├── 10_feature_foo
    │   └── 30_feature_baz
    ├── dev
    │   ├── 40_feature_dev_buz
    │   └── 60_feature_dev_buu
    └── prod
        ├── 50_feature_prod_bar
        └── 70_feature_prod_boo

Каталог конфигурация Содержит файл YAML для каждого кластера, с деталями соединения и всеми конкретными переменными, файл Common.yml Содержит общие и по умолчанию переменные.

# prod config file
connection:
  - url: https://prd.prj.domain.tld
    token: !vault....

ldap_connection:
  - bind_user: cn=ldap-prd-user,...
    bind_password: !vault...

authorized_groups:
  -  group-dev-1
  -  group-dev-2
  -  group-dev-3

# other prod specific variables

Конвенция об именах файлов

Мы думаем о соглашении о именовании для манифестных файлов, не то, чтобы оно обеспечило соблюдение содержимого в файле (исключение, сделанное в поле Статус Мы придумали Конвенцию Xx_kind_name_namespace_status.yml куда

  • XX это число, на которое помогает применять манифест в определенном порядке.
  • добрый это вид манифеста ( развертывание , configmap , …).
  • имя это значение файла Metadata.name объекта, который будет изменен.
  • Пространство имен это пространство имен, к которому принадлежит объект. Если объект не намечен на имена, как пространство имен или кластеррол, мы устанавливаем значение на Глобал Анкет
  • Статус имеет либо значение настоящий чтобы убедиться, что он существует или отсутствует чтобы убедиться, что его не существует. Это значение во имя файла будет для модуля K8s и будет обеспечивать состояние манифеста.

Несколько примеров

Чтобы лучше понять, как это работает, дайте взглянуть

  • Манифестный файл для создания пространства имен FOOBAR будет назван 10_namespace_foobar_global_present.yml
  • Развертывание с именем Fluentd в пространстве имен кластер-логинг будет назван 30_deployment_fluentd_cluster-logging_present.yml
  • Манифест, чтобы удалить configmap названный My-Config в пространстве имен dev-hideout будет назван Xx_configmap_my-config_dev-hideouts_absent.yml

Теперь у нас был обзор структуры проекта, следующий пост объяснит Ansible Playbook.

Оригинал: «https://dev.to/baptistemm/kubernetes-configuration-management-with-ansible-part-1-4aem»