配置清单

真正生产集群是需要高可用的,所以以下就来演示一个生产高可用集群当前最新版本Kubernetes v1.32.2,为了后续部分演示所以这里启用了3个Node节点,如果只验证高可用实际上不用Node也可以。

kubernetes集群部署组建清单

Kubernetes集群角色

IP

OS

主机名

安装的组建

控制节点Master

192.168.31.100

Rocky 9.5

k8smaster01

控制节点Master

192.168.31.101

Rocky 9.5

k8smaster02

控制节点Master

192.168.31.102

Rocky 9.5

k8smaster03

工作节点node

192.168.31.111

Rocky 9.5

k8snode01

工作节点node

192.168.31.112

Rocky 9.5

k8snode02

工作节点node

192.168.31.113

Rocky 9.5

k8snode03

VIP

192.168.31.105

/

k8svip-105

这里我们使用了一个VIP来作为统一入口,避免单点风险,这个VIP实现功能要求的所有IP二层互通。

由于CentOS系列已经停止维护了所以这里使用Rocky Linux系统安装Kubernetes,

下载并安装Rocky 9.5操作系统

Rocky 9.5下载地址

具体配置如下:

  • 操作系统:Rocky Linux9.5。

  • 配置:6GB内存/6vCPU/80G硬盘

  • 网络:桥接或者NAT模式均可。

  • 开启虚拟机的虚拟化

1.进入内核选择界面时,按上下方向键,取消自动选择
2.输入tab键,复制粘贴进去如下代码
#centos7默认是 ens33
#按照如下操作,修改为eth0
net.ifnames=0 biosdevname=0
​
3.输入回车,启动
​
4.请注意,必须是英文,以后再也别用中文了,因为你要看日志
​
5.只需要修改亚洲上海时区,其他全部默认
​
6.网络设置、修改静态ip地址、设置主机名
​
模板机,主机名 template-10
ip,192.168.31.100
网关,192.168.31.254

环境初始化

配置静态IP地址

服务器或者虚拟机的IP地址默认是DHCP动态分配的,这样重启机器IP地址就会发生变化,为了让IP地址固定不变,需要变成静态IP地址,这样机器重启IP地址也不会变化。

Rocky9以前版本配置

我们可以使用vim编辑器打开网络设置文件/etc/sysconfig/network-scripts/ifcfg-ens33,对该文件进行编辑:

  • /etc/sysconfig/network-scripts是网络设置文件所在的目录。

  • ifcfg-eth0是一个网络接口文件,它指定了网络参数,例如IP地址、子网掩码、网关等。

配置文件如下

TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.31.100
PREFIX=24
GATEWAY=192.168.31.254
DNS1=223.5.5.5

重启网络服务让配置生效

service network restart

Rocky9以后版本配置

Rocky9以后的版本更改了网络配置文件地址

我们可以使用vim编辑器打开网络设置文件/etc/NetworkManager/system-connections/ens160.nmconnection,对该文件进行编辑:

  • /etc/NetworkManager/system-connections是网络设置文件所在的目录。

  • ens160.nmconnection是一个网络接口文件,它指定了网络参数,例如IP地址、子网掩码、网关等。

配置文件如下

[connection]
id=ens160
uuid=5f163b9e-b3fb-3e43-80d6-5cd5e80537e5
type=ethernet
autoconnect-priority=-999
interface-name=ens160
timestamp=1747583486
​
[ethernet]
​
[ipv4]
address1=192.168.31.100/24,192.168.31.254
dns=192.168.31.254;
method=manual
​
[ipv6]
addr-gen-mode=eui64
method=auto
​
[proxy]

重启网络服务让配置生效

nmcli connection reload
nmcli connection up ens160

注意:DNS1需要与网关一致

image-20250518160604766

修改主机名

把192.168.31.100~2主机名设置成k8smaster1~3:

hostnamectl set-hostname k8smaster01 && bash 
hostnamectl set-hostname k8smaster02 && bash 
hostnamectl set-hostname k8smaster03 && bash 

把192.168.31.111~3主机名设置成 k8snode1~3:

hostnamectl set-hostname k8snode01 && bash
hostnamectl set-hostname k8snode02 && bash
hostnamectl set-hostname k8snode03 && bash

把192.168.31.105主机名设置成 k8svip-105:

hostnamectl set-hostname k8svip-105 && bash

配置hosts解析,通过主机名访问不同的机器

