Kubernetes——centos8.0 使用kubeadm部署 k8s-v1.18.20+etcd-v3.3.10+flannel-v0.10.0 高可用集群

centos8.0 使用kubeadm部署 k8s-v1.18.20+etcd-v3.4.3+flannel-v0.10.0 高可用集群

一、资源规划:

主机名 IP地址 配置 角色 系统版本
k8s-master01 10.100.12.168 2C2G master/Work/etcd centos8.0
k8s-master02 10.100.12.200 2C2G master/Work/etcd centos8.0
k8s-master-lb 10.100.12.103 - k8s-master-lb centos8.0
k8s-node01 10.100.15.246 2C4G Work/etcd centos8.0
k8s-node02 10.100.10.195 2C4G Work centos8.0

二、环境初始化:

所有主机都要做初始化操作

2.1 停止所有主机 firewalld 防火墙 :

systemctl disable --now firewalld
systemctl disable --now dnsmasq
systemctl disable --now NetworkManager
systemctl disable --now iptables

2.2 关闭 swap :

swapoff -a 
sed -i 's/.*swap.*/#&/' /etc/fstab

2.3 关闭 selinux :

setenforce  0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux

2.4 根据规划,设置 hostname :

hostnamectl set-hostname <hostname>

2.5 添加本地hosts解析 :

cat >> /etc/hosts << EOF
10.100.12.168 k8s-master01
10.100.10.200 k8s-master02
10.100.10.103 k8s-master-lb
10.100.15.246 k8s-node01
10.100.10.195 k8s-node02
EOF

2.6 将桥接的 ipv4 流量传递到 iptables 的链 :

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system  # 生效

2.7 时间同步 :

yum install chrony -y
systemctl restart chronyd.service
systemctl enable --now chronyd.service
chronyc -a makestep

2.8 查看当前系统版本 :

cat /etc/redhat-release 
CentOS Linux release 8.0.1905 (Core) 

2.9 查看当前系统内核版本 :

uname -r
4.18.0-80.el8.x86_64

2.10 使用 elrepo 仓库 :

  这里使用ELRepo仓库,ELRepo 仓库是基于社区的用于企业级 Linux 仓库,提供对 RedHat Enterprise(RHEL)和其他基于 RHEL的 Linux 发行版(CentOS、Scientific、Fedora 等)的支持。ELRepo 聚焦于和硬件相关的软件包,包括文件系统驱动、显卡驱动、网络驱动、声卡驱动和摄像头驱动等。网址:http://elrepo.org/tiki/tiki-index.php :

  2.10.1 导入 elrepo 仓库的公共密钥:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

  2.10.2 安装 elrepo 仓库的 yum 源:

yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm -y

2.11 查看当前可用的系统内核安装包

