kubeadm 安装指定版本的 k8s 集群
Posted Akito
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kubeadm 安装指定版本的 k8s 集群相关的知识,希望对你有一定的参考价值。
什么是 kubeadm?
kubeadm 是 Google 官方推荐使用的 kubernetes 集群安装程序,可以使用它来快速创建单机或者高可用 kubernetes 集群,以及方便地提供一些日常维护操作,例如:节点的扩容缩容、集群证书更新、集群版本升级等。
安装指定版本的 kubernetes 集群
如果要使用 kubeadm 安装 k8s 集群,那么每一个 k8s 集群节点上都必须部署 3 个程序:
- kubeadm:k8s 集群的安装器;
- kubelet:分配和管理当前节点上的 POD/Container,新版本的 CRI 支持 docker、containerd 等;
- kubectl:与 k8s 集群进行通信的客户端,例如:获取 k8s 集群信息或者资源状态,部署 k8s 资源等。
一般情况下,kubeadm 安装器的版本号和 kubernetes 集群的版本基本保持一致,也就是说,kubeadm-v1.16 的安装器,它只能也只会安装 kubernetes-v1.16 系列的版本。
假设我们现在要安装 kubernetes-v1.16 的版本,那么我们需要执行以下的操作:
1. 安装 v-1.16 的 kubeadm/kubelet/kubectl
由于 kubeadm 的官方源在国外,所以如果不科学上网的情况下,直接下载 kubeadm 以及 kuberenets 集群组件镜像(k8s.gcr.io)会非常缓慢,这里我们直接采用阿里云的 kubernetes 镜像库来进行安装。
先配置 kubeadm 的安装源:
CentOS / RHEL / Fedora
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
Debian / Ubuntu
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
查看可安装的 kubeadm 版本:
[root@akito-192 ~]# yum list kubelet kubeadm kubectl --showduplicates|sort -r
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
已加载插件:fastestmirror
已安装的软件包
可安装的软件包
* updates: mirrors.aliyun.com
kubelet.x86_64 1.9.9-0 kubernetes
...
kubelet.x86_64 1.16.9-0 kubernetes
kubelet.x86_64 1.16.8-0 kubernetes
kubelet.x86_64 1.16.7-0 kubernetes
...
选择安装 v1.16.9 的 kubeadm:
[root@akito-192 ~]# yum install kubelet-1.16.9-0 kubeadm-1.16.9-0 kubectl-1.16.9-0
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
...
kubernetes | 1.4 kB 00:00:00
...
已安装:
kubeadm.x86_64 0:1.16.9-0 kubectl.x86_64 0:1.16.9-0 kubelet.x86_64 0:1.16.9-0
作为依赖被安装:
kubernetes-cni.x86_64 0:0.8.7-0
2. 预下载 k8s 集群组件镜像
执行 kubeadm init 执行节点安装 k8s 集群时,最大的问题是在此过程中会去 k8s.gcr.io 的 kubernetes 官方镜像源下载 k8s 组件的镜像,所以我们可以提前预下载所需要的组件镜像:
查看 kubeadm init 时所需要的组件镜像列表:
[root@akito-192 ~]# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.16.9
k8s.gcr.io/kube-controller-manager:v1.16.9
k8s.gcr.io/kube-scheduler:v1.16.9
k8s.gcr.io/kube-proxy:v1.16.9
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.15-0
k8s.gcr.io/coredns:1.6.2
编写脚本,使用阿里云的 k8s 官方镜像源来下载这些镜像:
脚本的作用是从阿里云的 kubernetes 镜像源拉取镜像到本地,然后修改镜像的标签,以符合 k8s.gcr.io 的地址格式。
cat <<EOF > pull-k8s-images.sh
for i in `kubeadm config images list`; do
imageName=${i#k8s.gcr.io/}
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName
done;
EOF
3. 安装 k8s 集群
镜像下载完毕后,直接执行 kubeadm init 即可,由于不需要下载镜像了,所以初始化的速度会比较快:
[root@akito-192 ~]# kubeadm init --pod-network-cidr=10.244.0.0/16
I0201 15:07:33.974088 22762 version.go:251] remote version is much newer: v1.20.2; falling back to: stable-1.16
[init] Using Kubernetes version: v1.16.9
[preflight] Running pre-flight checks
...
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join ########:6443 --token q58npa.l68o9jccmz1hi0ez \\
--discovery-token-ca-cert-hash sha256:bda68fd978e594dac19797f58bc15c55b9e86b196a445b8e6814b429c4f6be1c
查看 kubernetes 的版本,已符合预期:
[root@akito-192 ~]# kubelet --version
Kubernetes v1.16.9
以上是关于kubeadm 安装指定版本的 k8s 集群的主要内容,如果未能解决你的问题,请参考以下文章