Деплоим приложение в k8s через Jenkins+Helm3+ArgoCD

—

от автора

Автор статьи: Рустем Галиев

IBM Senior DevOps Engineer & Integration Architect. Официальный DevOps ментор и коуч в IBM

Привет, Хабр!

В мире современной разработки программного обеспечения Kubernetes (K8s) стал неотъемлемой частью инфраструктуры, предоставляя масштабируемость и гибкость в развертывании контейнеризированных приложений. В этой статье мы рассмотрим эффективный способ деплоя приложений в среде Kubernetes, используя мощные инструменты: Jenkins, Helm 3 и ArgoCD.

Jenkins, с его широким спектром возможностей для автоматизации процессов сборки и развертывания, становится основой нашего пайплайна разработки. Helm 3, в свою очередь, предоставляет инструменты для управления пакетами Kubernetes (чарта), упрощая установку и обновление приложений. Наконец, ArgoCD позволяет автоматизировать процесс развертывания и управления приложениями в Kubernetes-кластере, предоставляя возможность контролировать состояние и версионирование приложений.

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


Helm — это популярный инструмент для упрощения управления приложениями в среде Kubernetes. Версия Helm 3 представляет собой значительное обновление по сравнению с предыдущими версиями и внесла ряд улучшений и новых возможностей.

Начнем с написания Helm3.

Наш чарт будет находиться в директории argocd нашего проекта.

Наш Chart будет состоять из Chart.yaml (информация о чарте), values (файл с переменными), templates (манифесты k8s)

Директория templates

Именно values.yaml мы будем обновлять в стейдже нашего пайплайна.

Указываем реестр с образами, куда мы его собираем и деплоим. Нам нужно будет только обновить тэг нашего образа.

Далее изменяем файл templates/deployment.yaml, в блоке spec находим описание нашего пода, там находим контейнер, а в нем образ и указываем переменные.

Мы это описываем в jenkinsfile. Сперва задаем тэг в блоке environment:

Затем обновляем его

В Jenkinsfile будет выглядеть так

environment {         def DATE_TIME   = sh(script: "echo `date +%Y%m%d-%H%M`", returnStdout: true).trim()         TAG             = "1.0.build-${BUILD_NUMBER}"     }      stages {                           //beginning                  stage('Update deployments at K8S QA') {                     steps {                         sh """yq e '(.. | select(has("tag"))).tag = "$TAG"' -i ./argocd/values.yaml"""                         sh 'cat ./argocd/values.yaml'                         sh 'git config --global --add safe.directory $(pwd)'                         sh 'git config user.email "jenkins-ci@noreply.ibm.com"'                         sh 'git config user.name "jenkins CI"'                         sh 'git remote set-url origin https://${GITHUB_TOKEN}@github.com/zetzo/audi.git'                         sh 'git status'                         //sh 'git config http.postBuffer 524288000'                         sh 'git add ./argocd/values.yaml'                         sh 'git commit -m "update image tag to $TAG"'                         sh 'git push origin HEAD:QA'                     }           }                      //end of block     } 

Тестируем, пайплайн зеленый

Дальше переходим в ArgoCD. Добавляем репу:

Дальше application → New App

Создаем и видим — ArgoCD все видит и управляет:


В завершение напоминаю про бесплатный открытый урок, который пройдет сегодня в 20:00 — «Свой Serverless с помощью Knative». Участники поговорят про идею serverless, чем прекрасны (и ужасны) Serverless-фреймворки вроде AWS Lambda и Google Cloud Functions. Какие есть open source решения на рынке, и как работать с «функциональным» стеком на примере платформы Knative. Записаться можно по ссылке.


ссылка на оригинал статьи https://habr.com/ru/articles/809855/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *