Хочу разобраться как настраивать CD/CI Pipeline по науке, чтобы код из репо github оказался запущенным на kubernetes кластере. Предполагается, что код нужно компилировать. Я уже более-менее во всем разобрался, хочу вынести свои мысли на обсуждение, чтобы понять правильно ли я понял концепцию и не нарушаю ли я какие-то принципы.
И так, сначала грубое представление:
1. Скачиваем исходный код с github repo
2. Компилируем и собираем docker image
3. Заливаем этот image на docker repo
4. Разворачиваем pod (или deployment) на k8s кластере из image, который мы залили на docker repo.
Архитектура:
* github repo
* jenkins server
+docker
+development tools(для компиляции)
+kubectl (для управления k8s кластером)
* docker repo (я выбрал AWS ECR)
* k8s cluster
Права доступа, авторизация и т.п.:
1. Из публичного github repo можно брать сырцы свободно, если это private repo, то нужно установить plugin для jenkins, который позволяет авторизовываться по сертификату.
2. Для того, чтобы jenkins мог работать с docker нужно добавить пользователя jenkins в группу docker
3. Для того, чтобы docker мог заливать images на docker repo, нужно приладить скрипт (и awscli), который будет регулярно запрашивать токены у AWS ECR и обновлять их в папке ~/.docker пользователя jenkins.
4. Для того, чтобы jenkins мог управлять k8s кластером, нужно скопировать на сервер бинарник kubectl и добавить файл config с ключами в папку ~/.kube для пользователя jenkins
5. Для того, чтобы k8s cluster мог получать images с docker repo, нужно приладить cronejob, который будет регулярно запрашивать токены у AWS ECR и обновлять у себя secrets авторизации с docker repo.
У меня как-то так получилось, нормально?
docker, github, jenkins, k8s, pipeline