Как автоматизировать настройку Kubernetes? - PullRequest
0 голосов
/ 20 февраля 2020

Я хотел бы автоматизировать свою конфигурацию Kubernetes, например Ansible для виртуальных машин.

Пример сценария:

  1. Создание гавани пространства имен
  2. Развертывание гавани через Шлем https://github.com/goharbor/harbor-helm

Какой вид инструмента подходит для таких сценариев? Могу ли я также использовать терраформ?

1 Ответ

1 голос
/ 20 февраля 2020

Я полностью согласен с @ P Ekambaram , что автоматизация kubernetes может быть успешно выполнена с ansible, но в то же время я полностью не согласен с ним, когда дело доходит до того, как это должно быть сделано. Такой «декларативный» код на самом деле вообще не декларативен. Он превращается в простую обертку для набора императивных команд. Кроме того, такая пьеса не является идемпотентным (напомним, что операция является идемпотентной, если результат ее однократного выполнения точно такой же, как и результат ее многократного выполнения без каких-либо вмешательств .). Этот подход противоречит одному из ключевых понятий, представленных в ansible.

shell или command модулях, которые следует использовать в ansible как Модули последней инстанции, только если нет другого способа выполнить требуемую задачу, например, когда выделенный модуль не существует или не обладает некоторыми важными функциями.

Когда дело доходит до автоматизации kubernetes с помощью ansible, такие выделенные модули уже существуют.

Взгляните на модуль k8s - ansible для управления объектами kubernetes , и вы увидите, что желаемых результатов можно достичь гораздо более элегантный и понятный способ:

создание пространства имен:

- name: Create a k8s namespace
  k8s:
    name: testing
    api_version: v1
    kind: Namespace
    state: present

создание службы на основе файла определения yaml

- name: Create a Service object by reading the definition from a file
  k8s:
    state: present
    src: /testing/service.yml

Вы только что упомянули, что используете helm для управления kubernetes приложениями? Взгляните на документацию на штурвал . Есть примеры? Вот вы:

- name: Install helm chart from a git repo
  helm:
    host: localhost
    chart:
      source:
        type: git
        location: https://github.com/user/helm-chart.git
    state: present
    name: my-example
    namespace: default

обновление:

Чтобы иметь возможность запускать большинство Ansible модулей на определенном хосте, вам необходимо установить на него два вещи:

  • python 2.7
  • s sh сервер

Хотя это верно для большинства модулей, некоторые из них имеют дополнительные требования, которые должны быть выполнены, прежде чем модуль может быть запущен на таком хосте.

Когда дело доходит до модуля k8s, как мы можем прочитать в его документах :

Для хоста, который выполняет это, необходимы следующие требования module.

python >= 2.7
openshift >= 0.6
PyYAML >= 3.11

Это неправда, что требуется openshift (другая реализация kubernetes). Не имеет смысла устанавливать openshift для управления рабочей нагрузкой нашего kubernetes cluster . Итак, давайте будем точны, чтобы не распространять потенциально вводящую в заблуждение информацию: для этого требуется OpenShift python клиентская библиотека и она должна быть установлена ​​на хосте, на котором работает модуль ( т.е. на хосте, на котором мы обычно выполняем наши kubectl команды).

Клиент OpenShift Python оборачивает клиента K8s Python, предоставляя полный доступ ко всем доступным APIS и моделям на обеих платформах. Для получения подробной информации о версии API и дополнительной информации посетите страницу https://github.com/openshift/openshift-restclient-python

Внимание!: Вам не нужно устанавливать какие-либо дополнительные модули на узлах kubernetes. Они нужны вам только на машине, с которой вы управляете рабочей нагрузкой kubernetes .

Если у нас установлен Ansible на том же хосте, на котором мы настроили наш инструмент kubectl, и мы хотим запускать на нем наши игровые книги напрямую, без необходимости использования s sh или настройки ansible инвентарь , нам просто нужно обратиться к нему в нашей ansible playbook as:

hosts: localhost
connection: local

Вся книга воспроизведения для создания нового пространства имен k8s может выглядеть так:

---
- hosts: localhost
  connection: local
  tasks:
  - name: Create a k8s namespace
    k8s:
      name: testing
      api_version: v1
      kind: Namespace
      state: present

И мы можем запустить его просто выполнив:

ansible-playbook playbook.yaml

Прежде чем мы сможем это сделать, нам нужно убедиться, что у нас установлены все необходимые зависимости, которых на самом деле не так много, и они ограничиваются python 2.7 и две вышеупомянутые библиотеки (в необходимых версиях).

После того, как на вашем хосте установлено Python, самый простой способ установить остальные необходимые зависимости - выполнить runnig:

pip install openshift

и

pip install PyYAML

Вы можете столкнуться со следующей ошибкой:

"msg": "Failed to import the required Python library (openshift) on ***** Python /usr/bin/python. Please read module documentation and install in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter"

Если это так, запуск:

pip install --upgrade requests

должен исправить это (по крайней мере, это исправило это в моем случае), и после этого наш простой ansible playbook , который создает новый namespace в нашем kubernetes кластере , должен работать гладко. :)

...