[root@k8s-master01 ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
Last metadata expiration check: 0:14:52 ago on Fri 17 Dec 2021 05:23:37 PM CST.
Available Packages
bpftool.x86_64                                             5.15.8-1.el8.elrepo                           elrepo-kernel
kernel-lt.x86_64                                           5.4.166-1.el8.elrepo                          elrepo-kernel
kernel-lt-core.x86_64                                      5.4.166-1.el8.elrepo                          elrepo-kernel
kernel-lt-devel.x86_64                                     5.4.166-1.el8.elrepo                          elrepo-kernel
kernel-lt-doc.noarch                                       5.4.166-1.el8.elrepo                          elrepo-kernel
kernel-lt-headers.x86_64                                   5.4.166-1.el8.elrepo                          elrepo-kernel
kernel-lt-modules.x86_64                                   5.4.166-1.el8.elrepo                          elrepo-kernel
kernel-lt-modules-extra.x86_64                             5.4.166-1.el8.elrepo                          elrepo-kernel
kernel-lt-tools.x86_64                                     5.4.166-1.el8.elrepo                          elrepo-kernel
kernel-lt-tools-libs.x86_64                                5.4.166-1.el8.elrepo                          elrepo-kernel
kernel-lt-tools-libs-devel.x86_64                          5.4.166-1.el8.elrepo                          elrepo-kernel
kernel-ml-devel.x86_64                                     5.15.8-1.el8.elrepo                           elrepo-kernel
kernel-ml-doc.noarch                                       5.15.8-1.el8.elrepo                           elrepo-kernel
kernel-ml-headers.x86_64                                   5.15.8-1.el8.elrepo                           elrepo-kernel
kernel-ml-modules-extra.x86_64                             5.15.8-1.el8.elrepo                           elrepo-kernel
kernel-ml-tools.x86_64                                     5.15.8-1.el8.elrepo                           elrepo-kernel
kernel-ml-tools-libs.x86_64                                5.15.8-1.el8.elrepo                           elrepo-kernel
kernel-ml-tools-libs-devel.x86_64                          5.15.8-1.el8.elrepo                           elrepo-kernel
perf.x86_64                                                5.15.8-1.el8.elrepo                           elrepo-kernel
python3-perf.x86_64                                        5.15.8-1.el8.elrepo                           elrepo-kernel
[root@k8s-master01 ~]# 

2.12 安装最新版内核 :

yum --enablerepo=elrepo-kernel install kernel-ml -y

2.13 设置以新的内核启动:

  0 表示最新安装的内核,设置为 0 表示以新版本内核启动:

grub2-set-default 0

2.14 生成 grub 配置文件并重启系统 :

grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
遇到报错:
[root@k8s-master01 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
/usr/bin/grub2-editenv: error: environment block too small.
-------
解决办法:
[root@k8s-master01 ~]# mv /boot/grub2/grubenv /home/bak
[root@k8s-master01 ~]# grub2-editenv /boot/grub2/grubenv create
[root@k8s-master01 ~]# yum --enablerepo=elrepo-kernel install kernel-ml
Last metadata expiration check: 0:06:48 ago on Tue 16 Nov 2021 06:58:49 PM CST.
Package kernel-ml-5.15.2-1.el8.elrepo.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@k8s-master01 ~]# grub2-set-default 0
[root@k8s-master01 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
done
[root@k8s-master01 ~]# 

2.15 验证新内核:

旧内核版本: 4.18.0-80.el8.x86_64
新内核版本: 5.15.8-1.el8.elrepo.x86_64

2.16 查看系统中已安装的内核:

[root@k8s-master01 ~]# rpm -qa | grep kernel
kernel-ml-modules-5.15.2-1.el8.elrepo.x86_64
kernel-core-4.18.0-80.el8.x86_64
kernel-modules-4.18.0-80.el8.x86_64
kernel-tools-libs-4.18.0-80.el8.x86_64
kernel-4.18.0-80.el8.x86_64
kernel-ml-core-5.15.2-1.el8.elrepo.x86_64
kernel-ml-5.15.2-1.el8.elrepo.x86_64
kernel-tools-4.18.0-80.el8.x86_64
[root@k8s-master01 ~]# 

2.17 删除旧内核

yum remove -y kernel-core-4.18.0

2.18 再查看系统中已安装的内核 

[root@k8s-master01 ~]# rpm -qa | grep kernel
kernel-ml-core-5.15.8-1.el8.elrepo.x86_64
kernel-tools-libs-4.18.0-80.el8.x86_64
kernel-ml-modules-5.15.8-1.el8.elrepo.x86_64
kernel-ml-5.15.8-1.el8.elrepo.x86_64
kernel-tools-4.18.0-80.el8.x86_64

  也可以安装 yum-utils 工具,当系统安装的内核大于3个时,会自动删除旧的内核版本:

yum install yum-utils -y

2.19 设置ulimit参数

echo "* soft nofile 655360" >> /etc/security/limits.conf
echo "* hard nofile 655360" >> /etc/security/limits.conf
echo "* soft nproc 655360" >> /etc/security/limits.conf
echo "* hard nproc 655360" >> /etc/security/limits.conf
echo "* soft memlock unlimited" >> /etc/security/limits.conf
echo "* hard memlock unlimited" >> /etc/security/limits.conf
echo "DefaultLimitNOFILE=1024000" >> /etc/systemd/system.conf
echo "DefaultLimitNPROC=1024000" >> /etc/systemd/system.conf

2.20 安装ipvsadm

yum install ipvsadm ipset sysstat conntrack libseccomp -y

  所有节点都要配置 ipvs 模块,在内核 4.19 版本 nf_conntrack_ipv4 已经改为 nf_conntrack,本例内核版本已经大于 4.19 版本,所以使用 nf_conntrack:

modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
modprobe -- ip_tables
modprobe -- ip_set
modprobe -- xt_set
modprobe -- ipt_set
modprobe -- ipt_rpfilter
modprobe -- ipt_REJECT
modprobe -- ipip

  检查是否加载,可以将其加入至开机自动加载(在目录 /etc/sysconfig/modules/k8s.modules 写上如上命令):

more /etc/sysconfig/modules/k8s.modules
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
modprobe -- ip_tables
modprobe -- ip_set
modprobe -- xt_set
modprobe -- ipt_set
modprobe -- ipt_rpfilter
modprobe -- ipt_REJECT
modprobe -- ipip
[root@k8s-master01 ~]# lsmod |grep -e ip_vs -e nf_conntrack
ip_vs_sh               16384  0
ip_vs_wrr              16384  0
ip_vs_rr               16384  0
ip_vs                 180224  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          176128  1 ip_vs
nf_defrag_ipv6         24576  2 nf_conntrack,ip_vs
nf_defrag_ipv4         16384  1 nf_conntrack
libcrc32c              16384  3 nf_conntrack,xfs,ip_vs
[root@k8s-master01 ~]# 

2.21 开启一些K8S集群中必须的内核参数,所有节点配置K8S内核:

cat <<EOF > /etc/sysctl.d/99-kubernetes.conf 
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
# 以下三个参数是 arp 缓存的 gc 阀值,相比默认值提高了,当内核维护的 arp 表过于庞大时候,可以考虑优化下,避免在某些场景下arp缓存溢出导致网络超时,参考:https://k8s.imroc.io/avoid/cases/arp-cache-overflow-causes-healthcheck-failed
# 存在于 ARP 高速缓存中的最少层数,如果少于这个数,垃圾收集器将不会运行。缺省值是 128 
net.ipv4.neigh.default.gc_thresh1 = 2048 
# 保存在 ARP 高速缓存中的最多的记录软限制。垃圾收集器在开始收集前,允许记录数超过这个数字 5 秒。缺省值是 512 
net.ipv4.neigh.default.gc_thresh2 = 4096 
# 保存在 ARP 高速缓存中的最多记录的硬限制,一旦高速缓存中的数目高于此,垃圾收集器将马上运行。缺省值是 1024 
net.ipv4.neigh.default.gc_thresh3 = 8192
# 该参数用于设定系统中最多允许存在多少tcp套接字不被关联到任何一个用户文件句柄上
net.ipv4.tcp_max_orphans = 32768
# 在 TIME_WAIT 数量等于 tcp_max_tw_buckets 时,不会有新的 TIME_WAIT 产生
net.ipv4.tcp_max_tw_buckets = 32768
net.ipv4.ip_forward = 1
# net.ipv4.tcp_tw_recycle 这个内核参数的作用是通过 PAWS 实现 TIME_WAIT 快速回收。在 PAWS 的理论基础上,如果内核保存 Per-Host 的最近接收时间戳,接收数据包时进行时间戳比对,就能避免 TIME_WAIT 意图解决的第二个问题:前一个连接的数据包在新连接中被当做有效数据包处理的情况。这样就没有必要维持 TIME_WAIT 状态 2 * MSL 的时间来等待数据包消失,仅需要等待足够的 RTO(超时重传),解决 ACK 丢失需要重传的情况,来达到快速回收TIME_WAIT状态连接的目的。但上述理论在多个客户端使用 NAT 访问服务器时会产生新的问题:同一个 NAT 背后的多个客户端时间戳是很难保持一致的( timestamp 机制使用的是系统启动相对时间),对于服务器来说,两台客户端主机各自建立的 TCP 连接表现为同一个对端 IP 的两个连接,按照 Per-Host 记录的最近接收时间戳会更新为两台客户端主机中时间戳较大的那个,而时间戳相对较小的客户端发出的所有数据包对服务器来说都是这台主机已过期的重复数据,因此会直接丢弃。这就是之前我描述的问题产生的根本原因,在公司的 NAT 防火墙内会有问题,而在防火墙外面就没有问题;设置 net.ipv4.tcp_tw_recycle=1 的服务器访问有问题,而没有进行内核参数优化的另一台服务器没有问题
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 0
#允许TW sockets用于新的TCP连接
net.ipv4.tcp_tw_reuse = 1
vm.swappiness = 0
# vm.overcommit_memory内存分配策略 
# 0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 
# 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何
# 2:表示内核允许分配超过所有物理内存和交换空间总和的内存
vm.overcommit_memory = 1
# 等于0时,表示当内存耗尽时,内核会触发OOM killer杀掉最耗内存的进程
vm.panic_on_oom = 0
# 最大文件句柄
vm.max_map_count = 262144
# 表示同一用户同时最大可以创建的 inotify 实例 (每个实例可以有很多 watch) 
fs.inotify.max_user_instances = 8192
# 表示同一用户同时可以添加的watch数目(watch一般是针对目录,决定了同时同一用户可以监控的目录数量) 默认值 8192 在容器场景下偏小,在某些情况下可能会导致 inotify watch 数量耗尽,使得创建 Pod 不成功或者 kubelet 无法启动成功,将其优化到 524288
fs.inotify.max_user_watches = 1048576
# 系统级别文件句柄设置
fs.file-max = 52706963
fs.nr_open = 52706963
net.ipv6.conf.all.disable_ipv6 = 1
# 查看established连接状态最多保留几天,默认是432000秒,就是5天
net.netfilter.nf_conntrack_tcp_timeout_established = 7200
# 此参数表示是否允许服务绑定一个本机不存在的IP地址
net.ipv4.ip_nonlocal_bind = 1
# 保存在 ARP 高速缓存中的最多记录的硬限制,一旦高速缓存中的数目高于此,垃圾收集器将马上运行。缺省值是 1024 
net.ipv4.neigh.default.gc_thresh3 = 8192
# 最大跟踪连接数,默认 nf_conntrack_buckets * 4
net.nf_conntrack_max = 1048576
# 允许的最大跟踪连接条目,是在内核内存中 netfilter 可以同时处理的“任务”(连接跟踪条目
net.netfilter.nf_conntrack_max = 2310720
# tcp_max_syn_backlog是指定所能接受SYN同步包的最大客户端数量,即半连接上限,默认值是128,即SYN_REVD状态的连接数
net.ipv4.tcp_max_syn_backlog = 8096
# 哈希表大小(只读)(64位系统、8G内存默认 65536,16G翻倍,如此类推)net.netfilter.nf_conntrack_buckets 不能直接改(报错)需要修改模块的设置:echo 65536 > /sys/module/nf_conntrack/parameters/hashsize
net.netfilter.nf_conntrack_buckets = 65536
# 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 10000
# 表示socket监听(listen)的backlog上限,也就是就是socket的监听队列(accept queue),当一个tcp连接尚未被处理或建立时(半连接状态),会保存在这个监听队列,默认为 128,在高并发场景下偏小,优化到 32768。参考 https://imroc.io/posts/kubernetes-overflow-and-drop/
net.core.somaxconn = 32768
# PID 与线程限制
kernel.pid_max=65535
kernel.threads-max=65535
EOF

三、部署 docker Engine:

所有主机都要安装 docker engine,官方安装步骤文档: https://docs.docker.com/engine/install/centos

3.1 操作系统版本要求🔗

  To install Docker Engine, you need a maintained version of CentOS 7 or 8. Archived versions aren’t supported or tested.

The centos-extras repository must be enabled. This repository is enabled by default, but if you have disabled it, you need to re-enable it.

The overlay2 storage driver is recommended.

3.2 卸载老版本的 docker 

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

3.3 配置 yum 源

 sudo yum install -y yum-utils
 sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3.4 yum 安装最新的 docker engine

yum install -y docker-ce-3:19.03.15-3.el8.x86_64 docker-ce-cli-1:19.03.15-3.el8.x86_64 containerd.io-1.4.12-3.1.el8.x86_64 
(做到后面时遇到docker版本太高了,kubernetes v1.18.20 latest 支持的 docker 版本是 docker-ce19.03,就卸载了docker-ce-20版本,重新安装了docker-ce-19.03)
(之前安装 docker-ce 的时候遇到报错,因为之前安装时候已经解决了,重新安装 docker-ce 没有遇到报错,但还是记录下解决办法,读者如果 kubernetes 版本如果和我一样,安装 docker-ce 的时候,
请执行本条特定 docker 版本的 yum 命令来安装)
遇到报错:
[root@k8s-master01 ~]# sudo yum install docker-ce docker-ce-cli containerd.io
Docker CE Stable - x86_64                                                                               14 kB/s | 3.5 kB     00:00    
Error: 
 Problem 1: problem with installed package podman-1.0.0-2.git921f98f.module_el8.0.0+58+91b614e7.x86_64
  - package podman-1.0.0-2.git921f98f.module_el8.0.0+58+91b614e7.x86_64 requires runc, but none of the providers can be installed
  - package podman-3.2.3-0.11.module_el8.4.0+942+d25aada8.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed
  - package podman-3.2.3-0.10.module_el8.4.0+886+c9a8d9ad.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed
  - package podman-3.0.1-7.module_el8.4.0+830+8027e1c4.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed
  - package podman-3.0.1-6.module_el8.4.0+781+acf4c33b.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed
  - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - cannot install the best candidate for the job
  - package runc-1.0.0-56.rc5.dev.git2abd837.module_el8.3.0+569+1bada2e4.x86_64 is filtered out by modular filtering
  - package runc-1.0.0-64.rc10.module_el8.4.0+522+66908d0c.x86_64 is filtered out by modular filtering
  - package runc-1.0.0-65.rc10.module_el8.4.0+819+4afbd1d6.x86_64 is filtered out by modular filtering
  - package runc-1.0.0-70.rc92.module_el8.4.0+786+4668b267.x86_64 is filtered out by modular filtering
  - package runc-1.0.0-71.rc92.module_el8.4.0+833+9763146c.x86_64 is filtered out by modular filtering
  - package runc-1.0.0-72.rc92.module_el8.4.0+964+56b6762f.x86_64 is filtered out by modular filtering
 Problem 2: package buildah-1.19.7-1.module_el8.4.0+781+acf4c33b.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
  - package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package docker-ce-3:20.10.10-3.el8.x86_64 requires containerd.io >= 1.4.1, but none of the providers can be installed
  - package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - problem with installed package buildah-1.5-3.gite94b4f9.module_el8.0.0+58+91b614e7.x86_64
  - package buildah-1.19.7-2.module_el8.4.0+830+8027e1c4.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
  - package containerd.io-1.4.10-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.10-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.8-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.8-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.9-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - package containerd.io-1.4.9-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-55.rc5.dev.git2abd837.module_el8.0.0+58+91b614e7.x86_64
  - cannot install the best candidate for the job
  - package runc-1.0.0-56.rc5.dev.git2abd837.module_el8.3.0+569+1bada2e4.x86_64 is filtered out by modular filtering
  - package runc-1.0.0-64.rc10.module_el8.4.0+522+66908d0c.x86_64 is filtered out by modular filtering
  - package runc-1.0.0-65.rc10.module_el8.4.0+819+4afbd1d6.x86_64 is filtered out by modular filtering
  - package runc-1.0.0-70.rc92.module_el8.4.0+786+4668b267.x86_64 is filtered out by modular filtering
  - package runc-1.0.0-71.rc92.module_el8.4.0+833+9763146c.x86_64 is filtered out by modular filtering
  - package runc-1.0.0-72.rc92.module_el8.4.0+964+56b6762f.x86_64 is filtered out by modular filtering
  - package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.8-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.8-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.8-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.8-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.8-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.8-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.9-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.9-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.9-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.9-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.9-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.9-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.10-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.10-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.10-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.10-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.10-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.10-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package containerd.io-1.4.11-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-74.rc95.module_el8.4.0+886+c9a8d9ad.x86_64
  - package buildah-1.21.4-1.module_el8.4.0+886+c9a8d9ad.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
  - package buildah-1.21.4-2.module_el8.4.0+942+d25aada8.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
  - package buildah-1.5-3.gite94b4f9.module_el8.0.0+58+91b614e7.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
解决办法:
[root@k8s-master01 ~]# sudo yum install -y --allowerasing
docker-ce-3:19.03.15-3.el8.x86_64 docker-ce-cli-1:19.03.15-3.el8.x86_64 containerd.io-1.4.12-3.1.el8.x86_64

3.5 yum 安装指定版本 docker engine

[root@k8s-master01 ~]# yum list docker-ce --showduplicates | sort -r
Last metadata expiration check: 0:07:10 ago on Wed 17 Nov 2021 11:46:17 AM CST.
Installed Packages
docker-ce.x86_64               3:20.10.9-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.8-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.7-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.6-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.5-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.4-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.3-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.2-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.1-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.10-3.el8                docker-ce-stable 
docker-ce.x86_64               3:20.10.10-3.el8                @docker-ce-stable
docker-ce.x86_64               3:20.10.0-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:19.03.15-3.el8                docker-ce-stable 
docker-ce.x86_64               3:19.03.14-3.el8                docker-ce-stable 
docker-ce.x86_64               3:19.03.13-3.el8                docker-ce-stable 
Available Packages
[root@k8s-master01 ~]# 

3.6 添加阿里云 docker 镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://zp4fac78.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload

 

3.7 启动 docker engine

systemctl start docker 
systemctl enable docker 
systemctl status docker

四、部署 kubeadm、kubectl、kubelet

  4.1 使用 kubernetes repo 仓库

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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

  4.2 查看可用 kubeadm 组件版本

[root@k8s-master01 yum.repos.d]# yum list  kubeadm.x86_64 --showduplicates | sort -r
Last metadata expiration check: 0:00:01 ago on Fri 17 Dec 2021 06:23:15 PM CST.
Kubernetes                                      957 kB/s | 136 kB     00:00    
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
kubeadm.x86_64                       1.9.3-0                          kubernetes
kubeadm.x86_64                       1.9.2-0                          kubernetes
kubeadm.x86_64                       1.9.11-0                         kubernetes
kubeadm.x86_64                       1.9.1-0                          kubernetes
kubeadm.x86_64                       1.9.10-0                         kubernetes
kubeadm.x86_64                       1.9.0-0                          kubernetes
kubeadm.x86_64                       1.8.9-0                          kubernetes
kubeadm.x86_64                       1.8.8-0                          kubernetes
kubeadm.x86_64                       1.8.7-0                          kubernetes
kubeadm.x86_64                       1.8.6-0                          kubernetes
kubeadm.x86_64                       1.8.5-0                          kubernetes
kubeadm.x86_64                       1.8.4-0                          kubernetes
kubeadm.x86_64                       1.8.3-0                          kubernetes
kubeadm.x86_64                       1.8.2-0                          kubernetes
kubeadm.x86_64                       1.8.15-0                         kubernetes
kubeadm.x86_64                       1.8.14-0                         kubernetes
kubeadm.x86_64                       1.8.13-0                         kubernetes
kubeadm.x86_64                       1.8.12-0                         kubernetes
kubeadm.x86_64                       1.8.11-0                         kubernetes
kubeadm.x86_64                       1.8.1-0                          kubernetes
kubeadm.x86_64                       1.8.10-0                         kubernetes
kubeadm.x86_64                       1.8.0-1                          kubernetes
kubeadm.x86_64                       1.8.0-0                          kubernetes
kubeadm.x86_64                       1.7.9-0                          kubernetes
kubeadm.x86_64                       1.7.8-1                          kubernetes
kubeadm.x86_64                       1.7.7-1                          kubernetes
kubeadm.x86_64                       1.7.6-1                          kubernetes
kubeadm.x86_64                       1.7.5-0                          kubernetes
kubeadm.x86_64                       1.7.4-0                          kubernetes
kubeadm.x86_64                       1.7.3-1                          kubernetes
kubeadm.x86_64                       1.7.2-0                          kubernetes
kubeadm.x86_64                       1.7.16-0                         kubernetes
kubeadm.x86_64                       1.7.15-0                         kubernetes
kubeadm.x86_64                       1.7.14-0                         kubernetes
kubeadm.x86_64                       1.7.11-0                         kubernetes
kubeadm.x86_64                       1.7.1-0                          kubernetes
kubeadm.x86_64                       1.7.10-0                         kubernetes
kubeadm.x86_64                       1.7.0-0                          kubernetes
kubeadm.x86_64                       1.6.9-0                          kubernetes
kubeadm.x86_64                       1.6.8-0                          kubernetes
kubeadm.x86_64                       1.6.7-0                          kubernetes
kubeadm.x86_64                       1.6.6-0                          kubernetes
kubeadm.x86_64                       1.6.5-0                          kubernetes
kubeadm.x86_64                       1.6.4-0                          kubernetes
kubeadm.x86_64                       1.6.3-0                          kubernetes
kubeadm.x86_64                       1.6.2-0                          kubernetes
kubeadm.x86_64                       1.6.13-0                         kubernetes
kubeadm.x86_64                       1.6.12-0                         kubernetes
kubeadm.x86_64                       1.6.11-0                         kubernetes
kubeadm.x86_64                       1.6.1-0                          kubernetes
kubeadm.x86_64                       1.6.10-0                         kubernetes
kubeadm.x86_64                       1.6.0-0                          kubernetes
kubeadm.x86_64                       1.23.1-0                         kubernetes
kubeadm.x86_64                       1.23.0-0                         kubernetes
kubeadm.x86_64                       1.22.5-0                         kubernetes
kubeadm.x86_64                       1.22.4-0                         kubernetes
kubeadm.x86_64                       1.22.3-0                         kubernetes
kubeadm.x86_64                       1.22.2-0                         kubernetes
kubeadm.x86_64                       1.22.1-0                         kubernetes
kubeadm.x86_64                       1.22.0-0                         kubernetes
kubeadm.x86_64                       1.21.8-0                         kubernetes
kubeadm.x86_64                       1.21.7-0                         kubernetes
kubeadm.x86_64                       1.21.6-0                         kubernetes
kubeadm.x86_64                       1.21.5-0                         kubernetes
kubeadm.x86_64                       1.21.4-0                         kubernetes
kubeadm.x86_64                       1.21.3-0                         kubernetes
kubeadm.x86_64                       1.21.2-0                         kubernetes
kubeadm.x86_64                       1.21.1-0                         kubernetes
kubeadm.x86_64                       1.21.0-0                         kubernetes
kubeadm.x86_64                       1.20.9-0                         kubernetes
kubeadm.x86_64                       1.20.8-0                         kubernetes
kubeadm.x86_64                       1.20.7-0                         kubernetes
kubeadm.x86_64                       1.20.6-0                         kubernetes
kubeadm.x86_64                       1.20.5-0                         kubernetes
kubeadm.x86_64                       1.20.4-0                         kubernetes
kubeadm.x86_64                       1.20.2-0                         kubernetes
kubeadm.x86_64                       1.20.14-0                        kubernetes
kubeadm.x86_64                       1.20.13-0                        kubernetes
kubeadm.x86_64                       1.20.12-0                        kubernetes
kubeadm.x86_64                       1.20.11-0                        kubernetes
kubeadm.x86_64                       1.20.1-0                         kubernetes
kubeadm.x86_64                       1.20.10-0                        kubernetes
kubeadm.x86_64                       1.20.0-0                         kubernetes
kubeadm.x86_64                       1.19.9-0                         kubernetes
kubeadm.x86_64                       1.19.8-0                         kubernetes
kubeadm.x86_64                       1.19.7-0                         kubernetes
kubeadm.x86_64                       1.19.6-0                         kubernetes
kubeadm.x86_64                       1.19.5-0                         kubernetes
kubeadm.x86_64                       1.19.4-0                         kubernetes
kubeadm.x86_64                       1.19.3-0                         kubernetes
kubeadm.x86_64                       1.19.2-0                         kubernetes
kubeadm.x86_64                       1.19.16-0                        kubernetes
kubeadm.x86_64                       1.19.15-0                        kubernetes
kubeadm.x86_64                       1.19.14-0                        kubernetes
kubeadm.x86_64                       1.19.13-0                        kubernetes
kubeadm.x86_64                       1.19.12-0                        kubernetes
kubeadm.x86_64                       1.19.11-0                        kubernetes
kubeadm.x86_64                       1.19.1-0                         kubernetes
kubeadm.x86_64                       1.19.10-0                        kubernetes
kubeadm.x86_64                       1.19.0-0                         kubernetes
kubeadm.x86_64                       1.18.9-0                         kubernetes
kubeadm.x86_64                       1.18.8-0                         kubernetes
kubeadm.x86_64                       1.18.6-0                         kubernetes
kubeadm.x86_64                       1.18.5-0                         kubernetes
kubeadm.x86_64                       1.18.4-1                         kubernetes
kubeadm.x86_64                       1.18.4-0                         kubernetes
kubeadm.x86_64                       1.18.3-0                         kubernetes
kubeadm.x86_64                       1.18.2-0                         kubernetes
kubeadm.x86_64                       1.18.20-0                        kubernetes
kubeadm.x86_64                       1.18.19-0                        kubernetes
kubeadm.x86_64                       1.18.18-0                        kubernetes
kubeadm.x86_64                       1.18.17-0                        kubernetes
kubeadm.x86_64                       1.18.16-0                        kubernetes
kubeadm.x86_64                       1.18.15-0                        kubernetes
kubeadm.x86_64                       1.18.14-0                        kubernetes
kubeadm.x86_64                       1.18.13-0                        kubernetes
kubeadm.x86_64                       1.18.12-0                        kubernetes
kubeadm.x86_64                       1.18.1-0                         kubernetes
kubeadm.x86_64                       1.18.10-0                        kubernetes
kubeadm.x86_64                       1.18.0-0                         kubernetes
kubeadm.x86_64                       1.17.9-0                         kubernetes
kubeadm.x86_64                       1.17.8-0                         kubernetes
kubeadm.x86_64                       1.17.7-1                         kubernetes
kubeadm.x86_64                       1.17.7-0                         kubernetes
kubeadm.x86_64                       1.17.6-0                         kubernetes
kubeadm.x86_64                       1.17.5-0                         kubernetes
kubeadm.x86_64                       1.17.4-0                         kubernetes
kubeadm.x86_64                       1.17.3-0                         kubernetes
kubeadm.x86_64                       1.17.2-0                         kubernetes
kubeadm.x86_64                       1.17.17-0                        kubernetes
kubeadm.x86_64                       1.17.16-0                        kubernetes
kubeadm.x86_64                       1.17.15-0                        kubernetes
kubeadm.x86_64                       1.17.14-0                        kubernetes
kubeadm.x86_64                       1.17.13-0                        kubernetes
kubeadm.x86_64                       1.17.12-0                        kubernetes
kubeadm.x86_64                       1.17.11-0                        kubernetes
kubeadm.x86_64                       1.17.1-0                         kubernetes
kubeadm.x86_64                       1.17.0-0                         kubernetes
kubeadm.x86_64                       1.16.9-0                         kubernetes
kubeadm.x86_64                       1.16.8-0                         kubernetes
kubeadm.x86_64                       1.16.7-0                         kubernetes
kubeadm.x86_64                       1.16.6-0                         kubernetes
kubeadm.x86_64                       1.16.5-0                         kubernetes
kubeadm.x86_64                       1.16.4-0                         kubernetes
kubeadm.x86_64                       1.16.3-0                         kubernetes
kubeadm.x86_64                       1.16.2-0                         kubernetes
kubeadm.x86_64                       1.16.15-0                        kubernetes
kubeadm.x86_64                       1.16.14-0                        kubernetes
kubeadm.x86_64                       1.16.13-0                        kubernetes
kubeadm.x86_64                       1.16.12-0                        kubernetes
kubeadm.x86_64                       1.16.11-1                        kubernetes
kubeadm.x86_64                       1.16.11-0                        kubernetes
kubeadm.x86_64                       1.16.1-0                         kubernetes
kubeadm.x86_64                       1.16.10-0                        kubernetes
kubeadm.x86_64                       1.16.0-0                         kubernetes
kubeadm.x86_64                       1.15.9-0                         kubernetes
kubeadm.x86_64                       1.15.8-0                         kubernetes
kubeadm.x86_64                       1.15.7-0                         kubernetes
kubeadm.x86_64                       1.15.6-0                         kubernetes
kubeadm.x86_64                       1.15.5-0                         kubernetes
kubeadm.x86_64                       1.15.4-0                         kubernetes
kubeadm.x86_64                       1.15.3-0                         kubernetes
kubeadm.x86_64                       1.15.2-0                         kubernetes
kubeadm.x86_64                       1.15.12-0                        kubernetes
kubeadm.x86_64                       1.15.11-0                        kubernetes
kubeadm.x86_64                       1.15.1-0                         kubernetes
kubeadm.x86_64                       1.15.10-0                        kubernetes
kubeadm.x86_64                       1.15.0-0                         kubernetes
kubeadm.x86_64                       1.14.9-0                         kubernetes
kubeadm.x86_64                       1.14.8-0                         kubernetes
kubeadm.x86_64                       1.14.7-0                         kubernetes
kubeadm.x86_64                       1.14.6-0                         kubernetes
kubeadm.x86_64                       1.14.5-0                         kubernetes
kubeadm.x86_64                       1.14.4-0                         kubernetes
kubeadm.x86_64                       1.14.3-0                         kubernetes
kubeadm.x86_64                       1.14.2-0                         kubernetes
kubeadm.x86_64                       1.14.1-0                         kubernetes
kubeadm.x86_64                       1.14.10-0                        kubernetes
kubeadm.x86_64                       1.14.0-0                         kubernetes
kubeadm.x86_64                       1.13.9-0                         kubernetes
kubeadm.x86_64                       1.13.8-0                         kubernetes
kubeadm.x86_64                       1.13.7-0                         kubernetes
kubeadm.x86_64                       1.13.6-0                         kubernetes
kubeadm.x86_64                       1.13.5-0                         kubernetes
kubeadm.x86_64                       1.13.4-0                         kubernetes
kubeadm.x86_64                       1.13.3-0                         kubernetes
kubeadm.x86_64                       1.13.2-0                         kubernetes
kubeadm.x86_64                       1.13.12-0                        kubernetes
kubeadm.x86_64                       1.13.11-0                        kubernetes
kubeadm.x86_64                       1.13.1-0                         kubernetes
kubeadm.x86_64                       1.13.10-0                        kubernetes
kubeadm.x86_64                       1.13.0-0                         kubernetes
kubeadm.x86_64                       1.12.9-0                         kubernetes
kubeadm.x86_64                       1.12.8-0                         kubernetes
kubeadm.x86_64                       1.12.7-0                         kubernetes
kubeadm.x86_64                       1.12.6-0                         kubernetes
kubeadm.x86_64                       1.12.5-0                         kubernetes
kubeadm.x86_64                       1.12.4-0                         kubernetes
kubeadm.x86_64                       1.12.3-0                         kubernetes
kubeadm.x86_64                       1.12.2-0                         kubernetes
kubeadm.x86_64                       1.12.1-0                         kubernetes
kubeadm.x86_64                       1.12.10-0                        kubernetes
kubeadm.x86_64                       1.12.0-0                         kubernetes
kubeadm.x86_64                       1.11.9-0                         kubernetes
kubeadm.x86_64                       1.11.8-0                         kubernetes
kubeadm.x86_64                       1.11.7-0                         kubernetes
kubeadm.x86_64                       1.11.6-0                         kubernetes
kubeadm.x86_64                       1.11.5-0                         kubernetes
kubeadm.x86_64                       1.11.4-0                         kubernetes
kubeadm.x86_64                       1.11.3-0                         kubernetes
kubeadm.x86_64                       1.11.2-0                         kubernetes
kubeadm.x86_64                       1.11.1-0                         kubernetes
kubeadm.x86_64                       1.11.10-0                        kubernetes
kubeadm.x86_64                       1.11.0-0                         kubernetes
kubeadm.x86_64                       1.10.9-0                         kubernetes
kubeadm.x86_64                       1.10.8-0                         kubernetes
kubeadm.x86_64                       1.10.7-0                         kubernetes
kubeadm.x86_64                       1.10.6-0                         kubernetes
kubeadm.x86_64                       1.10.5-0                         kubernetes
kubeadm.x86_64                       1.10.4-0                         kubernetes
kubeadm.x86_64                       1.10.3-0                         kubernetes
kubeadm.x86_64                       1.10.2-0                         kubernetes
kubeadm.x86_64                       1.10.13-0                        kubernetes
kubeadm.x86_64                       1.10.12-0                        kubernetes
kubeadm.x86_64                       1.10.11-0                        kubernetes
kubeadm.x86_64                       1.10.1-0                         kubernetes
kubeadm.x86_64                       1.10.10-0                        kubernetes
kubeadm.x86_64                       1.10.0-0                         kubernetes
Available Packages
[root@k8s-master01 yum.repos.d]#

  4.3 安装指定 kubeadm 组件版本

  所有节点安装k8s组件。本例安装的为 1.18.20:

[root@k8s-master01 yum.repos.d]# yum install -y kubeadm-1.18.20-0.x86_64 kubectl-1.18.20-0.x86_64 kubelet-1.18.20-0.x86_64
Last metadata expiration check: 0:03:13 ago on Fri 17 Dec 2021 06:23:15 PM CST.
Dependencies resolved.
======================================================================================================================
 Package                        Architecture           Version                       Repository                  Size
======================================================================================================================
Installing:
 kubeadm                        x86_64                 1.18.20-0                     kubernetes                 8.8 M
 kubectl                        x86_64                 1.18.20-0                     kubernetes                 9.5 M
 kubelet                        x86_64                 1.18.20-0                     kubernetes                  21 M
Installing dependencies:
 cri-tools                      x86_64                 1.19.0-0                      kubernetes                 5.7 M
 kubernetes-cni                 x86_64                 0.8.7-0                       kubernetes                  19 M
 socat                          x86_64                 1.7.4.1-1.el8                 AppStream                  323 k

Transaction Summary
======================================================================================================================
Install  6 Packages

Total download size: 64 M
Installed size: 268 M
Downloading Packages:
(1/6): socat-1.7.4.1-1.el8.x86_64.rpm                                                  28 MB/s | 323 kB     00:00    
(2/6): 7b74bef0dca4f00ce1005168bdff8128479b15358b47b7f1514206789490c01a-kubeadm-1.18. 1.3 MB/s | 8.8 MB     00:06    
(3/6): 67ffa375b03cea72703fe446ff00963919e8fce913fbc4bb86f06d1475a6bdf9-cri-tools-1.1 715 kB/s | 5.7 MB     00:08    
(4/6): 16f7bea4bddbf51e2f5582bce368bf09d4d1ed98a82ca1e930e9fe183351a653-kubectl-1.18. 688 kB/s | 9.5 MB     00:14    
(5/6): 942aea8dd81ddbe1873f7760007e31325c9740fa9f697565a83af778c22a419d-kubelet-1.18. 1.4 MB/s |  21 MB     00:15    
(6/6): db7cb5cb0b3f6875f54d10f02e625573988e3e91fd4fc5eef0b1876bb18604ad-kubernetes-cn 1.2 MB/s |  19 MB     00:15    
----------------------------------------------------------------------------------------------------------------------
Total                                                                                 2.7 MB/s |  64 MB     00:23     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                              1/1 
  Installing       : kubectl-1.18.20-0.x86_64                                                                     1/6 
  Installing       : cri-tools-1.19.0-0.x86_64                                                                    2/6 
  Installing       : socat-1.7.4.1-1.el8.x86_64                                                                   3/6 
  Installing       : kubernetes-cni-0.8.7-0.x86_64                                                                4/6 
  Installing       : kubelet-1.18.20-0.x86_64                                                                     5/6 
  Installing       : kubeadm-1.18.20-0.x86_64                                                                     6/6 
  Running scriptlet: kubeadm-1.18.20-0.x86_64                                                                     6/6 
  Verifying        : socat-1.7.4.1-1.el8.x86_64                                                                   1/6 
  Verifying        : cri-tools-1.19.0-0.x86_64                                                                    2/6 
  Verifying        : kubeadm-1.18.20-0.x86_64                                                                     3/6 
  Verifying        : kubectl-1.18.20-0.x86_64                                                                     4/6 
  Verifying        : kubelet-1.18.20-0.x86_64                                                                     5/6 
  Verifying        : kubernetes-cni-0.8.7-0.x86_64                                                                6/6 

Installed:
  cri-tools-1.19.0-0.x86_64       kubeadm-1.18.20-0.x86_64     kubectl-1.18.20-0.x86_64   kubelet-1.18.20-0.x86_64  
  kubernetes-cni-0.8.7-0.x86_64   socat-1.7.4.1-1.el8.x86_64  

Complete!
[root@k8s-master01 yum.repos.d]# 

4.4 配置 pause 镜像

    默认配置的 pause 镜像使用 gcr.io 仓库,国内可能无法访问,所以这里配置 kuberlet 使用阿里云的 pause 镜像,使用 kubeadm 初始化时会读取该文件的变量:

DOCKER_CGROUPS=$(docker info | grep 'Cgroup Driver' | awk -F ' ' '{print $3}')
cat >/etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=$DOCKER_CGROUPS --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2"
EOF

 五、部署 HAProxy+Keepalived

  本节进行 kubernetes 集群初始化,主要目的是生成集群中用到的证书和配置文件。相比于二进制安装kubernetes,二进制安装过程中,证书和配置文件需要自行生成。

  本例高可用采用的 HAProxy + Keepalived。HAProxy 和 Keepalived 以守护进程的方式在所有 Master 节点部署。通过 yum 安装 HAProxy 和 Keepalived。

yum install -y keepalived haproxy

  所有 Master 节点配置 HAProxy,所有 Master 节点的 HAProxy 配置相同:

cat >/etc/haproxy/haproxy.cfg<<EOF
global
  maxconn  2000
  ulimit-n  16384
  log  127.0.0.1 local0 err
  stats timeout 30s

defaults
  log global
  mode  http
  option  httplog
  timeout connect 5000
  timeout client  50000
  timeout server  50000
  timeout http-request 15s
  timeout http-keep-alive 15s

frontend monitor-in
  bind *:33305
  mode http
  option httplog
  monitor-uri /monitor

listen stats
  bind    *:8006
  mode    http
  stats   enable
  stats   hide-version
  stats   uri       /stats
  stats   refresh   30s
  stats   realm     Haproxy\ Statistics
  stats   auth      admin:admin

frontend k8s-master
  bind 0.0.0.0:16443
  bind 127.0.0.1:16443
  mode tcp
  option tcplog
  tcp-request inspect-delay 5s
  default_backend k8s-master

backend k8s-master
  mode tcp
  option tcplog
  option tcp-check
  balance roundrobin
  default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
  server k8s-master01    10.100.12.168:6443  check
  server k8s-master02    10.100.10.200:6443  check
EOF
[root@k8s-master01 config]# systemctl enable --now haproxy
Created symlink /etc/systemd/system/multi-user.target.wants/haproxy.service → /usr/lib/systemd/system/haproxy.service.
[root@k8s-master01 config]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
   Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2021-12-21 15:42:46 CST; 6s ago
  Process: 21373 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 21376 (haproxy)
    Tasks: 2 (limit: 24768)
   Memory: 2.1M
   CGroup: /system.slice/haproxy.service
           ├─21376 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
           └─21378 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

Dec 21 15:42:46 k8s-master01 systemd[1]: Starting HAProxy Load Balancer...
Dec 21 15:42:46 k8s-master01 haproxy[21376]: [WARNING] 354/154246 (21376) : parsing [/etc/haproxy/haproxy.cfg:43] : b>
Dec 21 15:42:46 k8s-master01 systemd[1]: Started HAProxy Load Balancer.
lines 1-14/14 (END)

  所有 Master 节点配置 Keepalived。注意修改 服务器网卡、优先级、本机IP。

  k8s-master01 节点的 keepalived.conf 配置:

cat >/etc/keepalived/keepalived.conf<<EOF
! Configuration File for keepalived
global_defs {
    router_id LVS_DEVEL
}
vrrp_script chk_apiserver {
    script "/etc/keepalived/check_apiserver.sh"
    interval 2
    weight -5
    fall 3  
    rise 2
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    mcast_src_ip 10.100.12.168
    virtual_router_id 51
    priority 100
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass FMVm6NFFccY8WjhK
    }
    virtual_ipaddress {
        10.100.10.103
    }
#    track_script {
#       chk_apiserver
#    }
}
EOF

  k8s-master02 节点的 keepalived.conf 配置:

cat >/etc/keepalived/keepalived.conf<<EOF
! Configuration File for keepalived
global_defs {
    router_id LVS_DEVEL
}
vrrp_script chk_apiserver {
    script "/etc/keepalived/check_apiserver.sh"
    interval 2
    weight -5
    fall 3  
    rise 2
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    mcast_src_ip 10.100.10.200
    virtual_router_id 51
    priority 101
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass FMVm6NFFccY8WjhK
    }
    virtual_ipaddress {
        10.100.10.103
    }
#    track_script {
#       chk_apiserver
#    }
}
EOF

  k8s-master01 和 k8s-master02 节点的 script "/etc/keepalived/check_apiserver.sh":

