CentOS7.9 + Kubernetes 1.18.20 -清理所有 docker / containerd 残留

环境说明:CentOS 7.9,K8s‑1.18.20;规避 Docker24 + 移除 dockershim 的 CRI 报错问题;使用稳定版本 docker‑20.10.24(自带 dockershim,原生兼容 k8s1.18)。 故障背景:Docker26 版本过高,dockershim 被移除,kubeadm 报connection closed before server preface received;包冲突、残留导致安装失败。

前置:彻底清理所有 docker /containerd 残留

bash

复制代码
systemctl stop docker 2>/dev/null
systemctl disable docker 2>/dev/null

#强制卸载,跳过预卸载脚本
rpm -e --nodeps --noscripts docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 2>/dev/null

#删除旧版冲突插件包
rpm -e --nodeps docker-buildx-plugin
rpm -e --nodeps docker-ce-rootless-extras-26.1.4-1.el7.x86_64
rpm -e --nodeps docker-compose-plugin-2.27.1-1.el7.x86_64

#清理目录残留
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
rm -rf /etc/docker
rm -rf /etc/containerd
rm -rf /usr/lib/systemd/system/containerd.service
rm -f /var/run/docker.sock

systemctl daemon-reload

校验包是否清理干净,输出为空才算成功

bash

复制代码
rpm -qa | grep -E "docker|containerd"

步骤 1:安装稳定版本 docker‑20.10.24 + containerd.io‑1.4.13

不要安装最新 docker 版本,高版本移除 dockershim,K8s1.18 无法对接 CRI 接口。

bash

复制代码
yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#指定版本安装
yum install -y docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io-1.4.13-3.1.el7

安装后验证:

bash

复制代码
docker --version
#预期输出:Docker version 20.10.24
which containerd
#预期输出:/usr/bin/containerd
ls -l /usr/lib/systemd/system/containerd.service

步骤 2:配置 Docker 镜像加速器并启动服务

bash

复制代码
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF

systemctl enable --now docker
systemctl status docker

校验 docker socket:

bash

复制代码
ls -l /var/run/docker.sock

✅ docker‑20.10.24 内置 dockershim,原生 CRI 接口,k8s1.18 直接对接/var/run/docker.sock,无需独立部署 containerd。

步骤 3:kubeadm‑config.yaml 配置文件(k8s1.18 专用 v1beta2)

⚠️注意:k8s1.18 仅支持 apiVersion:kubeadm.k8s.io/v1beta2,禁止使用 v1beta3;不要写kubeadmVersion字段。

yaml

复制代码
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.1.10  # 修改为你的master静态IP
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/docker.sock
  name: k8s-master01
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.18.20
imageRepository: registry.aliyuncs.com/google_containers
controlPlaneEndpoint: ""
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16

步骤 4:配置 /etc/hosts,修复主机名解析警告

bash

复制代码
vi /etc/hosts

写入(IP 替换为你本机真实静态 IP):

plaintext

复制代码
192.168.1.10   k8s-master01

测试解析是否正常:

bash

复制代码
ping k8s-master01

步骤 5:清理 kubeadm 旧环境残留(初始化前必做)

bash

复制代码
kubeadm reset -f
rm -rf $HOME/.kube
rm -rf /etc/cni/net.d/*
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
ipvsadm --clear

步骤 6:执行 kubeadm 初始化

bash

复制代码
kubeadm init --config=kubeadm-config.yaml

docker‑20.10.24 属于 k8s1.18 官方校验版本,不再报 SystemVerification 警告,无需加忽略参数。

步骤 7:初始化成功后执行后续操作

bash

复制代码
#配置管理员kubeconfig
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

#部署适配k8s1.18的calico v3.21,高版本calico不兼容1.18
kubectl apply -f https://docs.projectcalico.org/v3.21/manifests/calico.yaml

#查看节点状态
kubectl get nodes

验证检查命令(安装完成后执行)

bash

复制代码
rpm -qa | grep -E "docker-ce|containerd.io"
docker --version
ls -l /var/run/docker.sock
相关推荐
AAA@峥2 小时前
K8s 配置管理实战:ConfigMap 与 Secret 完整使用指南
kubernetes·云计算
showyoui2 小时前
K8s 集群迁移踩坑:Istio 升级后 nginx 403
网络·docker·kubernetes·istio·service_mesh
云川之下4 小时前
【k8s】sriov‑device‑plugin、sriov‑network‑config‑daemon详解
云原生·容器·kubernetes
golang学习记17 小时前
Go 项目使用docker compose的正确方式
开发语言·docker·golang
张忠琳1 天前
【NPU】Ascend Device Plugin —Part 6 K8s客户端 + 重复检测模块 超深度源码分析之二
云原生·容器·kubernetes·npu·docker device
雨声不在1 天前
私有 Docker Registry 排障实录:两个隐蔽的坑
docker·容器
云川之下1 天前
【k8s】SR‑IOV‑Network‑Operator 详解
云原生·容器·kubernetes
读书读傻了哟1 天前
解决docker拉取镜像报错failed to resolve reference “docker.io/xxx“...i/o timeout问题
运维·docker·容器
风曦Kisaki1 天前
对象存储 MinIO 的两种生产环境适用部署方式
kubernetes