美文网首页
Kubernetes Build 总结以及问题

Kubernetes Build 总结以及问题

作者: CasperLiu | 来源:发表于2019-02-16 12:01 被阅读0次

本文介绍Kubernetes编译的过程。
参考:
https://kubernetes.io/docs/setup/release/building-from-source/
https://github.com/kubernetes/kubernetes/tree/master/build/

1 下载源代码

https://github.com/kubernetes/kubernetes/releases/tag/v1.13.3

下载Source code(tar.gz) 到有Docker的环境,并解压缩。


image.png

2 编译

Key scripts
The following scripts are found in the build/ directory. Note that all scripts must be run from the Kubernetes root directory.

build/run.sh: Run a command in a build docker container. Common invocations:
build/run.sh make: Build just linux binaries in the container. Pass options and packages as necessary.
build/run.sh make cross: Build all binaries for all platforms
build/run.sh make kubectl KUBE_BUILD_PLATFORMS=darwin/amd64: Build the specific binary for the specific platform (kubectl and darwin/amd64 respectively in this example)
build/run.sh make test: Run all unit tests
build/run.sh make test-integration: Run integration test
build/run.sh make test-cmd: Run CLI tests
build/copy-output.sh: This will copy the contents of _output/dockerized/bin from the Docker container to the local _output/dockerized/bin. It will also copy out specific file patterns that are generated as part of the build process. This is run automatically as part of build/run.sh.
build/make-clean.sh: Clean out the contents of _output, remove any locally built container images and remove the data container.
build/shell.sh: Drop into a bash shell in a build container with a snapshot of the current repo code.

以编译Linux平台kubectl 为例:

[root@VM_0_4_centos kubernetes-1.13.3]# build/run.sh make kubectl 
+++ [0216 11:19:07] Verifying Prerequisites....
+++ [0216 11:19:07] Building Docker image kube-build:build-d7e9f7306e-5-v1.11.5-1
+++ Docker build command failed for kube-build:build-d7e9f7306e-5-v1.11.5-1

Sending build context to Docker daemon  8.704kB
Step 1/16 : FROM k8s.gcr.io/kube-cross:v1.11.5-1
Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

To retry manually, run:

docker build -t kube-build:build-d7e9f7306e-5-v1.11.5-1 --pull=false /root/Sandbox/kubernetes-1.13.3/_output/images/kube-build:build-d7e9f7306e-5-v1.11.5-1

!!! [0216 11:19:22] Call tree:
!!! [0216 11:19:22]  1: build/run.sh:31 kube::build::build_image(...)
!!! Error in build/../build/common.sh:461
  Error in build/../build/common.sh:461. '((i<3-1))' exited with status 1
Call stack:
  1: build/../build/common.sh:461 kube::build::build_image(...)
  2: build/run.sh:31 main(...)
Exiting with status 1

遇到上述问题的原因是:
k8s.gcr.io/kube-cross:v1.11.5-1在中国区被墙,无法下载。
解决办法是:
到DockerHub上找到googlecontainer/kube-cross,并下载指定Tag的image,下载后重新执行docker tag打标签。


kube-cross image kube-cross image tag list
[root@VM_0_4_centos kubernetes-1.13.3]# docker pull googlecontainer/kube-cross:v1.11.5-1
v1.11.5-1: Pulling from googlecontainer/kube-cross
ab1fc7e4bf91: Pull complete 
35fba333ff52: Pull complete 
f0cb1fa13079: Pull complete 
3d1dd648b5ad: Pull complete 
866ed2e2b1fe: Pull complete 
ddc4ad35a2f0: Pull complete 
ab8da8d8889d: Pull complete 
bc09b85f7ce1: Pull complete 
771b92c72d72: Pull complete 
a197f22cc074: Pull complete 
c09a2f634954: Pull complete 
e99d87f11b4a: Pull complete 
817e550ce839: Pull complete 
7489af17a433: Pull complete 
Digest: sha256:b4864400d58268b3abde3d9ded4ab23a9ddda6c85d63c80ed536cd2810d75042
Status: Downloaded newer image for googlecontainer/kube-cross:v1.11.5-1

重新打Tag:

[root@VM_0_4_centos kubernetes-1.13.3]# docker help tag

Usage:  docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

Options:

[root@VM_0_4_centos kubernetes-1.13.3]# docker tag googlecontainer/kube-cross:v1.11.5-1 k8s.gcr.io/kube-cross:v1.11.5-1
[root@VM_0_4_centos kubernetes-1.13.3]# docker images |grep kube-cross
googlecontainer/kube-cross                                 v1.11.5-1           b16987a9b305        3 weeks ago         1.75GB
k8s.gcr.io/kube-cross                                      v1.11.5-1           b16987a9b305        3 weeks ago         1.75GB

现在重新开始编译:

[root@VM_0_4_centos kubernetes-1.13.3]# build/run.sh make kubectl 
...
I0216 11:40:12.554451    3183 api_linter.go:109] validating API rules for type k8s.io/metrics/pkg/apis/metrics/v1beta1.valueToStringGenerated
I0216 11:40:12.554455    3183 api_linter.go:192] validating API rule names_match for type k8s.io/metrics/pkg/apis/metrics/v1beta1.valueToStringGenerated
I0216 11:40:12.554460    3183 api_linter.go:192] validating API rule omitempty_match_case for type k8s.io/metrics/pkg/apis/metrics/v1beta1.valueToStringGenerated
I0216 11:40:12.554636    3183 execute.go:67] Assembling file "/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/generated/openapi/zz_generated.openapi.go"
I0216 11:40:14.087868    3183 api_linter.go:44] Assembling file "_output/violations.report"
2019/02/16 11:40:14 Code for OpenAPI definitions generated
Go version: go version go1.11.5 linux/amd64
+++ [0216 11:40:14] Building go targets for linux/amd64:
    ./vendor/github.com/jteeuwen/go-bindata/go-bindata
