Docker 20.10.7 与 Kubernetes 1.20.9 版本锁定:CentOS 7 环境 5 步避坑指南
Docker 20.10.7 与 Kubernetes 1.20.9 版本锁定:CentOS 7 环境 5 步避坑指南
在CentOS 7上部署特定版本的Kubernetes集群(Docker 20.10.7 + K8s 1.20.9)时,版本锁定和环境配置往往是导致部署失败的关键因素。本文将聚焦五个核心避坑点,通过原理剖析和实战解决方案,帮助开发者快速搭建稳定可用的生产级集群。
1. 环境预检与系统配置
在开始安装前,必须确保CentOS 7系统满足以下基础要求:
内核参数调整:
# 禁用SELinux(必须步骤) sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # 关闭Swap分区(Kubernetes强制要求) swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab # 启用内核模块 cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF # 网络桥接流量处理 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system关键检查点:
- 内核版本需≥3.10(
uname -r验证) - 确保各节点主机名不重复且符合DNS命名规范
- 节点间时间同步(NTP服务必须启用)
注意:在公有云环境部署时,部分云厂商会修改默认内核参数,需特别检查
net.ipv4.ip_forward是否已设为1。
2. Docker版本精准安装与配置
版本锁定场景下,必须严格匹配Docker 20.10.7的安装:
# 移除旧版本(如有) sudo yum remove docker* containerd.io # 添加阿里云镜像源 sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 精确安装指定版本 sudo yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6 # 关键配置(cgroup驱动必须与kubelet一致) sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF # 启动服务 sudo systemctl enable --now docker常见故障排查:
- 问题现象:
kubelet报错"failed to get docker version"- 解决方案:确认
/var/run/docker.sock权限为666
- 解决方案:确认
- 问题现象:容器日志报"failed to create shim task"
- 解决方案:升级
containerd到1.4.6以上版本
- 解决方案:升级
3. Kubernetes组件版本锁定技巧
使用yum的--disableexcludes参数避免版本冲突:
# 配置Kubernetes阿里云源 cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF # 精确安装三件套 sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes # 防止kubelet自重启干扰 sudo systemctl enable --now kubelet版本依赖矩阵:
| 组件 | 必须版本 | 兼容范围 |
|---|---|---|
| Docker | 20.10.7 | 19.03.x~20.10.x |
| containerd | 1.4.6 | ≥1.4.4 |
| kubeadm | 1.20.9 | 必须精确匹配 |
| CNI插件 | Calico 3.18 | Flannel 0.14+ |
4. 集群初始化关键参数解析
主节点初始化时必须明确的五个核心参数:
kubeadm init \ --apiserver-advertise-address=192.168.10.100 \ --control-plane-endpoint=cluster-endpoint \ --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \ --kubernetes-version v1.20.9 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=192.168.0.0/16参数深度解读:
--apiserver-advertise-address:必须指定master节点可路由IP--control-plane-endpoint:高可用集群的负载均衡端点--image-repository:国内访问需替换为阿里云镜像源--pod-network-cidr:必须与后续安装的CNI插件网段一致
典型错误处理:
报错:"kubelet isn't running or healthy"
- 检查:
journalctl -xeu kubelet查看日志 - 解决:通常因cgroup驱动不匹配导致,检查
/var/lib/kubelet/config.yaml
- 检查:
报错:"coredns pending"
- 解决:必须安装网络插件后才可解决
5. 节点加入与网络插件实战
Worker节点加入:
# 在主节点生成加入命令 kubeadm token create --print-join-command # 在Worker节点执行(示例) kubeadm join cluster-endpoint:6443 \ --token 9vr73a.8txwy5uk1d3g4gt7 \ --discovery-token-ca-cert-hash sha256:7c2e69131a9ae5f6d98e5d7a239f1a7c1e8c1e5d5d5d5d5d5d5d5d5d5d5d5dCalico网络插件安装:
# 下载定制化部署文件 curl https://docs.projectcalico.org/manifests/calico.yaml -O # 修改CIDR配置(必须与init时--pod-network-cidr一致) sed -i 's|192.168.0.0/16|10.244.0.0/16|' calico.yaml # 部署Calico kubectl apply -f calico.yaml网络诊断工具:
# 检查节点就绪状态 kubectl get nodes -o wide # 查看Pod网络连通性 kubectl run -it --rm --image=alpine network-test -- sh ping 10.96.0.10 # 测试CoreDNS访问通过以上五个关键步骤的系统性实施,配合版本锁定的精确控制,可在CentOS 7上构建出稳定运行的Kubernetes 1.20.9生产环境。实际部署中若遇到kubelet持续崩溃等问题,建议优先检查/etc/docker/daemon.json与/var/lib/kubelet/config.yaml中的cgroup驱动一致性。