cat >/etc/keepalived/check_apiserver.sh <<EOF
#!/bin/bash

function check_apiserver() {
  for ((i=0;i<5;i++));do
    apiserver_job_id=$(pgrep kube-apiserver)
    if [[ ! -z $apiserver_job_id ]];then
       return
    else
       sleep 2
    fi
    apiserver_job_id=0
  done
}

# 1: running 0: stopped
check_apiserver
if [[ $apiserver_job_id -eq 0 ]]; then
    /usr/bin/systemctl stop keepalived
    exit 1
else
    exit 0
fi
EOF

chmod a+x /etc/keepalived/check_apiserver.sh

   注意:下述的健康检查是关闭的,集群建立完成后再开启。

#    track_script {
#       chk_apiserver
#    }

  启动 haproxy 和 keepalived:

systemctl enable --now haproxy
systemctl enable --now keepalived
systemctl status haproxy
systemctl status keepalived
高可用方式不一定非要采用 HAProxy 和 Keepalived,在阿里云上的话,可以使用阿里云SLB或者使用 Nginx 替换 HAProxy。

六、集群初始化

  kubeadm 的安装方式可以配合使用 kubeadm-config 文件来初始化集群,所以需要提前创建各 Master 节点的 kubeadm-config。

  k8s-master01 节点 kubeadm-config:

