【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 参数
相关推荐
BullSmall21 分钟前
Sonarqube9.9 docker 镜像启动后 conf 下的配置文件没有了
docker·容器·eureka
ruofu3327 分钟前
wsl端是py312,但是项目是py311, 如何下载py311的依赖包(wheels)
python·docker
spider_xcxc1 小时前
Docker 实战:容器化多服务应用,Dockerfile 与 Compose 配置全解析
docker·云原生·eureka·虚拟化·容器化
hay_lee2 小时前
Kubernetes StatefulSet:OrderedReady 极简指南
云原生·容器·kubernetes
晚风吹长发2 小时前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ2132 小时前
Docker Compose 安装与配置指南
运维·docker·容器
BullSmall3 小时前
Anolis OS 8.10 Docker 部署 SonarQube 9.9 完整教程
运维·docker·容器
成为你的宁宁4 小时前
【K8s HPA 水平扩缩容】
kubernetes·hpa
欢醉4 小时前
k8s调度容器失败The node had condition: [DiskPressure]
kubernetes·springcloud
java_logo7 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris