Развертывает приложения в Kubernetes.
- Развертывание приложений при помощи манифестов.
- Развертывание приложений при помощи kustomize.
- Манифесты могут содержать переменные окружения.
- Содержит проверку безопасности объектов Kubernetes.
- Содержит проверку безопасности docker-образов.
- Наличие режима пробного запуска в котором выполняется сборка манифестов без их применения.
docker build \
--build-arg VAULT_URL=<host-to-vault> \
--build-arg VAULT_APPROLE_ID=<vault-approle-id> \
--build-arg VAULT_APPROLE_SECRET=<vault-approle-secret> \
--build-arg VAULT_SECRETS_PREFIX=<vault-secret-prefix> \
-t kubedeployer \
-f Dockerfile .
- VAULT_URL - URL по которому доступен Vault.
- VAULT_APPROLE_ID - идентификатор approle позволяющий проходить аутентификацию с ролью, определенной в Vault.
- VAULT_APPROLE_SECRET - секрет approle.
- VAULT_SECRETS_PREFIX - шаблон пути к секретам с настройками подключения к Kubernetes. По заданному шаблону Kubedeployer находит секреты и из них выбирает тот у котого URL кластера совпадает (пример шаблона: template/to/cluster/*/secret).
kubedeploy options
Пример
kubedeploy -d orthodox --dry-run --env-file ./base.txt ./production.txt
- -d, --deployer=smart: вариант деплоера:
- orthodox - совместимость со старым вариантом деплоя, когда в проекте присутствуют только yaml манифесты, внутри которых могут быть заданы переменные окружения;
- kustomize - в проекте предполагается наличие kustomization.yaml;
- smart - совмещает в себе вышеперечисленные варианты.
- --dry-run: включает режим сборки мафестов в один общий без применения его на стороне кластера;
- --env-file list: считывает переменные окружения из перечисленных файлов. Если переменная окружения задана в нескольких файлах, то её итоговое значение будет взято из последнего файла в том порядке, в котором они перечислены.
deploy:
stage: deploy
image: kubedeployer
environment:
name: development
variables:
KUBE_URL: $KUBERNETES_URL
KUBE_TOKEN: $KUBERNETES_TOKEN
KUBE_NAMESPACE: $KUBERNETES_NAMESPACE
ENVIRONMENT: $APPLICATION_ENVIRONMENT
MANIFEST_FOLDER: ./manifests
script:
- kubedeploy
# Адрес Kubernetes кластера в котором необходимо развернуть приложение.
KUBE_URL: "https://kube.local"
# Путь к каталогу внутри проета содержащего манифесты.
MANIFEST_FOLDER: "./manifests"
# По умолчанию kubectl сохраняет настройки подключения в
# файле ${HOME}/.kube/config. В случае, если необходимо
# сохранять настройки в другой файл, то неоходимо указать
# к нему путь в данной переменной окружения.
KUBECONFIG: "${HOME}/.kube/config"
# Токен доступа к API Kubernetes.
KUBE_TOKEN: "ey3423423423dfeg34gr34..."
# В каком пространстве Kubernetes необходимо развернуть
# по умолчанию приложение, если пространство явно не
# указано в манифестах.
KUBE_NAMESPACE: "default"
# Название среды окружения, например, dev, stage, prod
# (пустое значение по умолчанию). Указывает на каталог,
# находящийся внутри MANIFEST_FOLDER и содержит манифесты,
# которые необходимо применить для той или иной среды
# окружения (см. примеры).
ENVIRONMENT: "development"
# Скрыть или отобразить в консоли манифесты, которые
# будут применены.
SHOW_MANIFESTS: "False"
# Сканировать docker-образы соответствующие заданному
# регулярному выражению. По умолчанию значение будет
# взято из переменной окружения CI_REGISTRY.
TRIVY_IMAGE_TEMPLATE: "registry\.example\.com"
В момент запуска Kubedeployer определяет каталоги внутри которых будет
выполняться поиск манифестов. Основной каталог задается при помощи переменной
окружения MANIFEST_FOLDER
, так же можно задать расширенный поиск относительно
основного каталога при помощи переменной окружения ENVIRONMENT
, например:
└── applications
└── manifests
├── development
│ ├── configurations
│ │ └── cm.yaml
│ └── ingress.yaml
├── deployment.yaml
└── svc.yaml
I. Каталоги для поиска при заданной переменной окружения MANIFEST_FOLDER:
MANIFEST_FOLDER = ./manifests
./manifests
II. Каталоги для поиска при заданных переменных MANIFEST_FOLDER и ENVIRONMENT
(в данном случае подкаталога production внутри manifests не существует):
MANIFEST_FOLDER = ./manifests
ENVIRONMENT = production
./manifests
III. Каталоги для поиска при заданных переменных MANIFEST_FOLDER и ENVIRONMENT:
MANIFEST_FOLDER = ./manifests
ENVIRONMENT = development
./manifests
./manifests/development
./manifests/development/configurations
Внутри полученного перечня каталогов будет осуществляться поиск файла с именем
kustomization.yaml
. В результате поиска возможны следующие сценарии:
kustomization.yaml
успешно обнаружен.- В случае, если Kubedeployer обнаружит несколько
kustomization.yaml
, то будет вызвана ошибка, в которой будут перечислены все найденныеkustomization.yaml
. Для решения проблемы необходимо вMANIFEST_FOLDER
указать путь до каталога, где находится нужныйkustomization.yaml
. - Если
kustomization.yaml
не удается обнаружить, то Kubedeployer создаст его вMANIFEST_FOLDER
в секцииresources
которого будут указаны ссылки на всеyaml
файлы, найденные в полученном перечне каталогов.
Примеры:
-
Пример проекта без kustomization.yaml
└── applications └── manifests ├── development │ ├── cm.yaml │ └── ingress.yaml ├── production │ ├── cm.yaml │ └── ingress.yaml ├── deployment.yaml └── svc.yaml MANIFEST_FOLDER = ./manifests ENVIRONMENT = development В результате работы Kubedeployer создаст kustomization.yaml: ./manifests/kustomization.yaml resources: - ./manifests/deployment.yaml - ./manifests/svc.yaml - ./manifests/development/cm.yaml - ./manifests/development/ingress.yaml
-
Пример проекта с kustomization.yaml
└── applications └── manifests ├── base │ ├── kustomization.yaml │ ├── development.yaml │ └── svc.yaml └── overlays ├── development │ ├── kustomization.yaml │ ├── cm.yaml │ └── ingress.yaml └── production ├── kustomization.yaml ├── cm.yaml └── ingress.yaml MANIFEST_FOLDER = ./manifests/overlays/development В данном случае Kubedeployer будет ссылаться на: ./manifests/overlays/development/kustomization.yaml
-
Пример проекта с ошибкой
└── applications └── manifests ├── development │ ├── kustomization.yaml │ ├── ingress.yaml │ └── configurations │ ├── kustomization.yaml │ └── cm.yaml ├── kustomization.yaml ├── deployment.yaml └── svc.yaml MANIFEST_FOLDER = ./manifests ENVIRONMENT = development В результате работы Kubedeployer будет вызвана ошибка, так как будет обнаружено несколько kustomization.yaml: - ./manifests/kustomization.yaml - ./manifests/development/kustomization.yaml - ./manifests/development/configurations/kustomization.yaml