cat >/root/kubeadm-config.yaml<<EOF
[root@k8s-master01 ~]# cat /root/kubeadm-config.yaml 
apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration
kubernetesVersion: v1.18.20
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
api:
  advertiseAddress: 10.100.12.168
  controlPlaneEndpoint: k8s-master-lb:16443
controllerManagerExtraArgs:
  node-monitor-grace-period: 10s
  pod-eviction-timeout: 10s

apiServerCertSANs:
- 10.100.12.168
- 10.100.10.200
- 10.100.10.103
- 10.100.15.246
- 10.100.10.195
- k8s-master01
- k8s-master02
- k8s-master-lb
- k8s-node01
- k8s-node02
etcd:
  local:
    extraArgs:
      listen-client-urls: "https://127.0.0.1:2379,https://10.100.12.168:2379"
      advertise-client-urls: "https://10.100.12.168:2379"
      listen-peer-urls: "https://10.100.12.168:2380"
      initial-advertise-peer-urls: "https://10.100.12.168:2380"
      initial-cluster: "k8s-master01=https://10.100.12.168:2380"
    serverCertSANs:
      - k8s-master01
      - 10.100.12.168
    peerCertSANs:
      - k8s-master01
      - 10.100.12.168
networking:
  podSubnet: "172.168.0.0/16"
