安装k8s集群组件最舒适的方法是通过yum install去安装,这种安装方法简单,一般也都能够正常安装。自己在尝试安装k8s集群时,首先要去寻找yum源,制作repo文件,才能安装指定k8s版本。但是即使我们这一通操作下来还是会存在各种各样的问题,最经典的问题是被“墙”,好吧,求人不如求己,我们可以通过kubernetes release制作k8s 的kubelet、kubeadm、kubectl等rpm包。
Step 1: 制作准备
- git clone https://github.com/kubernetes/release.git 克隆项目到本地;
- https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md#downloads-for-v193 选取指定的k8s版本下载;
Step 2: 制作rpm包
- 进入release/rpm文件夹,拷贝制作准备中的第2步文件夹里的kubectl、kubelet、kubeadm二进制文件到release/rpm目录下;
- 修改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
- 修改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包如下图
最后安装kubeadm、kubectl、kubelet、cni只要使用yum localinstall命令即可安装。
总结
本文给出了制作k8s rpm包的操作步骤与流程,按照上述步骤即可制作出指定版本的rpm包,k8s的更新迭代速度很快,而yum源更新很慢,通过这种方式可以快速安装新版本的k8s集群,我自己在安装k8s新版本时也是一件头疼的事,总会出现各式各样的问题,但是为了能够跟上k8s步伐,又得适当的更新版本,以查看新版本特性能够给我们带来一些功能上的便利。通过制作kubelet等rpm安装包,利用kubeadm(个人研究)、kubespray就能够很方便的安装k8s集群。