cat > /etc/hosts <<EOF
# 外网地址           主机名
192.168.31.100     k8smaster01
192.168.31.101     k8smaster02
192.168.31.102     k8smaster03
192.168.31.111     k8snode01
192.168.31.112     k8snode02
192.168.31.113     k8snode03
192.168.31.105     k8svip-105
EOF

关闭网络配置图形化界面、防火墙、selinux

关闭网络配置图形化界面

systemctl stop firewalld NetworkManager
systemctl disable firewalld NetworkManager
#Rocky9以后版本不用关闭

关闭防火墙、selinux

临时关闭内置防火墙
setenforce 0
​
[root@k8smaster01 ~]# getenforce
Permissive
​
1.永久关闭内置防火墙selinux
sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
​
[root@k8smaster01 ~]# grep -i 'selinux=' /etc/selinux/config
# SELINUX= can take one of these three values:
SELINUX=disabled
#需要reboot重启服务器,可以先把外置防火墙关闭后重启。
​
2.清空防火墙规则
iptables -F
​
关闭firewalld防火墙服务
[root@k8smaster01 ~]# systemctl stop firewalld
[root@k8smaster01 ~]# systemctl disable firewalld
​
iptables -X
iptables -Z
​
3.最后检查
[root@k8smaster01 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
​
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
​
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
​
[root@k8smaster01 ~]# systemctl is-enabled firewalld NetworkManager
disabled
disabled
#Rocky9以后版本不用关闭firewalld NetworkManager

关闭交换分区

#临时关闭交换分区
swapoff -a
#永久关闭swap,并取消开启启动(如果没有可忽略)
vim /etc/fstab
#/dev/mapper/rl-swap     none                    swap    defaults        0 0

安装tab补齐工具(安装基础软件部分里有)

因为最小化安装没有tab补齐工具

1.检查是否安装tab补齐软件包(如果是最小化安装,默认没有)
rpm -q bash-completion
​
2.yum安装bash-completion
yum -y install bash-completion
​
3.立即生效配置
source /etc/profile.d/bash_completion.sh

配置yum源

备份原有源配置

mkdir /etc/yum.repos.d/backup   #创建备份文件夹
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup  #移动所以得repo后缀的文件到bak目录下

替换为国内镜像源

1. 阿里云镜像源(推荐)

Rocky Linux 8.x/9.x

# 替换所有 .repo 文件的镜像地址
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
         -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
         -i.bak \
         /etc/yum.repos.d/rocky-*.repo

2.清华大学镜像源

Rocky Linux 8.x/9.x

sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
         -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.tuna.tsinghua.edu.cn/rockylinux|g' \
         -i.bak \
         /etc/yum.repos.d/rocky-*.repo

更新缓存并验证

# 清理旧缓存
sudo dnf clean all
 
# 生成新缓存
sudo dnf makecache
 
# 验证配置是否生效(检查仓库地址)
sudo dnf repolist

配置 EPEL 扩展源

# 安装 EPEL 仓库
sudo dnf install -y epel-release
 
# 替换 EPEL 镜像源(阿里云)
sudo sed -e 's|^metalink|#metalink|g' \
         -e 's|^#baseurl=https://download.example/pub/epel|baseurl=https://mirrors.aliyun.com/epel|g' \
         -i.bak \
         /etc/yum.repos.d/epel*.repo
 
# 更新缓存
sudo dnf clean all && sudo dnf makecache
sudo vim /etc/yum.repos.d/cisco-openh264.repo
[cisco-openh264]
name=Cisco OpenH264 Repository
baseurl=http://example.com/repo/path/
enabled=1
gpgcheck=0

补充:epel-cisco-openh264.repo 即 Cisco OpenH264 仓库似乎暂无国内镜像,速度慢禁用即可。

# 或者编辑 /etc/yum.repos.d/epel-cisco-openh264.repo 修改 enabled=0
yum -y install yum-utils
yum-config-manager --enable epel-cisco-openh264

清理并重新生成软件包信息缓存

# 备注:yum=dnf
yum clean all
rm -rf /var/cache/yum
yum makecache
#此命令需要已经 makecache, 删除软件包的同时将系统中该软件包不需要的依赖项全部移除
#yum autoremove

安装常用软件包

# 启用名为 "crb" 的配置管理器, 安装一些官方源不提供的软件包
sudo dnf config-manager --set-enabled crb
# 安装 EPEL 存储库
sudo yum -y install epel-release
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo yum install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm
​
# dnf group list
# “Development Tools”软件包组,包含了大部分基础开发所需要的软件包
sudo yum -y group install "Development Tools"

安装基础软件

yum install -y tree wget bash-completion bash-completion-extras lrzsz net-tools sysstat iotop iftop htop unzip telnet ntpdate lsof vim

关闭邮件告警

echo 'unset mailcheck' >> /etc/profile
​
source /etc/profile

配置安装Docker和Containerd需要的阿里云的在线yum源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

配置安装Kubernetes组件需要的阿里云的在线yum源

Kubernetes命令包在本地源是不存在的,需要配置阿里云在线源用于安装Kubernetes命令行工具。配置步骤如下:

[root@k8smaster01 ~]#vim  /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/repodata/repomd.xml.key

如用需要可以将k8smaster01上的kubernetes.repo源通过scp远程复制工具复制到k8snode01服务器的/etc/yum.repos.d/目录下:

scp /etc/yum.repos.d/kubernetes.repo k8snode01:/etc/yum.repos.d/

配置时间同步

安装ntpdate命令

yum install ntpdate -y

与网络时间同步

ntpdate time1.aliyun.com

把时间同步做成计划任务

检查时间同步服务是否运行
[root@k8smaster01 ~]#systemctl status crond
​
写入时间同步信息
[root@k8smaster01 ~]#crontab -e
* * * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1
​
检查定时任务、
[rootk8smaster01 ~]#crontab -l
* * * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1
#或者
[root@k8smaster01 ~]#cat /var/spool/cron/root

重启crond服务

service crond restart

linux(rocky)设置更新服务器时间

CentOS8(或rocky8)系统中,原有的时间同步服务 ntp/ntpdate服务已经无法使用,使用yum安装,提示已不存在。如下:

root@k8smaster01 ~]# sudo dnf install ntpdate
正在忽略仓库:epel-cisco-openh264
上次元数据过期检查:0:00:15 前,执行于 2025年05月18日 星期日 20时51分55秒。
未找到匹配的参数: ntpdate
错误:没有任何匹配: ntpdate