kubeProxy:
  config:
    featureGates:
      SupportIPVSProxyMode: true
    mode: ipvs
[root@k8s-master01 ~]# 
EOF

  也可以通过 kubeadm init 命令和参数来初始化,比如:

kubeadm init --kubernetes-version=1.18.20 \
--apiserver-advertise-address=10.100.12.168 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.0.0.0/24 \
--pod-network-cidr=10.244.0.0/16

  不管是哪种,所有 Master 节点提前下载镜像,可以节省集群初始化时间:

[root@k8s-master01 ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.20", GitCommit:"1f3e19b7beb1cc0110255668c4238ed63dadb7ad", GitTreeState:"clean", BuildDate:"2021-06-16T12:56:41Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
[root@k8s-master01 ~]# kubeadm config images list
I1221 16:19:40.240143   21776 version.go:255] remote version is much newer: v1.23.1; falling back to: stable-1.18
W1221 16:19:40.927615   21776 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
k8s.gcr.io/kube-apiserver:v1.18.20
k8s.gcr.io/kube-controller-manager:v1.18.20
k8s.gcr.io/kube-scheduler:v1.18.20
k8s.gcr.io/kube-proxy:v1.18.20
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
[root@k8s-master01 ~]# 

   我这里就不教怎么FQ获取 docker 镜像了。

