Пожалуй один из самых недооцененных аспектов Kubernetes, это CI/CD конвейер, который используются для релизов k8s.
Возможно именно благородя простоте и надежности сборочного процесса, который построен, в основном на bash-скриптах и инструкциях make, проект, который давно перевалил за 2 миллиона строчек кода, можно собрать из исходников, протестировать и выпустить в релиз, выполнив один таргет в Makefile.
git clone https://github.com/kubernetes/kubernetes.git make -f build/root/Makefile all WHAT=cmd/kubelet kube-proxy kube-apiserver kube-controller-manager kube-scheduler kubectl GOFLAGS=-v
В качестве примера сборочного конвейера будем использовать один из самых популярных CI инструментов – Jenkins.
При этом благородя тому, что вся сборочная логика и тесты предусмотрительно были вынесены в скрипты и make-файлы, можно не привязываться к какому-то конкретному фреймворку для непрерывной интеграции. Вместо Jenkns можно использовать любой другой инструмент.
Jenkinsfile
pipeline { agent any stages { stage('Build') { steps { /// Клонируем репозиторий кубернетес git 'https://github.com/kubernetes/kubernetes.git' /// Чтобы не было конфликтов, перед запуском сборки убеждаемся что директория _output очищена sh "make -f build/root/Makefile clean" /// Выбираем для сборки только основные компоненты кубернетес sh "make -f build/root/Makefile all WHAT=cmd/kubelet kube-proxy kube-apiserver kube-controller-manager kube-scheduler kubectl GOFLAGS=-v" } } } /// В блоке post можно указывать условия которые будут всегда выполнятся после завершения задания jenkins /// В данном случае мы инструктируем jenkins сохранять все файлы в целевой директории post { always { archiveArtifacts artifacts: '_output/local/go/bin/**/*.*' } } }
Параметры для отладки и сборки внутри контейнеров можно просмотреть вызвав один из тергетов в Makefile
make -f build/root/Makefile help
Универсальных рецептов – не существует, но подходы к непрерывной интеграции, которые использовали разработчики Kubernetes, определенно заслуживают внимания и изучения.
В следующей части мы будем оптимизировать релиз-процесс Kubernetes. Попробуем сделать его еще быстрее, надежнее и эффективнее.
ссылка на оригинал статьи https://habr.com/ru/articles/732100/
Добавить комментарий