Env for linux/amd64: GOOS=linux GOARCH=amd64 GOROOT=/usr/local/go CGO_ENABLED= CC=
Coverage is disabled.
+++ [0216 11:40:14] Placing binaries
Generated bindata file : test/e2e/generated/bindata.go has 9052 test/e2e/generated/bindata.go lines of lovely automated artifacts
No changes in generated bindata file: pkg/kubectl/generated/bindata.go
Go version: go version go1.11.5 linux/amd64
+++ [0216 11:40:15] Building go targets for linux/amd64:
    cmd/kubectl
Env for linux/amd64: GOOS=linux GOARCH=amd64 GOROOT=/usr/local/go CGO_ENABLED= CC=
Coverage is disabled.
+++ [0216 11:40:51] Placing binaries
+++ [0216 11:40:52] Syncing out of container
+++ [0216 11:40:52] Stopping any currently running rsyncd container
+++ [0216 11:40:52] Starting rsyncd container
+++ [0216 11:40:53] Running rsync
+++ [0216 11:40:54] Stopping any currently running rsyncd container
[root@VM_0_4_centos kubernetes-1.13.3]# ls

用于Build的环境基于如下Dockerfile构建:

[root@VM_0_4_centos kubernetes-1.13.3]# cat _output/images/kube-build:build-d7e9f7306e-5-v1.11.5-1/Dockerfile
# Copyright 2016 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This file creates a standard build environment for building Kubernetes
FROM k8s.gcr.io/kube-cross:v1.11.5-1

# Mark this as a kube-build container
RUN touch /kube-build-image

# To run as non-root we sometimes need to rebuild go stdlib packages.
RUN chmod -R a+rwx /usr/local/go/pkg

# For running integration tests /var/run/kubernetes is required
# and should be writable by user
RUN mkdir /var/run/kubernetes && chmod a+rwx /var/run/kubernetes

# The kubernetes source is expected to be mounted here.  This will be the base
# of operations.
ENV HOME /go/src/k8s.io/kubernetes
WORKDIR ${HOME}

# Make output from the dockerized build go someplace else
ENV KUBE_OUTPUT_SUBPATH _output/dockerized

# Pick up version stuff here as we don't copy our .git over.
ENV KUBE_GIT_VERSION_FILE ${HOME}/.dockerized-kube-version-defs

# Add system-wide git user information
RUN git config --system user.email "nobody@k8s.io" \
  && git config --system user.name "kube-build-image"

# Fix permissions on gopath
RUN chmod -R a+rwx $GOPATH

# Make log messages use the right timezone
ADD localtime /etc/localtime
RUN chmod a+r /etc/localtime

# Set up rsyncd
ADD rsyncd.password /
RUN chmod a+r /rsyncd.password
ADD rsyncd.sh /
RUN chmod a+rx /rsyncd.sh

参照如下操作,将编译好的文件从容器copy到本地:

build/copy-output.sh: This will copy the contents of _output/dockerized/bin from the Docker container to the local _output/dockerized/bin. It will also copy out specific file patterns that are generated as part of the build process. This is run automatically as part of build/run.sh.
[root@VM_0_4_centos kubernetes-1.13.3]# build/copy-output.sh
+++ [0216 11:50:08] Verifying Prerequisites....
+++ [0216 11:50:08] Syncing out of container
+++ [0216 11:50:08] Stopping any currently running rsyncd container
+++ [0216 11:50:08] Starting rsyncd container
+++ [0216 11:50:08] Running rsync
+++ [0216 11:50:09] Stopping any currently running rsyncd container

[root@VM_0_4_centos kubernetes-1.13.3]# ll _output/dockerized/bin/linux/amd64/
total 71800
-rwxr-xr-x 1 root root  5800256 Feb 16 11:39 conversion-gen
-rwxr-xr-x 1 root root  5791968 Feb 16 11:38 deepcopy-gen
-rwxr-xr-x 1 root root  5783808 Feb 16 11:38 defaulter-gen
-rwxr-xr-x 1 root root  4460824 Feb 16 11:38 go2make
-rwxr-xr-x 1 root root  2001888 Feb 16 11:40 go-bindata
-rwxr-xr-x 1 root root 39185888 Feb 16 11:40 kubectl
-rwxr-xr-x 1 root root 10363744 Feb 16 11:40 openapi-gen

[root@VM_0_4_centos kubernetes-1.13.3]# _output/dockerized/bin/linux/amd64/kubectl  version
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.3", GitCommit:"721bfa751924da8d1680787490c54b9179b1fed0", GitTreeState:"archive", BuildDate:"2019-02-16T03:40:15Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"10+", GitVersion:"v1.10.5-tke.3", GitCommit:"53e244be925234190938376fe8637189b6caf125", GitTreeState:"clean", BuildDate:"2018-12-04T04:10:15Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

从执行kubectl version的结果可以看到kubectl可以工作,版本是v1.13.3。

相关文章

网友评论

      本文标题:Kubernetes Build 总结以及问题

      本文链接:https://www.haomeiwen.com/subject/bisbeqtx.html