首页 > 代码库 > 自己编译生成k8s的rpm包

自己编译生成k8s的rpm包

我指的是以下几个安装包:

-rw-r--r--. 1 root root 8976134 Jul 13 10:19 kubeadm-1.7.0-0.x86_64.rpm
-rw-r--r--. 1 root root 9362110 Jul 13 10:19 kubectl-1.7.0-0.x86_64.rpm
-rw-r--r--. 1 root root 17238982 Jul 13 10:19 kubelet-1.7.0-0.x86_64.rpm
-rw-r--r--. 1 root root 7800450 Jul 13 10:19 kubernetes-cni-0.5.1-0.x86_64.rpm

===============================

参考说法:

官方的文档页面更新并不及时,同时他的 yum 源更新也很慢,再者…那他妈可是 Google 的服务器,能特么连上吗?以前总是在国外服务器使用 yumdownloader 下载,然后 scp 到本地,虽然能解决问题,但是蛋碎一地…最后找到了源头,如下

Kubernetes 编译的各种发行版安装包来源于 Github 上的另一个叫 release 的项目,地址 点这里,把这个项目 clone 下来,由于本人是 CentOS 用户,所以进入 rpm 目录,在安装好 docker 的机器上执行那个 docker-build.sh 脚本即可编译 rpm 包,最后会生成到当前目录的 output 目录下,截图如下

 

https://github.com/kubernetes/release
====================================================
这样,用kubeadm安装之前,rpm就可以先安装好啦。多,快,好,省!
有一个地方注意,默认会自动编译所有平台的,如果只要amd-x64,可以更改一下entry.sh文件,把其它平台去掉。加快时间。
当然,前提是要准备好fedora:24这个docker镜像文件哟。
 
#!/bin/sh# Entrypoint for the build container to create the rpms and yum repodata:# Usage: ./entry.sh GOARCH/RPMARCH,GOARCH/RPMARCH,....set -edeclare -a ARCHSif [ $# -gt 0 ]; then  IFS=,; ARCHS=($1); unset IFS;else  #GOARCH/RPMARCH  ARCHS=(    amd64/x86_64    arm/armhfp    arm64/aarch64    ppc64le/ppc64le    s390x/s390x  )fifor ARCH in ${ARCHS[@]}; do  IFS=/ read GOARCH RPMARCH<<< ${ARCH}; unset IFS;  SRC_PATH="/root/rpmbuild/SOURCES/${RPMARCH}"  mkdir -p ${SRC_PATH}  cp -r /root/rpmbuild/SPECS/* ${SRC_PATH}  echo "Building RPM‘s for ${GOARCH}....."  sed -i "s/\%global ARCH.*/\%global ARCH ${GOARCH}/" ${SRC_PATH}/kubelet.spec  # Download sources if not already available  cd ${SRC_PATH} && spectool -gf kubelet.spec  /usr/bin/rpmbuild --target ${RPMARCH} --define "_sourcedir ${SRC_PATH}" -bb ${SRC_PATH}/kubelet.spec  mkdir -p /root/rpmbuild/RPMS/${RPMARCH}  createrepo -o /root/rpmbuild/RPMS/${RPMARCH}/ /root/rpmbuild/RPMS/${RPMARCH}done

技术分享技术分享

自己编译生成k8s的rpm包