
由于部分文件需要访问外网才能够下载,这里我将部分比较难下载的软件包都上传至百度云,各位可以按需下载。
链接: https://pan.baidu.com/s/1vc29TpB6XTEl4Tk6_G72Zg?pwd=w8rb
提取码: w8rb
一、Master节点安装Kubernetes
1. 节点设置
2. 安装容器运行时
[Step1] 执行命令,卸载可能会引起冲突的软件包。
[root@k8s-master-kylin ~]# dnf remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc
[Step2] 首次在新主机上安装Docker Engine之前,需要搭建Docker仓库。从阿里云的软件源中下载最新的包列表,为了方便后期维护,这里将默认名字修改为“docker-aliyun.repo”。更新本地缓存,验证仓库文件可用性。
[root@k8s-master-kylin ~]# dnf -y install dnf-plugins-core
[root@k8s-master-kylin ~]# dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/9/x86_64/stable/
[root@k8s-master-kylin ~]# mv /etc/yum.repos.d/mirrors.aliyun.com_docker-ce_linux_centos_9_x86_64_stable_.repo /etc/yum.repos.d/docker-aliyun.repo
[root@k8s-master-kylin ~]# dnf makecache
[Step3] 安装Docker及其组件包,这里通过“--nogpgcheck”强制跳过公钥校验。
[root@k8s-master-kylin ~]# dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin --nogpgcheck[Step4] 启动Docker引擎。
[root@k8s-master-kylin ~]# systemctl enable --now docker.service
[Step5] 因为特殊原因,我们可能无法拉取容器镜像,需要通过设置镜像加速器的方式去拉取镜像。编辑Docker守护进程配置文件,配置镜像加速器。首次安装Docker时该文件可能不存在,新建即可。
[root@k8s-master-kylin ~]# vim /etc/docker/daemon.json
# 写入下列内容
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://a0f4d5484dea442caf5d1193f09abdd4.mirror.swr.myhuaweicloud.com"
]
}[Step6] 添加镜像加速器后,需要重新加载systemd的配置,并重启Docker服务。
[root@k8s-master-kylin ~]# systemctl daemon-reload
[root@k8s-master-kylin ~]# systemctl restart docker.service[Step7] 验证:通过运行镜像来确认Docker安装成功。
[root@k8s-master-kylin ~]# docker run hello-world3. 安装CRI-Docker
[Step1] 部署完Docker-CE后还需要cri-docker shim才能够与Kubernetes通信。Kubernetes使用CRI(容器运行时接口)与容器运行时进行通信,但是Docker不支持CRI,需要借助cri-dockerd作为中间层协助。GitHub上目前只提供Fedora、Debian、Ubuntu、Windows、二进制压缩包以及源码包,这里我们下载二进制包。【如果无法正常下载,可以访问我提供的百度云链接下载cri-dockerd】
[root@k8s-master-kylin ~]# wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.21/cri-dockerd-0.3.21.amd64.tgz[Step2] 将cri-dockerd-0.3.21.amd64.tgz包解压缩,将解压缩后的可执行文件移动到bin目录并赋予执行权限。
[root@k8s-master-kylin ~]# tar -zxf cri-dockerd-0.3.21.amd64.tgz
[root@k8s-master-kylin ~]# mv cri-dockerd/cri-dockerd /usr/local/bin/
[root@k8s-master-kylin ~]# chmod +x /usr/local/bin/cri-dockerd[Step3] 验证:查看cri-dockerd的版本,能够成功输出则安装成功。
[root@k8s-master ~]# cri-dockerd --version
[Step4] 创建systemd服务文件,在启动参数中加速镜像访问速度。
[root@k8s-master-kylin ~]# vim /etc/systemd/system/cri-docker.service
# 在文件中写入下列内容
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=docker.service
[Service]
Type=exec
ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint unix:///run/cri-dockerd.sock --network-plugin=cni --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10.1
Restart=always
RestartSec=5
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target[Step5] 重新加载systemd,启动cri-docker服务并加入开机自启。
[root@k8s-master-kylin ~]# systemctl daemon-reload
[root@k8s-master-kylin ~]# systemctl enable --now cri-docker.service[Step6] 验证:查看cri-dockerd的服务状态。
[root@k8s-master-kylin ~]# systemctl status cri-docker.service
4. 禁用SWAP分区
[Step1] 在Kubernetes1.34版本以前要求禁用swap分区,否则kubelet会拒绝启动。虽然目前版本为1.34以上,但是仍然建议遵守。
[root@k8s-master-kylin ~]# swapoff -a // 临时卸载所有swap分区
// 编辑fstab文件,注释掉swap挂载配置
[root@k8s-master-kylin ~]# vim /etc/fstab
#/dev/mapper/klas-swap none swap defaults 0 0[Step2] 验证:使用free命令查看内存整体信息,如果Swap数值全为0则代表swap分区已禁用。
[root@k8s-master-kylin ~]# free -h
5. 允许IPtables桥接流量
[Step1] 编辑配置文件,确保“br_netfilter”内核模块开机自动加载。
[root@k8s-master-kylin ~]# vim /etc/modules-load.d/k8s.conf
# 写入下列内容
br_netfilter[Step2] 手动加载内核模块使其立即生效。
[root@k8s-master-kylin ~]# modprobe br_netfilter[Step3] 验证:查看模块是否加载,有回显结果表示已加载。
[root@k8s-master-kylin ~]# lsmod | grep br_netfilter
[Step4] 先临时开启ip_forward,然后再编辑sysctl内核参数文件。
[root@k8s-master-kylin ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@k8s-master-kylin ~]# vim /etc/sysctl.d/k8s.conf
# 写入下列内容
net.bridge.bridge-nf-call-ip6tables = 1 # 让iptables规则作用于IPv6的桥接流量
net.bridge.bridge-nf-call-iptables = 1 # 让iptables规则作用于IPv4的桥接流量
net.ipv4.ip_forward = 1 # 开启Linux内核的IPv4转发功能[Step5] 执行命令使得配置立即生效。
[root@k8s-master-kylin ~]# sysctl --system6. 安装kubeadm
[Step1] 添加阿里云的Kubernetes镜像仓库,也可以通过访问“https://mirrors.aliyun.com/kubernetes-new/core/stable”手动下载,截止目前最新的版本为1.35,这里我们指定安装1.32。
[root@k8s-master-kylin ~]# 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
[Step2] 安装kubelet、kubeadm和kubectl。
[root@k8s-master-kylin ~]# dnf install -y kubelet kubeadm kubectl[Step3] 启动kubelet并将其加入开机自启。
[root@k8s-master-kylin ~]# systemctl enable --now kubelet.service[Step4] 为了确保软件包的版本不会自动升级,在仓库文件中添加exclude参数,防止因为误升级导致的问题。
[root@k8s-master-kylin ~]# vim /etc/yum.repos.d/kubernetes.repo
# 在文件末尾添加下列内容
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
7. 添加命令补全
[Step1] 生成kubectl和kubeadm的bash补全脚本,保存到系统补全目录,临时加载补全脚本。
# 生成kubectl和kubeadm的bash补全脚本,保存到系统补全目录
[root@k8s-master-kylin ~]# kubectl completion bash > /etc/bash_completion.d/kubectl
[root@k8s-master-kylin ~]# kubeadm completion bash > /etc/bash_completion.d/kubeadm
# 立即加载kubectl和kubeadm脚本,仅在当前会话生效
[root@k8s-master-kylin ~]# source /etc/bash_completion.d/kubectl
[root@k8s-master-kylin ~]# source /etc/bash_completion.d/kubeadm8. 添加本地解析
[Step1] 在k8s-master-kylin修改hosts文件,添加自己和worker的解析。
[root@k8s-master-kylin ~]# vim /etc/hosts
# 在文件末尾添加下列内容
192.168.8.20 k8s-master-kylin
192.168.8.21 k8s-worker-kylin[Step2] 在k8s-worker-kylin修改hosts文件,添加自己和master的解析。
[root@k8s-worker-kylin ~]# vim /etc/hosts
# 在文件末尾添加下列内容
192.168.8.20 k8s-master-kylin
192.168.8.21 k8s-worker-kylin9. 集成CRI-Docker
[Step1] 配置crictl的默认运行时端点,指定连接的容器运行时套接字。此时会显示“Config "/etc/crictl.yaml" does not exist”,因为是首次配置,所以默认配置文件不存在,属于正常警告。
[root@k8s-master-kylin ~]# crictl config runtime-endpoint unix:///run/cri-dockerd.sock
10. 初始化k8s集群
[Step1] 导出kubeadm init的默认配置模版,方便后续自定义集群初始化参数。
[root@k8s-master-kylin ~]# kubeadm config print init-defaults > kubeadm.yaml[Step2]编辑默认配置模版,修改相关参数。
[root@k8s-master-kylin ~]# vim kubeadm.yaml
# 修改下列参数
advertiseAddress: 192.168.8.20 # k8s-master-kylin节点的IP地址
# 容器运行时的套接字路径
criSocket: unix:///var/run/cri-dockerd.sock
# Master节点的节点名
name: k8s-master-kylin
# 系统组件镜像的仓库地址
imageRepository: registry.aliyuncs.com/google_containers
# 在networking块中添加下列内容,指定pod的子网
podSubnet: 172.16.0.0/16[Step3] 验证:列出当前kubeadm版本所需要下载的所有核心组件镜像。一般情况下,能够正常列出镜像,也就能够正常下载。
[root@k8s-master-kylin ~]# kubeadm config images list
[Step4] 初始化集群,此时会自动下载系统组件的镜像。
[root@k8s-master-kylin ~]# kubeadm init --config kubeadm.yaml
[Step5] 复制初始化成功后的提示命令,授予执行命令的用户具备操作集群的权限。
[root@k8s-master-kylin ~]# mkdir -p $HOME/.kube
[root@k8s-master-kylin ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master-kylin ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config[Step6] 验证:查看集群中所有节点的状态、角色和版本信息,k8s-master-kylin节点的状态为“NotReady“是因为还没有部署网络插件。
[root@k8s-master-kylin ~]# kubectl get nodes
11. 部署Calico网络插件
主流的网络插件有Flannel和Calico,以下选用Calico。网络插件只需要在Master节点部署。
如果无法正常下载,可以访问我提供的百度云链接下载Calico镜像。
[Step1] 在部署Calico网络插件前,先查看当前本地的容器镜像,目的是为了与拉取Calico相关镜像后作对比。
[root@k8s-master ~]# docker images
[Step2] 当前Calico的最新稳定版本为v3.31.4,可以通过GitHub仓库的Releases板块查询版本信息。
https://github.com/projectcalico/calico
[Step3] 使用wget下载calico.yaml文件。
[root@k8s-master-kylin ~]# wget https://raw.githubusercontent.com/projectcalico/calico/v3.31.4/manifests/calico.yaml
[Step4] 下载完成后,编辑calico.yaml文件。因为我们在初始化k8s集群的时候,手动指定pod的子网,这里需要修改与其一致。
[root@k8s-master-kylin ~]# vim calico.yaml
# 修改下列参数
# 需要和集群部署中的[podSubnet: 172.16.0.0/16]一致
- name: CALICO_IPV4POOL_CIDR
value: "172.16.0.0/16"
[Step5] 安装Calico。
[root@k8s-master ~]# kubectl apply -f calico.yaml
[Step6] 如果网络没有问题,此时会自动下载所需镜像。因为Calico没有提供进度条,所以无法直观的查看是否正在下载。这里可以打开任务管理器,查看网卡是否有流量波动,以此判断是否正在下载。

[Step7] 等待一段时间后,查看所有命名空间下所有Pod的状态,全部状态为“Running”则安装成功。
[root@k8s-master-kylin ~]# kubectl get pods -A
[Step8] 验证:查看当前本地的容器镜像,与未安装Calico之前对比,多出了三个镜像。
[root@k8s-master-kylin ~]# docker images
二、worker节点加入master
worker节点加入master的先决条件
安装容器运行时,如果是Docker,则需要额外安装CRI-Docker
关闭并禁用SWAP分区
允许IPtables桥接流量
安装kubeadm
集成CRI-Docker
在节点添加master的解析,在master添加节点的解析
1. 安装容器运行时
[Step1] 执行命令,卸载可能会引起冲突的软件包。
[root@k8s-worker-kylin ~]# dnf remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc[Step2] 首次在新主机上安装Docker Engine之前,需要搭建Docker仓库。从阿里云的软件源中下载最新的包列表,为了方便后期维护,这里将默认名字修改为“docker-aliyun.repo”。更新本地缓存,验证仓库文件可用性。
[root@k8s-worker-kylin ~]# dnf -y install dnf-plugins-core
[root@k8s-worker-kylin ~]# dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/9/x86_64/stable/
[root@k8s-worker-kylin ~]# mv /etc/yum.repos.d/mirrors.aliyun.com_docker-ce_linux_centos_9_x86_64_stable_.repo /etc/yum.repos.d/docker-aliyun.repo
[root@k8s-worker-kylin ~]# dnf makecache
[Step3] 安装Docker及其组件包,这里通过“--nogpgcheck”强制跳过公钥校验。
[root@k8s-worker-kylin ~]# dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin --nogpgcheck[Step4] 启动Docker引擎。
[root@k8s-worker ~]# systemctl enable --now docker.service
[Step5] 因为特殊原因,我们可能无法拉取容器镜像,需要通过设置镜像加速器的方式去拉取镜像。编辑Docker守护进程配置文件,配置镜像加速器。首次安装Docker时该文件可能不存在,新建即可。
[root@k8s-worker-kylin ~]# vim /etc/docker/daemon.json
# 写入下列内容
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://a0f4d5484dea442caf5d1193f09abdd4.mirror.swr.myhuaweicloud.com"
]
}[Step6] 添加镜像加速器后,需要重新加载systemd的配置,并重启Docker服务。
[root@k8s-worker-kylin ~]# systemctl daemon-reload
[root@k8s-worker-kylin ~]# systemctl restart docker.service[Step7] 验证:通过运行镜像来确认Docker安装成功。
[root@k8s-worker-kylin ~]# docker run hello-world3. 安装CRI-Docker
[Step1] 部署完Docker-CE后还需要cri-docker shim才能够与Kubernetes通信。Kubernetes使用CRI(容器运行时接口)与容器运行时进行通信,但是Docker不支持CRI,需要借助cri-dockerd作为中间层协助。GitHub上目前只提供Fedora、Debian、Ubuntu、Windows、二进制压缩包以及源码包,这里我们下载二进制包。【如果无法正常下载,可以访问我提供的百度云链接下载cri-dockerd】
[root@k8s-worker-kylin ~]# wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.21/cri-dockerd-0.3.21.amd64.tgz[Step2] 将cri-dockerd-0.3.21.amd64.tgz包解压缩,将解压缩后的可执行文件移动到bin目录并赋予执行权限。
[root@k8s-worker-kylin ~]# tar -zxf cri-dockerd-0.3.21.amd64.tgz
[root@k8s-worker-kylin ~]# mv cri-dockerd/cri-dockerd /usr/local/bin/
[root@k8s-worker-kylin ~]# chmod +x /usr/local/bin/cri-dockerd[Step3] 验证:查看cri-dockerd的版本,能够成功输出则安装成功。
[root@k8s-worker-kylin ~]# cri-dockerd --version
[Step4] 创建systemd服务文件,在启动参数中加速镜像访问速度。
[root@k8s-worker-kylin ~]# vim /etc/systemd/system/cri-docker.service
# 在文件中写入下列内容
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=docker.service
[Service]
Type=exec
ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint unix:///run/cri-dockerd.sock --network-plugin=cni --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10.1
Restart=always
RestartSec=5
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target[Step5] 重新加载systemd,启动cri-docker服务并加入开机自启。
[root@k8s-worker-kylin ~]# systemctl daemon-reload
[root@k8s-worker-kylin ~]# systemctl enable --now cri-docker.service[Step6] 验证:查看cri-dockerd的服务状态。
[root@k8s-worker ~]# systemctl status cri-docker.service
4. 禁用SWAP分区
[Step1] 在Kubernetes1.34版本以前要求禁用swap分区,否则kubelet会拒绝启动。虽然目前版本为1.34以上,但是仍然建议遵守。
[root@k8s-worker-kylin ~]# swapoff -a // 临时卸载所有swap分区
// 编辑fstab文件,注释掉swap挂载配置
[root@k8s-worker-kylin ~]# vim /etc/fstab
#/dev/mapper/klas-swap none swap defaults 0 0[Step2] 验证:使用free命令查看内存整体信息,如果Swap数值全为0则代表swap分区已禁用。
[root@k8s-worker-kylin ~]# free -h
5. 允许IPtables桥接流量
[Step1] 编辑配置文件,确保“br_netfilter”内核模块开机自动加载。
[root@k8s-worker-kylin ~]# vim /etc/modules-load.d/k8s.conf
# 写入下列内容
br_netfilter[Step2] 手动加载内核模块使其立即生效。
[root@k8s-worker-kylin ~]# modprobe br_netfilter[Step3] 验证:查看模块是否加载,有回显结果表示已加载。
[root@k8s-worker-kylin ~]# lsmod | grep br_netfilter
[Step4] 先临时开启ip_forward,然后再编辑sysctl内核参数文件。
[root@k8s-worker-kylin ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@k8s-worker-kylin ~]# vim /etc/sysctl.d/k8s.conf
# 写入下列内容
net.bridge.bridge-nf-call-ip6tables = 1 # 让iptables规则作用于IPv6的桥接流量
net.bridge.bridge-nf-call-iptables = 1 # 让iptables规则作用于IPv4的桥接流量
net.ipv4.ip_forward = 1 # 开启Linux内核的IPv4转发功能[Step5] 执行命令使得配置立即生效。
[root@k8s-worker-kylin ~]# sysctl --system6. 安装kubeadm
[Step1] 添加阿里云的Kubernetes镜像仓库,也可以通过访问“https://mirrors.aliyun.com/kubernetes-new/core/stable”手动下载,截止目前最新的版本为1.35,这里我们指定安装1.32。
[root@k8s-worker-kylin ~]# 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
[Step2] 安装kubelet、kubeadm和kubectl。
[root@k8s-worker-kylin ~]# dnf install -y kubelet kubeadm kubectl[Step3] 启动kubelet并将其加入开机自启。
[root@k8s-worker-kylin ~]# systemctl enable --now kubelet.service[Step4] 为了确保软件包的版本不会自动升级,在仓库文件中添加exclude参数,防止因为误升级导致的问题。
[root@k8s-worker-kylin ~]# vim /etc/yum.repos.d/kubernetes.repo
# 在文件末尾添加下列内容
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
7. 添加命令补全
[Step1] 生成kubectl和kubeadm的bash补全脚本,保存到系统补全目录,临时加载补全脚本。
# 生成kubectl和kubeadm的bash补全脚本,保存到系统补全目录
[root@k8s-worker-kylin ~]# kubectl completion bash > /etc/bash_completion.d/kubectl
[root@k8s-worker-kylin ~]# kubeadm completion bash > /etc/bash_completion.d/kubeadm
# 立即加载kubectl和kubeadm脚本,仅在当前会话生效
[root@k8s-worker-kylin ~]# source /etc/bash_completion.d/kubectl
[root@k8s-worker-kylin ~]# source /etc/bash_completion.d/kubeadm8. worker节点加入master
[Step1] 在k8s-worker-kylin上验证k8s-master-kylin的解析。
[root@k8s-worker-kylin ~]# ping -c 3 k8s-master-kylin
[Step2] 如果长时间忘记了join命令,可以在k8s-master-kylin节点上重新生成。
[root@k8s-master-kylin ~]# kubeadm token create --print-join-command
[Step3] 在k8s-worker-kylin节点上执行join命令加入k8s-master-kylin节点。在Kubernetes 1.24+版本中,如果使用cri-dockerd则需要加上“--cri-socket”参数。核心原因是kubeadm的默认CRI套接字指向containerd,而非cri-dockerd,导致自动检测失败或错误。
[root@k8s-worker-kylin ~]# kubeadm join 192.168.8.20:6443 --token hr4v3c.mbl7ojcvhz7y3pct --discovery-token-ca-cert-hash sha256:da48927c07ec516a8840152107520e6e13ead5082fb603fa26bfb9bd68c70b21 --cri-socket=unix:///var/run/cri-dockerd.sock
[Step3] 验证:在k8s-master-kylin上查看已经加入节点的状态,能够看到k8s-worker-kylin的加入且状态为Ready。
[root@k8s-master-kylin ~]# kubectl get nodes
三、备注
1. Calico进行拉取失败
[Step1] 如果在能够连接外网的情况下,执行“kubectl apply”命令仍然失败,可以考虑先删除calico.yaml文件中定义的资源,然后在重新执行下载。
[root@k8s-master-kylin ~]# kubectl delete -f calico.yaml
[root@k8s-master-kylin ~]# kubectl apply -f calico.yaml
2. 手动导入镜像
[Step1] 在无法连接外网时,可以考虑使用我提供的Calico镜像。将所有镜像包上传到系统中,然后导入本地镜像仓库。
[root@k8s-master-kylin ~]# docker load -i calico_cni_v3.31.4.tar
[root@k8s-master-kylin ~]# docker load -i calico_kube-controllers_v3.31.4.tar
[root@k8s-master-kylin ~]# docker load -i calico_node_v3.31.4.tar[Step2] 检查calico.yaml文件中的镜像拉取策略,确保“imagePullPolicy”值为“IfNotPresent”。
[root@k8s-master-kylin ~]# vim calico.yaml
# 确保文件中所有imagePullPolicy的值均为IfNotPresent
imagePullPolicy: IfNotPresentimagePullPolicy: Always:强制联网下载镜像
imagePullPolicy: IfNotPresent:先查询本地是否存在镜像,没有再联网下载
[Step3] 删除calico.yaml文件中定义的资源,然后在重新执行下载。
[root@k8s-master-kylin ~]# kubectl delete -f calico.yaml
[root@k8s-master-kylin ~]# kubectl apply -f calico.yaml