基于cri-dockerd的Kubernetes v1.29集群完整部署文档

文档概述

本文档旨在指导在Rocky Linux 9系统上,使用cri-dockerd作为CRI适配层,部署一个兼容Docker运行时的Kubernetes v1.29集群。部署过程明确区分Master(控制平面)节点Worker(工作)节点的操作。


第一部分:通用前置操作(所有节点均需执行)

以下步骤在规划为Master和Worker的所有节点上均需执行,为Kubernetes运行准备基础环境与容器运行时。

1.1 系统基础配置

执行内核参数调整与网络配置,这是Kubernetes集群运行的底层前提 。

# 1. 关闭SELinux(生产环境请根据安全策略调整)
sed -i “s/SELINUX=enforcing/SELINUX=disabled/g” /etc/selinux/config
setenforce 0

# 2. 配置阿里云镜像源(加速软件包下载)
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

# 3. 加载内核模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

# 4. 配置网络参数(启用IP转发和桥接流量)
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
1.2 安装与配置Docker

安装Docker CE并完成关键配置,特别是cgroup驱动必须与kubelet保持一致 。

# 1. 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

# 2. 添加阿里云Docker镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 3. 安装Docker引擎
yum install -y docker-ce docker-ce-cli containerd.io

# 4. 配置Docker daemon
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  “exec-opts”: [“native.cgroupdriver=systemd”],
  “log-driver”: “json-file”,
  “log-opts”: {
    “max-size”: “100m”,
    “max-file”: “3”
  },
  “storage-driver”: “overlay2”
}
EOF

# 5. 启动并设置Docker服务开机自启
systemctl enable --now docker

关键说明“native.cgroupdriver=systemd” 是必须项,若与kubelet的cgroup驱动不一致,将导致节点无法正确注册到集群 。

1.3 部署cri-dockerd插件

安装cri-dockerd二进制文件并配置其系统服务,这是连接kubelet与Docker引擎的核心组件 。

# 1. 下载并解压cri-dockerd
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.21/cri-dockerd-0.3.21.amd64.tgz
tar -zxvf cri-dockerd-0.3.21.amd64.tgz
cp cri-dockerd/cri-dockerd /usr/local/bin/
chmod +x /usr/local/bin/cri-dockerd

# 2. 创建并配置systemd服务
cat > /usr/lib/systemd/system/cri-docker.service <<EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target docker.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd \\
  --container-runtime-endpoint fd:// \\
  --network-plugin=cni \\
  --cni-bin-dir=/opt/cni/bin \\
  --cni-conf-dir=/etc/cni/net.d \\
  --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
Restart=always
RestartSec=2
StartLimitInterval=0

[Install]
WantedBy=multi-user.target
EOF

# 3. 启动cri-dockerd服务
systemctl daemon-reload
systemctl enable --now cri-docker

# 4. 验证安装
systemctl status cri-docker
ls -l /run/cri-dockerd.sock  # 应存在socket文件
1.4 安装Kubernetes基础组件

安装kubelet, kubeadm, kubectl,并启用kubelet服务 。

# 1. 配置Kubernetes阿里云镜像源
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

# 2. 安装指定版本组件(此处以v1.29.2为例)
yum install -y kubelet-1.29.2 kubeadm-1.29.2 kubectl-1.29.2

# 3. 启用kubelet服务(暂不启动,待init或join后自动启动)
systemctl enable kubelet

第二部分:Master节点专属操作

在完成上述通用配置的其中一个节点上,执行以下操作,将其初始化为集群的控制平面。

2.1 初始化Kubernetes控制平面

使用kubeadm初始化集群,并关键指定cri-dockerd的socket路径

kubeadm init \
  --apiserver-advertise-address=192.168.66.11 \ # 替换为Master节点实际IP
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.29.2 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket unix:///run/cri-dockerd.sock # 核心参数:指定使用cri-dockerd

初始化成功后会输出kubeadm join命令及令牌,请妥善保存。随后按提示配置kubectl

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2.2 部署Pod网络插件(CNI)

