获取kubernetes v1.18.16源码包
git clone https://github.com/kubernetes/kubernetes.git -b v1.18.16
或者以下方式下载解压
wget https://github.com/kubernetes/kubernetes/archive/refs/tags/v1.18.16.tar.gz
tar -zxvf v1.18.16.tar.gz
进入目录
cd kubernetes
修改cmd/kubeadm/app/constants/constants.go
- CertificateValidity = time.Hour * 24 * 365
+ CertificateValidity = time.Hour * 24 * 365 * 30
修改staging/src/k8s.io/client-go/util/cert/cert.go 中关于时间的参数
- const duration365d = time.Hour * 24 * 365
+ const duration365d = time.Hour * 24 * 365 * 30
修改 hack/lib/version.sh,为了打包后kubeadm的版本不是脏版本(-dirty),脏版本的kubeadm不能升级
if git_status=$("${git[@]}" status --porcelain 2>/dev/null) && [[ -z ${git_status} ]]; then
KUBE_GIT_TREE_STATE="clean"
else
- KUBE_GIT_TREE_STATE="dirty"
+ KUBE_GIT_TREE_STATE="clean"
fi
下载编译镜像$(cat ./build/build-image/cross/VERSION) 当前1.18.16的编译镜像版本为kube-cross:v1.13.15-1
docker pull k8s.gcr.io/build-image/kube-cross:$(cat ./build/build-image/cross/VERSION)
启动编译环境镜像 /data/kubernetes-1.18.16为具体源码包地址
docker run --name k8sbuild -d -v /data/kubernetes-1.18.16:/go/src/k8s.io/kubernetes -it k8s.gcr.io/build-image/kube-cross:v1.13.15-1 bash
进入容器
docker exec -it k8sbuild bash
这里的命令都是在容器内部执行
cd /go/src/k8s.io/kubernetes
编译kubeadm, 这里主要编译kubeadm 即可
make all WHAT=cmd/kubeadm GOFLAGS=-v
当前目录下的_output/bin/下会生成kubeadm二进制文件,添加可执行权限,然后查看其版本信息
chmod 755 ./_output/bin/kubeadm`
./_output/bin/kubeadm version
退出容器从容器复制kubeadm
docker cp k8sbuild:/go/src/k8s.io/kubernetes/_output/bin/kubeadm ./