Собираем Kubernetes из исходников

от автора

Пожалуй один из самых недооцененных аспектов 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/


Комментарии

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

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