集群初始化后,必须安装网络插件以使Pod间能够通信。此处以Calico为例 。

# 1. 下载Calico清单文件
curl https://docs.projectcalico.org/manifests/calico.yaml -O

# 2. 部署Calico
kubectl apply -f calico.yaml

# 3. 监控部署状态
watch kubectl get pods -n kube-system

等待所有kube-system命名空间下的Pod状态均为Running


第三部分:Worker节点专属操作

在完成第一部分:通用前置操作的所有Worker节点上,执行以下操作,将其加入集群。

3.1 加入Kubernetes集群

使用Master节点初始化成功后输出的kubeadm join命令,并同样必须附加--cri-socket参数

kubeadm join 192.168.66.11:6443 \ # Master节点IP和端口
  --token <token> \ # 替换为实际的token
  --discovery-token-ca-cert-hash <hash> \ # 替换为实际的hash
  --cri-socket unix:///run/cri-dockerd.sock # 核心参数:必须与Master节点一致

加入成功后,可在Master节点使用kubectl get nodes命令查看新加入的节点状态。


第四部分:生产环境优化建议(所有节点)

为保障集群长期稳定运行,建议在所有节点上进行以下优化配置 。

4.1 配置Docker日志轮转

防止容器日志占满磁盘。

cat > /etc/logrotate.d/docker <<EOF
/var/lib/docker/containers/*/*.log {
    rotate 7
    daily
    compress
    delaycompress
    missingok
    copytruncate
}
EOF
4.2 优化cri-dockerd资源回收参数

编辑/usr/lib/systemd/system/cri-docker.service文件,在ExecStart命令中添加以下参数,以优化镜像垃圾回收和节点资源驱逐策略:

--image-gc-high-threshold=85 \
--image-gc-low-threshold=80 \
--eviction-hard=memory.available<100Mi,nodefs.available<10% \
--eviction-minimum-reclaim=memory.available=0Mi,nodefs.available=500Mi

修改后需重载服务:systemctl daemon-reload && systemctl restart cri-docker

4.3 限制Docker守护进程资源

为Docker守护进程本身设置资源限制,避免其影响宿主机稳定性。

mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/limits.conf <<EOF
[Service]
CPUAccounting=yes
MemoryAccounting=yes
CPUQuota=200%
MemoryLimit=4G
EOF
systemctl daemon-reload
systemctl restart docker

第五部分:节点角色与操作对照矩阵

操作步骤所属部分Master 节点Worker 节点关键说明/命令
系统基础配置第一部分 1.1必须必须关闭SELinux、配置网络参数。
安装Docker第一部分 1.2必须必须配置 cgroupdriver=systemd
部署cri-dockerd第一部分 1.3必须必须服务socket路径为 /run/cri-dockerd.sock
安装kubeadm等第一部分 1.4安装全套仅装kubeadm, kubeletWorker节点无需kubectl
初始化集群第二部分 2.1执行 kubeadm init不执行核心参数:--cri-socket unix:///run/cri-dockerd.sock
配置kubectl第二部分 2.1执行不执行复制admin.conf到~/.kube/config
部署网络插件第二部分 2.2执行 kubectl apply不执行在Master上执行,插件Pod会调度到所有节点。
加入集群第三部分 3.1不执行执行 kubeadm join核心参数:--cri-socket unix:///run/cri-dockerd.sock
生产优化配置第四部分建议建议日志轮转、资源限制等。

故障排查要点

若节点状态异常,可参照博客内容按以下顺序检查 :

  1. 服务状态systemctl status cri-dockersystemctl status docker
  2. kubelet日志journalctl -u kubelet -f
  3. Pod描述:在Master节点使用 kubectl describe pod <pod-name> 查看异常Pod事件。
  4. Socket文件:确认 /run/cri-dockerd.sock 文件存在且权限正确。

通过遵循此分角色、分步骤的文档,可以系统性地完成一个使用cri-dockerd插件、兼容Docker的Kubernetes v1.29集群的部署与基础优化 。


参考来源

更多推荐