Пожалуй один из самых недооцененных аспектов 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. Попробуем сделать его еще быстрее, надежнее и эффективнее.

Комментарии (0)