Компиляция двоичных файлов KubernetesCompiling Kubernetes Binaries

Для компиляции двоичных файлов Kubernetes требуется рабочая среда Go.Compilation of Kubernetes requires a working Go environment. На этой странице описывается несколько способов компиляции двоичных файлов Linux и кросс-компиляции двоичных файлов Windows.This page goes through several ways to compile Linux binaries and cross-compile Windows binaries.

Примечание

Эта страница является полностью добровольной и предназначена только для заинтересованных Kubernetesных разработчиков, желающих поэкспериментировать с последним & самым большим исходным кодом.This page is completely voluntary and only included for interested Kubernetes developers who want to experiment with the latest & greatest source code.

Совет

Для получения уведомлений о новейших разработках, на которые можно подписываться @kubernetes-announce .To receive notifications about the newest developments you can subscribe to @kubernetes-announce.

Установка GoInstalling Go

Для простоты установка Go выполняется во временной настраиваемой папке:For simplicity, this goes through installing Go in temporary, custom location:

cd ~
wget https://redirector.gvt1.com/edgedl/go/go1.11.1.linux-amd64.tar.gz -O go1.11.1.tar.gz
tar -vxzf go1.11.1.tar.gz
mkdir gopath
export GOROOT="$HOME/go"
export GOPATH="$HOME/gopath"
export PATH="$GOROOT/bin:$PATH"

Примечание

При этом настраиваются переменные среды для сеанса.These set the environmental variables for your session. Добавьте операции export, чтобы сделать настройки ~/.profile постоянными.Add the exports to your ~/.profile for a permanent setting.

Запустите go env, чтобы правильно настроить пути.Run go env to ensure the paths have been properly set. Существует несколько вариантов создания двоичных файлов Kubernetes:There are several options for building Kubernetes binaries:

Чтобы скопировать двоичные файлы Windows в соответствующие им узлы, используйте визуальное средство, например WinSCP, или средство командной строки, например pscp, для их переноса в каталог C:\k.To copy Windows binaries to their respective nodes, use a visual tool like WinSCP or a command-line tool like pscp to transfer them to the C:\k directory.

Локальное созданиеBuilding locally

Совет

При возникновении ошибок "отказ в разрешении" их можно избежать, предварительно создав Linux, в соответствии с kubelet примечаниями в acs-engine :If you run into "permission denied" errors, these can be avoided by building the Linux kubelet first, per the note in acs-engine:

Из-за того, что кажется ошибкой в системе сборки Windows Kubernetes, одна должна сначала создать двоичный файл Linux для создания _output/bin/deepcopy-gen . Если выполнить сборку в Windows, это приведет к созданию пустого объекта deepcopy-gen .Due to what appears to be a bug in the Kubernetes Windows build system, one has to first build a Linux binary to generate _output/bin/deepcopy-gen. Building to Windows w/o doing this will generate an empty deepcopy-gen.

Сначала получите репозиторий Kubernetes:First, retrieve the Kubernetes repository:

KUBEREPO="k8s.io/kubernetes"
go get -d $KUBEREPO
# Note: the above command may spit out a message about
#       "no Go files in...", but it can be safely ignored!
cd $GOPATH/src/$KUBEREPO

Теперь извлеките ветвь для создания двоичного файла Linux kubelet.Now, checkout the branch to build from and build the Linux kubelet binary. Это необходимо, чтобы избежать ошибок построения Windows, указанных выше.This is necessary to avoid the Windows build errors noted above. Здесь мы используем v1.12.2.Here, we will use v1.12.2. После выполнения операции git checkout вы можете применить ожидающие PR, исправления или внести другие изменения в пользовательские двоичные файлы.After the git checkout, you can apply pending PRs, patches, or make other modifications for the custom binaries.

git checkout tags/v1.12.2
make clean && make WHAT=cmd/kubelet

Наконец создайте необходимые клиентские двоичные файлы Windows (последний этап может отличаться в зависимости откуда потребуется извлечь двоичные файлы Windows в дальнейшем):Finally, build the necessary Windows client binaries (the last step may vary, depending on where the Windows binaries should be retrieved from later):

KUBE_BUILD_PLATFORMS=windows/amd64 make WHAT=cmd/kubectl
KUBE_BUILD_PLATFORMS=windows/amd64 make WHAT=cmd/kubelet
KUBE_BUILD_PLATFORMS=windows/amd64 make WHAT=cmd/kube-proxy
cp _output/local/bin/windows/amd64/kube*.exe ~/kube-win/

Действия по созданию двоичных файлов Linux ничем не отличаются, просто уберите префикс KUBE_BUILD_PLATFORMS=windows/amd64 из команд.The steps to building Linux binaries are identical; just leave off the KUBE_BUILD_PLATFORMS=windows/amd64 prefix to the commands. Выходным каталогом будет _output/.../linux/amd64.The output directory will be _output/.../linux/amd64 instead.

Построение с помощью VagrantBuild with Vagrant

Программа установки Vagrant доступна здесь.There is a Vagrant setup available here. Используйте ее для подготовки виртуальной машины Vagrant, а затем выполните эти команды внутри нее:Use it to prepare a Vagrant VM, then execute these commands inside it:

DIST_DIR="${HOME}/kube/"
SRC_DIR="${HOME}/src/k8s-main/"
mkdir ${DIST_DIR}
mkdir -p "${SRC_DIR}"

git clone https://github.com/kubernetes/kubernetes.git ${SRC_DIR}

cd ${SRC_DIR}
git checkout tags/v1.12.2
KUBE_BUILD_PLATFORMS=linux/amd64   build/run.sh make WHAT=cmd/kubelet
KUBE_BUILD_PLATFORMS=windows/amd64 build/run.sh make WHAT=cmd/kubelet
KUBE_BUILD_PLATFORMS=windows/amd64 build/run.sh make WHAT=cmd/kube-proxy
cp _output/dockerized/bin/windows/amd64/kube*.exe ${DIST_DIR}

ls ${DIST_DIR}