要解决更新服务器时间问题,按下列步骤进行:

首先安装chrony

#使用dnf安装
dnf install -y chrony
# 也可以用yum安装
yum install -y chrony

下列是一些chrony相关的命令:

1.1 开启chronyd服务 systemctl start chronyd

1.2 设置开机自启动 systemctl enable chronyd

1.3 设置开机自启动从配置文件中保存退出后,重启chronyd服务 systemctl restart chronyd

编辑配置文件

[root@localhost ~]# vim /etc/chrony.conf
pool ntp1.aliyun.com iburst
pool ntp.tencent.com iburst
pool ntp1.bce.baidu.com iburst

重启网络时间服务chrony,并设置服务后台运行

systemctl restart chronyd
systemctl enable chronyd

克隆部署其他几台虚拟机

修改机器内核参数

加载br_netfilter模块

br_netfilter叫作透明防火墙(Transparent Firewall),又称桥接模式防火墙(Bridge Firewall)。简单来说,就是在网桥设备上加入防火墙功能。透明防火墙具有部署能力强、隐蔽性好、安全性高的优点。开启ip6tables和iptables需要加载透明防火墙。可以使用modprobe命令加载Linux机器的内核模块:

#添加内核模块自启动,Dcoekr版本不需要,但是Containerd需要
[root@k8smaster01 ~]# modprobe br_netfilter
#以上操作7台虚拟机均需要

以上配置完成以后,所有机器都重启一次,然后检查内核模块是否正常加载,确保所有准备工作都是符合预期的。

启用相关内核参数

开启内核参数的代码清单:

