Автоматизировать развертывание в Kubernetes - PullRequest
0 голосов
/ 30 апреля 2019

Мне интересно знать, как лучше всего автоматизировать YAML развертывания в Kubernetes

У меня есть установка cert-manager helm, манифест kong YAML и ресурс Ingress, созданный, установленныйи работает в кластере Kubernetes

Это развертывание обеспечивает мне шифрование TLS для передачи протокола https в службу приложений, которая также устанавливается через helm (я создал для него таблицу управления)

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

Может бытьВажно помнить, что все эти развертывания cert-manager, kong и Ingress связаны с моим приложением-службой helm chart, которое я создал, поэтому я развертывал следующее:

  1. Я создал таблицу управления приложениями-службами и установил ее с помощью команды helm install ...

  2. Я установил kong и kong-ingress-controller из манифеста YAML, используя Postgres как внешнюю службу.

  3. Я установил cert-manager через helm, добавив его helm repo add jetstack https://charts.jetstack.io и выполнив

helm install \
    --name cert-manager \
    --namespace cert-manager \
    --version v0.7.0 \
    jetstack/cert-manager
Кроме того, я создал ресурсы Ingress и KongIngress, чтобы разрешить доступ к моей службе приложений рулевого управления и разрешить управлять операциями входа и другими действиями, такими как маршруты, сертификаты и создание службы, а такжесвязать что-то вроде плагина basic-auth с моим сервисным приложением

Весь этот процесс был выполнен с помощью kubectl apply ... выполнения файлов YAML, а также команды helm .... из CLI.

Это означаетТо, что в настоящее время этот процесс сильно зависит от человеческих событий, и я хотел бы автоматизировать некоторые процессы, такие как процесс установки kong и cert-manager и даже, если возможно, создание Ingress.

Do IПрав ли я, когда думаю, что это возможно?

Как лучше всего это сделать?

Я читал и смотрел в некоторых местах, а некоторыелюди также сориентировали меня в следующих альтернативах:

  • Из моего приложения рулевого управления?

    Я читалу этого руля есть что-то с именем hooks

Сам hooks описывает следующее:

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

загрузки ConfigMap или Secret во время установки перед загрузкой любых других диаграмм.

Выполнение задания для резервного копирования базы данных перед установкой новой диаграммы изатем выполните второе задание после обновления, чтобы восстановить данные.

Запустите задание перед удалением выпуска, чтобы аккуратно вывести службу из ротации перед ее удалением

Может бытькрюк руля подойдет к хорошему варианту?Я думаю, что с их помощью я могу автоматизировать или, по крайней мере, приложение helm chart взять на себя создание секретов и некоторые pre/post-deployment.

Могу ли я рассмотреть ресурсы kong, cert-manager и Ingressоперации (выполнение команд и файлов YAML), такие как операции или действия, которые должны управляться хуками helm?

  • Подход Terraform: обеспечение развертывания (некоторые шаги или полностью) из него.

В компании terraform есть провайдеры Helm и Kubernetes.Я мог бы изучить эту возможность установки этих пакетов программного обеспечения из сценариев terraform.

Этот подход terraform может быть полезен для установки my helm chart application и cert-manager helm

Kong также как terraformпровайдер

В настоящее время существуют некоторые сторонние репозитории для работы с kong от terraform. Terraform Provider Kong для меня это более уместно, поскольку я использую службу Azure Kubernetes, и различные конфигурации ресурсов, которые можно реализовать, выглядят очень хорошо.Я не уверен, что мне придется вводить вручную что-то вроде ресурсов certificates, route, когда я работаю с kong-ingress-controller и связью cert-manager, но даже этот поставщик terraform kong позволяет мне импортировать существующие маршрутыterraform import kong_route.<route_identifier> <route_id>

Можно ли применить это к certificates и другим ресурсам?

  • Использование сценариев Python

Чтооб автоматизации развертываний через Python?Как идут дела с этой альтернативой?Возможно ли это, взаимодействуя от python до kubernetes и выполняя операции команд, которые я описал выше (kubectl и helm для создания ресурсов из файлов YAML и диаграмм рулевого управления, доступных в локальных и удаленных репозиториях)

Inутвердительный случай ... Как я могу обратиться к этой опции?

Я нашел эту опцию, которая использует ansible , но она включает в себя некоторые другие вещи, такие как Automate broker ansible и каталог услуг Kubernetes, которыена данный момент мне неизвестно.

  • Использование ноутбуков Jupyter.

Могу ли я создать эти ресурсы (Ingress и kong и cert-managerустановка и настройка) через ноутбуки Jupyter, записывая напрямую в кластер Kubernetes?Это возможно?Как я могу это сделать?

Итак, я думаю, что подход terraform (использование провайдеров helm и kong было бы очень полезным инструментом из инфраструктуры с точки зрения кода, но я не уверенесли бы я выбрал его, может быть, есть ли более сложные альтернативы?

Кто-то провел автоматизацию ресурсов и вещей в кластере Kubernetes. Я полагаю, что это нормальный или ожидаемый процесс, хотя это мой первыйвремя.

Если кто-то может указать мне правильный подход к решению моего конкретного сценария, я буду очень признателен. :) 1155 *

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Возможное решение состоит в том, чтобы использовать initContainer, который будет ожидать, пока другие службы не будут работать.

Как правило, для данного приложения A и B вы будете использовать helmfile или helmfile для событий, чтобы развернуть их оба нав то же время.Но для модуля B вы добавите initContainer, который будет проверять, скажем, каждые 10 секунд, если служба A запущена.Делая это, вы уверены, что служба B запустится только тогда, когда служба A будет полностью запущена и готова.Вы можете взглянуть на https://kubernetes.io/docs/concepts/workloads/pods/init-containers/. Это требует настройки livenessProbe и readynessProbe.

Обратите внимание, что на самом деле это не будет порядком установки диаграмм, просто убедитесь, что каждая служба будет ожидать зависимостей перед запуском.И вы можете установить несколько диаграмм одновременно, используя helmfile (https://github.com/roboll/helmfile).

1 голос
/ 30 апреля 2019

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

Вы могли бы написать скрипт Python, который устанавливает диаграммы один за другим, используя PyHelm (полное раскрытие - я один из сопровождающих пакета).

Кроме того, вы можете использовать крючки Helm для управления порядком установки, который может позаботиться о ваших дополнительных ямах (например, с помощью ловушек после установки / обновления).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...