[root@k8s-master01 ~]# docker images
REPOSITORY                           TAG        IMAGE ID       CREATED         SIZE
k8s.gcr.io/kube-proxy                v1.18.20   27f8b8d51985   6 months ago    117MB
k8s.gcr.io/kube-apiserver            v1.18.20   7d8d2960de69   6 months ago    173MB
k8s.gcr.io/kube-controller-manager   v1.18.20   e7c545a60706   6 months ago    162MB
k8s.gcr.io/kube-scheduler            v1.18.20   a05a1a79adaa   6 months ago    96.1MB
k8s.gcr.io/pause                     3.2        80d28bedfe5d   22 months ago   683kB
k8s.gcr.io/coredns                   1.6.7      67da37a9a360   23 months ago   43.8MB
k8s.gcr.io/etcd                      3.4.3-0    303ce5db0e90   2 years ago     288MB
[root@k8s-master01 ~]# 

  k8s-master01 节点初始化:

[root@k8s-master01 ~]# kubeadm init --kubernetes-version=1.18.20 \
> --apiserver-advertise-address=10.100.12.168 \
> --image-repository registry.aliyuncs.com/google_containers \
> --service-cidr=10.0.0.0/24 \
> --pod-network-cidr=10.244.0.0/16
W1221 17:45:58.099238   33676 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.18.20
[preflight] Running pre-flight checks
    [WARNING FileExisting-tc]: tc not found in system path
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [k8s-master01 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.0.0.1 10.100.12.168]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [k8s-master01 localhost] and IPs [10.100.12.168 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [k8s-master01 localhost] and IPs [10.100.12.168 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
W1221 17:46:03.156623   33676 manifests.go:225] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[control-plane] Creating static Pod manifest for "kube-scheduler"
W1221 17:46:03.158285   33676 manifests.go:225] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[apiclient] All control plane components are healthy after 21.502510 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config-1.18" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node k8s-master01 as control-plane by adding the label "node-role.kubernetes.io/master=''"
[mark-control-plane] Marking the node k8s-master01 as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token] Using token: j5mlxo.6mbyk52tmdb77j6r
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to get nodes
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[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 10.100.12.168:6443 --token j5mlxo.6mbyk52tmdb77j6r \
    --discovery-token-ca-cert-hash sha256:246287d3ea04d4b73f37f3694b432203ffbf3a00263858ee7181fcea4c905820 
[root@k8s-master01 ~]#  

 

posted @ 2022-05-11 14:12  左扬  阅读(543)  评论(0编辑  收藏  举报
levels of contents