[root@k8smaster01 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward = 1
EOF
[root@k8smaster01 ~]# sysctl -p /etc/sysctl.d/k8s.conf
[root@k8smaster01 ~]# sysctl --system
#以上操作7台虚拟机均需要,
#重启,重启是为了让哪些参数能够自动生效。
reboot

部署

安装Containerd

从Kubernetes 1.20版本开始,Kubernetes官方已经将默认的容器运行时从Docker改为Containerd。因此,从Kubernetes 1.20开始,Kubernetes官方将支持使用Docker和Containerd作为容器运行时,同时也意味着Kubernetes从Docker的依赖中解耦了出来。在Kubernetes 1.24及之后的版本中,Docker作为容器运行时已经被官方弃用,Containerd成为唯一推荐的容器运行时。具体安装步骤如下:

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
​
yum install -y containerd.io
#以上操作7台虚拟机均需要

接下来生成Containerd的配置文件:

[root@k8smaster01 ~]#mkdir -p /etc/containerd
[root@k8smaster01 ~]#containerd config default > /etc/containerd/config.toml
​
#修改配置文件:
vi /etc/containerd/config.toml
把SystemdCgroup = false修改成SystemdCgroup = true
把sandbox_image = "k8s.gcr.io/pause:3.6"修改成sandbox_image="registry.aliyuncs.com/google_containers/pause:3.10"
​
#创建/etc/crictl.yaml文件:
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
​
#启动containerd
systemctl start containerd
systemctl enable containerd
​
#以上操作7台虚拟机均需要

配置镜像加速器

注:Kubernetes所有节点均按照以下步骤配置镜像加速器:

  1. 编辑vim /etc/containerd/config.toml文件。

  2. 找到config_path = "",指定证书存放目录:config_path = "/etc/containerd/certs.d"。config_path = "/etc/containerd/certs.d"用于指定Containerd的证书目录路径。该目录用于存储容器镜像仓库的证书和密钥,以便Containerd可以在与远程仓库通信时进行身份验证和加密通信。

  3. 默认情况下,Containerd使用/etc/containerd目录来存储其所有的配置和数据文件,其中包括镜像、容器、事件、日志等。/etc/containerd/certs.d则是该目录下的一个子目录,用于存储容器镜像仓库的证书和密钥。如果需要与受信任的私有镜像仓库通信,就需要将其证书和密钥复制到这个目录中。

  4. mkdir /etc/containerd/certs.d/docker.io/ -p

编辑hosts.toml文件:

vim /etc/containerd/certs.d/docker.io/hosts.toml
#Hosts.toml写入如下内容:
[host."https://uzjaa0ie.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]
capabilities = ["pull","push"]
#重启Containerd使配置生效:
systemctl restart containerd

Docker也要安装,Docker跟Containerd不冲突,安装Docker是为了能基于Dockerfile构建镜像:

yum install docker-ce  -y
systemctl enable docker

配置Docker镜像加速器,Kubernetes所有节点均按照以下配置进行:

vim /etc/docker/daemon.json
#写入如下内容:
{
"registry-mirrors":["https://uzjaa0ie.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
}
#执行以下命令,重启Docker使配置生效:
systemctl restart docker

安装kubernetes基础软件

#安装必要的软件
yum -y install kubelet kubeadm kubectl
systemctl start kubelet && systemctl enable kubelet
​
#Kubernetes所有节点均按照以下步骤配置

Kubelet、Kubeadm和Kubectl都是Kubernetes的组件,其具体解释如下。

  1. Kubelet:Kubernetes的一个核心组件,负责在每个节点上运行Pod并管理其生命周期,它通过容器运行时(如Docker或Containerd)来运行容器。Kubelet负责监控容器的状态、资源使用情况和网络连接情况,并将这些信息报告给Kubernetes的其他组件,以便它们可以协调容器在整个集群中的运行。

  2. Kubeadm:用于启动Kubernetes集群的命令行工具。它负责在集群中的每个节点上初始化Kubernetes控制面和工作负载节点的各种资源。Kubeadm还可以协调集群组件之间的相互依赖关系,并配置默认的网络插件和其他功能。

  3. Kubectl:Kubernetes的命令行工具,可用于管理Kubernetes集群的各个方面,包括创建、部署、管理和监控应用程序、服务和资源。Kubectl可以与Kubernetes API服务器交互,以管理集群的各个方面。

配置VIP

这里我们选择100和101这2台服务器来承担vip的责任,因为3节点的集群只允许挂1台,挂2台集群是不可用的。本小节操作只在100和101服务器执行。

yum -y install keepalived
#100服务配置vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
    router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER                    # 设置为主节点
    interface ens3                  # 网络接口,根据实际情况修改
    virtual_router_id 51            # VRRP 路由ID,主备节点必须相同
    priority 100                    # 优先级,主节点必须高于备份节点
    advert_int 1                    # VRRP通告间隔,单位秒
    authentication {
        auth_type PASS              # 认证类型
        auth_pass 123123            # 认证密码,主备节点必须相同
    }
    virtual_ipaddress {
        192.168.31.105              # 虚拟IP地址,可以根据实际情况修改
    }
}
#101服务配置vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
​
global_defs {
    router_id LVS_DEVEL
}
​
vrrp_instance VI_1 {
    state BACKUP                    # 设置为备份节点
    interface ens3                  # 确保使用正确的网络接口名称
    virtual_router_id 51            # VRRP 路由ID,主备节点必须相同
    priority 50                     # 优先级,备份节点必须低于主节点
    advert_int 1                    # VRRP通告间隔,单位秒
​
    authentication {
        auth_type PASS              # 认证类型
        auth_pass 123123            # 认证密码,主备节点必须相同
    }
​
    virtual_ipaddress {
        192.168.31.105              # 虚拟IP地址,与主节点相同
    }
}
#启动服务
systemctl start keepalived
systemctl enable keepalived

Kubeadm初始化Kubernetes集群

因为这里需要把证书加到100年,所以只能通过配置文件形式,命令行方式不能直接实现,根据资料这个支持是从v1.31开始支持。

这里主要指定了一些临时token,并指定了容器运行时,和证书路径及VIP信息,etcd路径,和镜像下载地址,版本,默认域名,Pod和Service的IP地址段,证书包含的IP地址(也可以用域名替代,避免后面出现IP更换的问题)CA和签发证书的时间。

kubeadm config print init-defaults > kubeadm.yaml

kubeadm.yaml配置文件如下:

apiVersion: kubeadm.k8s.io/v1beta4
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: ufw2x5.c255p8a0437pxp0x
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  imagePullSerial: true
---
apiVersion: kubeadm.k8s.io/v1beta4
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: 192.168.31.105:6443
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.32.2
networking:
  dnsDomain: cluster.local
  podSubnet: 10.20.0.0/16
  serviceSubnet: 10.10.0.0/16
proxy: {}
scheduler: {}
apiServer:
  certSANs:
  - 192.168.31.105
  - 192.168.31.100
  - 192.168.31.101
  - 192.168.31.102
  - 127.0.0.1
caCertificateValidityPeriod: 876000h0m0s
certificateValidityPeriod: 876000h0m0s

基于kubeadm.yaml初始化Kubernetes集群

kubeadm init --config=kubeadm.yaml --upload-certs

如图所示说明安装完成

image-20250518190925407

配置Kubectl的配置文件config

默认安装Kubernetes之后,Kubectl是没有权限访问Kubernetes API的,所以需要有一个config文件,相当于对Kubectl进行授权,这样kubectl命令可以使用config文件中的用户和证书对Kubernetes集群进行管理。

具体操作步骤如下:

(1)在当前家(HOME)目录下创建一个目录.kube,用来存放安全上下文config文件。

mkdir -p $HOME/.kube

.kube目录是Kubernetes中非常重要的目录,它存储了集群的配置信息和其他资源,例如,kubectl命令使用kubeconfig配置文件访问Kubernetes API Server。

(2)把/etc/kubernetes/admin.conf复制到.kube下并重命名成config。

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

(3)修改属主和属组。

sudo chown $(id -u):$(id -g) $HOME/.kube/config

该命令将当前用户的家目录下的.kube目录中的config文件所有者更改为当前用户。

  • chown命令表示更改文件或目录的所有者和所属组。

  • $(id -u)和$(id -g)表示从id命令中获取当前登录用户的用户ID(UserID,UID)和所属组ID(GroupID,GID)。

config文件必须由当前用户或由具有该文件的所有权的用户修改。上述命令可以确保该配置文件始终由当前用户所有,以确保当前用户拥有对此文件的完全访问权限,以便在必要时进行更改、编辑或更新。

(4)查看Kubernetes集群。

kubectl get nodes

该命令用来查看Kubernetes集群状态。

显示结果如下:

NAME          STATUS          ROLES                  AGE   VERSION
k8smaster01   NotReady   control-plane,master    60s   v1.32.2

添加网络插件

#由于我配置修改了Pod的ip地址,所以需要下下载,然后修改
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
sed -i 's/10.244/10.20/g' kube-flannel.yml
kubectl apply -f kube-flannel.yml

检查集群状态

kubectl get node
#node节点链接使用vip
cat /etc/kubernetes/kubelet.conf  |grep server
server: https://192.168.31.105:6443

检查高可用&证书

这里我们关闭了k8smaster01节点,这个时候显示k8smaster01已经是NotReady,VIP也飘逸到了k8smaster02节点。并且集群也可以正常使用。

#无论是CA证书,还是CA签发的证书都是100年 
kubeadm certs check-expiration

#kubelet的证书也是100年
[root@master01 ~]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate
notAfter=Feb 16 15:47:21 2125 GMT