【Kubernetes】K8s 1.35 配置 Docker 作为容器运行时

Kubernetes 1.24 移除了对 Docker 的直接支持,并且新版 K8s 主推更轻量的 Containerd,但 Docker 凭借其强大的生态依然是许多人的首选。本文将通过 cri-dockerd 这个 '适配器',让 Kubernetes 中重新用上 Docker!

  • 操作系统:Ubuntu 24.04.2 LTS
  • Docker:29.1.3
  • cri-dockerd:0.3.14.3
  • Kubernetes:1.35.0
  • 下方仅一个主节点为例(其中主节点 hostname 为 master,可根据实际情况修改)

1、准备工作

1.1、查看操作系统版本

bash 复制代码
# 查看操作系统版本
cat /etc/os-release

1.2、关闭防火墙

  • 若有防火墙需要关闭

1.3、关闭 swap 分区

bash 复制代码
# 查看 swap 分区是否存在
free -h
# 关闭当前会话的 swap,重启后无效
swapoff -a
# 永久关闭 swap ,需重启
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 查看 swap 分区已关闭
free -h

1.4、配置内核

bash 复制代码
# 加载内核模块
modprobe overlay
modprobe br_netfilter
 
# 配置 sysctl 参数
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
 
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
 
# 应用配置
sysctl --system

1.5、安装必要工具

bash 复制代码
# 安装必要工具
apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

2、安装 Docker

bash 复制代码
# 信任 Docker 的 GPG 公钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
 
# 写入软件源信息
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 docker-ce
apt update
apt install -y docker-ce docker-ce-cli containerd.io

# 创建 Docker 配置文件
mkdir -p /etc/docker

# 配置 Docker 使用 systemd 作为 cgroup 驱动
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn"
  ]
}
EOF

# 启动 Docker
systemctl enable docker
systemctl start docker

# 验证 Docker 安装
docker version

3、安装 cri-dockerd

bash 复制代码
# 下载
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.21/cri-dockerd_0.3.21.3-0.ubuntu-jammy_amd64.deb

# 安装
dpkg -i cri-dockerd_0.3.21.3-0.ubuntu-jammy_amd64.deb

# 新版本的 cri-dockerd 包通常会自动配置好 systemd 服务
systemctl status cri-docker.service

# 如果服务未运行或未启用,请手动启动
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket

4、安装 Kubernetes

4.1、配置阿里云仓库进行安装

bash 复制代码
# 添加 Kubernetes GPG 密钥
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# 添加 Kubernetes 仓库
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
# 安装 kubelet、kubeadm、kubectl
apt-get update
apt-get install -y kubelet kubeadm kubectl
# 锁定版本,防止被自动更新破坏
apt-mark hold kubelet kubeadm kubectl

4.2、配置 kubelet 使用 cri-dockerd

bash 复制代码
sudo tee /etc/default/kubelet <<-'EOF'
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock"
EOF
# 重启 kubelet
systemctl daemon-reload
systemctl restart kubelet

4.3、查看/下载所需的镜像

bash 复制代码
# 查看/下载所需的镜像
kubeadm config images list --kubernetes-version=v1.35.0 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
# 使用参数 --cri-socket 指定使用 cri-dockerd
kubeadm config images pull --kubernetes-version=v1.35.0 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --cri-socket unix:///var/run/cri-dockerd.sock

4.4、初始化 master

bash 复制代码
# 初始化集群时配置参数 --cri-socket 指定使用 cri-dockerd
kubeadm init --apiserver-advertise-address=172.16.15.105 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version=v1.35.0 --service-cidr=10.96.0.0/16 --pod-network-cidr=10.244.0.0/16 --cri-socket unix:///var/run/cri-dockerd.sock

# 根据日志信息提示操作,执行下方命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

4.5、部署 Calico 网络插件

bash 复制代码
# 安装 Calico
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/calico.yaml

4.6、创建测试 pod

bash 复制代码
# 测试运行 pod
kubectl run nginx-pod --image=nginx:latest --port=80
kubectl get pod
kubectl describe pod nginx-pod

# 报错:0/1 nodes are available: 1 node(s) had untolerated taint(s). no new claims to deallocate, preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling.
# 原因:当前仅一个 master 节点,需要去掉污点/配置容忍才能调度

# 允许 Master 节点调度 Pod
kubectl taint nodes master node-role.kubernetes.io/control-plane-

4.7、工作节点

  • 工作节点部署同主节点类似,步骤 4.3 及以后无需执行,使用 "kubeadm join xxx" 命令加入主节点即可
  • 在 Worker 节点上执行 join 命令,同样需要加上 --cri-socket 参数
相关推荐
杨浦老苏21 小时前
离线优先的自托管笔记应用Anchor
笔记·docker·群晖
嗨 ! 海洋1 天前
K8S创建pod,CNI插件的网络配置过程
网络·kubernetes·php
AC赳赳老秦1 天前
Kubernetes 与 DeepSeek:高效 Pod 部署配置与资源调度优化指南
人工智能·云原生·容器·kubernetes·自动化·notepad++·deepseek
阿方索1 天前
Kubernetes Pod 管理
云原生·容器·kubernetes
哪里不会点哪里.1 天前
Docker
运维·docker·容器
汪碧康1 天前
一文掌握k8s的健康检查探针
云原生·容器·kubernetes·k8s·xkube·k8s管理平台
危笑ioi1 天前
k8s创建pv和pvc部署jenkins
kubernetes·jenkins
七七powerful1 天前
docker 搭建wtsap代理
运维·docker·容器
Shanxun Liao1 天前
Docker vlmcsd 完整管理指南
运维·docker·容器