通过kubernetes release制作k8s rpm包

安装k8s集群组件最舒适的方法是通过yum install去安装,这种安装方法简单,一般也都能够正常安装。自己在尝试安装k8s集群时,首先要去寻找yum源,制作repo文件,才能安装指定k8s版本。但是即使我们这一通操作下来还是会存在各种各样的问题,最经典的问题是被“墙”,好吧,求人不如求己,我们可以通过kubernetes release制作k8s 的kubelet、kubeadm、kubectl等rpm包。

Step 1: 制作准备

  1. git clone https://github.com/kubernetes/release.git 克隆项目到本地;
  2. https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md#downloads-for-v193 选取指定的k8s版本下载;

Step 2: 制作rpm包

  1. 进入release/rpm文件夹,拷贝制作准备中的第2步文件夹里的kubectl、kubelet、kubeadm二进制文件到release/rpm目录下;
  2. 修改entry.sh文件,在ARCHS=()里只保留amd64/x86_64,其它都注释掉,因为我的服务器操作系统是centos,所以我只需要生成amd64/x86_64的安装包;
#!/bin/sh
# Entrypoint for the build container to create the rpms and yum repodata:
# Usage: ./entry.sh GOARCH/RPMARCH,GOARCH/RPMARCH,....

set -e

declare -a ARCHS

if [ $# -gt 0 ]; then
  IFS=','; ARCHS=($1); unset IFS;
else
  #GOARCH/RPMARCH
  ARCHS=(
    amd64/x86_64
    #arm/armhfp
    #arm64/aarch64
    #ppc64le/ppc64le
    #s390x/s390x
  )
fi

for 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
  1. 修改docker-build.sh文件,修改KUBE_MAJOR、KUBE_MINOR、KUBE_PATCH为我们需要制作的指定k8s版本,在source0-5根据需要更改为我们在step1中下载的k8s二进制文件,为了方便直接将这些二进制文件拷贝到release/rpm目录下。
%global KUBE_MAJOR 1
%global KUBE_MINOR 9
%global KUBE_PATCH 3
%global KUBE_VERSION %{KUBE_MAJOR}.%{KUBE_MINOR}.%{KUBE_PATCH}
%global RPM_RELEASE 0
%global ARCH amd64

...

%if %{KUBE_SEMVER} >= %{semver 1 9 0}
%global CNI_VERSION 0.6.0
%else
%global CNI_VERSION 0.5.1
%endif

%global CRI_TOOLS_VERSION 1.0.0-beta.1

Name: kubelet
Version: %{KUBE_VERSION}
Release: %{RPM_RELEASE}
Summary: Container cluster management
License: ASL 2.0

URL: https://kubernetes.io
Source0: kubelet
Source1: kubelet.service
Source2: kubectl
Source3: kubeadm
Source4: 10-kubeadm.conf
%if %{KUBE_SEMVER} < %{semver 1 9 0}
Source5: https://dl.k8s.io/network-plugins/cni-%{ARCH}-0799f5732f2a11b329d9e3d51b9c8f2e3759f2ff.tar.gz
%else
Source5: cni-plugins-amd64-v0.6.0.tgz
%endif

一切准备好后,只需要执行./docker-build.sh就可以制作rpm包了,执行结果如下
制作包截图
生成的rpm包如下图
rpm包
最后安装kubeadm、kubectl、kubelet、cni只要使用yum localinstall命令即可安装。

总结

本文给出了制作k8s rpm包的操作步骤与流程,按照上述步骤即可制作出指定版本的rpm包,k8s的更新迭代速度很快,而yum源更新很慢,通过这种方式可以快速安装新版本的k8s集群,我自己在安装k8s新版本时也是一件头疼的事,总会出现各式各样的问题,但是为了能够跟上k8s步伐,又得适当的更新版本,以查看新版本特性能够给我们带来一些功能上的便利。通过制作kubelet等rpm安装包,利用kubeadm(个人研究)、kubespray就能够很方便的安装k8s集群。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值