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

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

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)

83320f19da61eb765a1308bfaf5b05b8.png

Директория templates

cbb2aacad6c25868cbb1e09a073e7289.png

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

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

86c472e67a9abfaaf97cbe44bd12ec93.png

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

d944efe5a04fc4237fd04bd6a7c93cef.png

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

c6a82b33ca764d08e90e670e4364beaf.png

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

4f80aac0b2fc2718c797a0382a00e9c8.png

В 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
    }

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

75b6271886c2c2ebdb21eddae82f7736.png

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

8ed5f68f542816b2cc0fa5a4245c63e7.pngfba6a788b806c74c3a5e05ffb5d832dd.png

Дальше application → New App

a77efd863a83ad81775de73dd401213c.png94862c57800313bf5e64940465ff3f99.png487240eb3faf7a7f8954adf39b59d7eb.png26edcc3edb7f1b399e9cd05e5d7d86b9.png4833eb827b080ad0a84706c6be529bd7.png

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

6d6350c66593bca1e1be85b8d583239d.png

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

Habrahabr.ru прочитано 2381 раз