基于cri-dockerd的K8s v1.29完整部署指南
基于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, kubelet | Worker节点无需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 |
| 生产优化配置 | 第四部分 | 建议 | 建议 | 日志轮转、资源限制等。 |
故障排查要点
若节点状态异常,可参照博客内容按以下顺序检查 :
- 服务状态:
systemctl status cri-docker和systemctl status docker。 - kubelet日志:
journalctl -u kubelet -f。 - Pod描述:在Master节点使用
kubectl describe pod <pod-name>查看异常Pod事件。 - Socket文件:确认
/run/cri-dockerd.sock文件存在且权限正确。
通过遵循此分角色、分步骤的文档,可以系统性地完成一个使用cri-dockerd插件、兼容Docker的Kubernetes v1.29集群的部署与基础优化 。
参考来源
更多推荐
所有评论(0)