k8s集群搭建

  • 什么是 kubeadm?
  • 安装指定版本的 kubernetes 集群
  • 1、基础环境搭建
  • 2. 安装 v-1.17 的 kubeadm/kubelet/kubectl
  • 3. 预下载 k8s 集群组件镜像
  • 4. master节点初始化 k8s 集群
  • 5.slave节点加入集群


什么是 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.17.17 的安装器,它只能也只会安装 kubernetes-v1.17系列的版本。
假设我们现在要安装 kubernetes-v1.17.17 的版本,那么我们需要执行以下的操作:

1、基础环境搭建

(1)虚拟主机环境

项目

名称

操作系统

centos7.8

Linux内核

5.4.110-1.el7.elrepo.x86_64

cpu

2核

磁盘

50G

内存

4G

docker版本

19.03.9

(2)节点关系

主机名

主机ip

角色

node13

192.168.255.132

master节点

node13-01

192.168.255.133

slave节点

node14

192.168.255.134

slave节点

2. 安装 v-1.17 的 kubeadm/kubelet/kubectl

由于 kubeadm 的官方源在国外,所以如果不科学上网的情况下,直接下载 kubeadm 以及 kuberenets 集群组件镜像(k8s.gcr.io)会非常缓慢,这里我们直接采用阿里云的 kubernetes 镜像库来进行安装。
(1)先配置 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

查看可安装的 kubeadm 版本:

[root@node13 ~]# yum list kubeadm --showduplicates|sort -r
已加载插件:fastestmirror
已安装的软件包
可安装的软件包
 * updates: mirrors.aliyun.com
Loading mirror speeds from cached hostfile
kubeadm.x86_64                       1.9.9-0                         kubernetes 
kubeadm.x86_64                       1.9.8-0                         kubernetes 
kubeadm.x86_64                       1.9.7-0                         kubernetes 
kubeadm.x86_64                       1.9.6-0                         kubernetes 
kubeadm.x86_64                       1.9.5-0                         kubernetes 
kubeadm.x86_64                       1.9.4-0                         kubernetes

选择安装 v1.17.17-0 的 kubeadm:

[root@node13 yum.repos.d]# yum install kubelet-1.17.17-0 kubeadm-1.17.17-0 kubectl-1.17.17-0 -y
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
...
kubernetes                                                                                                      | 1.4 kB  00:00:00
...
已安装:
  kubeadm.x86_64 0:1.17.17-0                              kubectl.x86_64 0:1.17.17-0                              kubelet.x86_64 0:1.17.17-0                             

作为依赖被安装:
  kubernetes-cni.x86_64 0:0.8.7-0                                   

完毕!
# 警用swap
[root@node13 ~]# sudo swapoff -a
#设置kubelet开机启动
[root@node13 yum.repos.d]# systemctl enable kubelet && systemctl start kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
#重启docker服务
[root@node13 ~]# systemctl daemon-reload 
[root@node13 ~]# systemctl restart docker
3. 预下载 k8s 集群组件镜像

执行 kubeadm init 执行节点安装 k8s 集群时,最大的问题是在此过程中会去 k8s.gcr.io 的 kubernetes 官方镜像源下载 k8s 组件的镜像,所以我们可以提前预下载所需要的组件镜像:

查看 kubeadm init 时所需要的组件镜像列表:

[root@node13 ~]# kubeadm config images list
I0415 13:20:10.609056    5888 version.go:251] remote version is much newer: v1.21.0; falling back to: stable-1.17
W0415 13:20:11.388040    5888 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0415 13:20:11.388070    5888 validation.go:28] Cannot validate kubelet config - no validator is available
k8s.gcr.io/kube-apiserver:v1.17.17
k8s.gcr.io/kube-controller-manager:v1.17.17
k8s.gcr.io/kube-scheduler:v1.17.17
k8s.gcr.io/kube-proxy:v1.17.17
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5

编写脚本,使用阿里云的 k8s 官方镜像源来下载这些镜像:
脚本的作用是从阿里云的 kubernetes 镜像源拉取镜像到本地,然后修改镜像的标签,以符合 k8s.gcr.io 的地址格式

  • 根据kubeadm config images list命令,编辑pull-k8s-images.sh。
#创建pull-k8s-images.sh 
[root@node13 yum.repos.d]# vim pull-k8s-images.sh 

for i in k8s.gcr.io/kube-apiserver:v1.17.17 k8s.gcr.io/kube-controller-manager:v1.17.17 k8s.gcr.io/kube-scheduler:v1.17.17 k8s.gcr.io/kube-proxy:v1.17.17 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.4.3-0 k8s.gcr.io/coredns:1.6.5; do
  temp=${i#k8s.gcr.io/}
  docker pull registry.aliyuncs.com/google_containers/${temp}
  docker tag registry.aliyuncs.com/google_containers/${temp} k8s.gcr.io/${temp}
  docker rmi registry.aliyuncs.com/google_containers/${temp};
done;
#修改会可执行文件
[root@node13 yum.repos.d]# chmod +x pull-k8s-images.sh 
#执行文件
[root@node13 yum.repos.d]# ./pull-k8s-images.sh 
..
..
Digest: sha256:7ec975f167d815311a7136c32e70735f0d00b73781365df1befd46ed35bd4fe7
Status: Downloaded newer image for registry.aliyuncs.com/google_containers/coredns:1.6.5
registry.aliyuncs.com/google_containers/coredns:1.6.5
Untagged: registry.aliyuncs.com/google_containers/coredns:1.6.5
Untagged: registry.aliyuncs.com/google_containers/coredns@sha256:7ec975f167d815311a7136c32e70735f0d00b73781365df1befd46ed35bd4fe7

#检查是否下载成功
[root@node13 yum.repos.d]# docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                v1.17.17            3ef67d180564        3 months ago        117MB
k8s.gcr.io/kube-controller-manager   v1.17.17            0ddd96ecb9e5        3 months ago        161MB
k8s.gcr.io/kube-apiserver            v1.17.17            38db32e0f351        3 months ago        171MB
k8s.gcr.io/kube-scheduler            v1.17.17            d415ebbf09db        3 months ago        94.4MB
k8s.gcr.io/coredns                   1.6.5               70f311871ae1        17 months ago       41.6MB
k8s.gcr.io/etcd                      3.4.3-0             303ce5db0e90        17 months ago       288MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        3 years ago         742kB
4. master节点初始化 k8s 集群

以下步骤,只对于master节点

[root@node13 ~]# kubeadm init --apiserver-advertise-address=192.168.255.132 --kubernetes-version v1.17.17 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.81.0.0/16

[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

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 192.168.255.132:6443 --token vkidlc.wmwtmuv4doua1b86 \
    --discovery-token-ca-cert-hash sha256:8ea01d6c8881b80004102447cf0b6c5d11700d771e88eaccbaddae5048688618

安装成功

#按安装成功提示的增加config
[root@node13 ~]#   mkdir -p $HOME/.kube
[root@node13 ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@node13 ~]#   sudo chown $(id -u):$(id -g) $HOME/.kube/config
5.slave节点加入集群

slave节点重复 2、3步骤。

加入集群节点只需执行master节点创建集群的命令

kubesphere 手动修复 kubeadm reset_kubesphere 手动修复

#加入集群
[root@node14 ~]# kubeadm join 192.168.255.132:6443 --token vkidlc.wmwtmuv4doua1b86 \
>     --discovery-token-ca-cert-hash sha256:8ea01d6c8881b80004102447cf0b6c5d11700d771e88eaccbaddae5048688618

#结果

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
o apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.