更换k8s容器运行时环境为docker的过程

 更新时间:2025年10月10日 16:59:27   作者:my_qq_990814268  
这篇文章主要介绍了更换k8s容器运行时环境为docker的过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

更换k8s容器运行时环境为docker

k8s-V1.24之后容器运行时默认是containerd,若想改为熟悉的docker作为运行时,需要做以下操作

  • 在每个节点安装containerd、docker;
  • 每个节点安装cri-docker;
  • 调整kubelet配置并重启验证。

1.安装docker、containerd服务

# 安装docker和containerd
# 二进制包下载地址:https://download.docker.com/linux/static/stable/x86_64/
# wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.2.tgz
​
#解压
tar xf docker-*.tgz 
#拷贝二进制文件
cp docker/* /usr/bin/
#创建containerd的service文件,并且启动
cat >/etc/systemd/system/containerd.service <<EOF
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
​
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=1048576
TasksMax=infinity
OOMScoreAdjust=-999
​
[Install]
WantedBy=multi-user.target
EOF
​
# 设置开机自启
systemctl enable --now containerd.service
systemctl status containerd.service
​
#准备docker的service文件
cat > /etc/systemd/system/docker.service <<EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service docker.socket containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service
​
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-500
​
[Install]
WantedBy=multi-user.target
EOF
​
​
#准备docker的socket文件
cat > /etc/systemd/system/docker.socket <<EOF
[Unit]
Description=Docker Socket for the API
​
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
​
[Install]
WantedBy=sockets.target
EOF
​
​
#创建docker组
groupadd docker
#启动docker
systemctl enable --now docker.socket  && systemctl enable --now docker.service
#验证
docker info
​
# 配置加速器
mkdir /etc/docker/ -pv
cat >/etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
  "data-root": "/var/lib/docker"
}
EOF
systemctl daemon-reload 
systemctl stop docker
systemctl restart docker

2.安装cri-docker

# 由于1.24以及更高版本不支持docker所以安装cri-docker,kubelet可以通过cri-docker间接编排容器
# 下载cri-docker 
# wget  https://mirrors.chenby.cn/https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.3/cri-dockerd-0.3.3.amd64.tgz
​
# 解压cri-docker
tar xvf cri-dockerd-*.amd64.tgz 
cp -r cri-dockerd/  /usr/bin/
chmod +x /usr/bin/cri-dockerd/cri-dockerd
​
# 写入启动配置文件
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 firewalld.service
Wants=network-online.target
Requires=cri-docker.socket
​
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
​
StartLimitBurst=3
StartLimitInterval=60s
​
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
​
TasksMax=infinity
Delegate=yes
KillMode=process
​
[Install]
WantedBy=multi-user.target
EOF
​
# 写入socket配置文件
cat > /usr/lib/systemd/system/cri-docker.socket <<EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
​
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
​
[Install]
WantedBy=sockets.target
EOF
​
# 进行启动cri-docker
systemctl daemon-reload 
systemctl enable cri-docker --now
systemctl restart cri-docker
systemctl status cri-docker

3.调整kubelet配置,并重启验证

#注释掉原来的配置,改为:--container-runtime-endpoint=unix:///run/cri-dockerd.sock \
cat /etc/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
​
[Service]
WorkingDirectory=/var/lib/kubelet
ExecStartPre=/bin/mount -o remount,rw '/sys/fs/cgroup'
ExecStart=/opt/kube/bin/kubelet \
  --config=/var/lib/kubelet/config.yaml \
#  --container-runtime-endpoint=unix:///run/containerd/containerd.sock \
  --container-runtime-endpoint=unix:///run/cri-dockerd.sock \
  --hostname-override=10.10.10.3 \
  --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
  --root-dir=/var/lib/kubelet \
  --v=2
Restart=always
RestartSec=5
​
[Install]
WantedBy=multi-user.target
​
systemctl daemon-reload
systemctl restart kubelet
​
# 验证:
[root@10-3 down]# kubectl get node -owide
NAME         STATUS   ROLES    AGE   VERSION    INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                    KERNEL-VERSION                       CONTAINER-RUNTIME
10.10.10.3   Ready    master   26h   v1.27.16   10.10.10.3    <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64   docker://24.0.5
k8s-node01   Ready    node     8h    v1.27.16   10.10.10.4    <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64   docker://24.0.5

#删除节点上的历史容器
crictl rm -f `crictl ps -aq`

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Ubuntu Docker 的安装部署及简单应用

    Ubuntu Docker 的安装部署及简单应用

    这篇文章主要介绍了Ubuntu Docker 的安装部署的相关资料,这里说明介绍了详细的步骤,需要的朋友可以参考下
    2016-10-10
  • Docker容器网络更改的实现

    Docker容器网络更改的实现

    本文主要介绍了Docker容器网络更改的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 详解给Ocelot做一个Docker镜像

    详解给Ocelot做一个Docker镜像

    这篇文章主要介绍了详解给Ocelot做一个Docker镜像,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Docker搭建MySQL双主复制详细教程

    Docker搭建MySQL双主复制详细教程

    Docker MySQL 双主复制是一种数据库高可用和数据冗余的技术,它利用 Docker 容器化的优势,在两个或多台MySQL服务器上同时运行并维护数据库副本,这两个主服务器可以互相同步数据更新,本文给大家介绍了Docker搭建MySQL双主复制详细教程,需要的朋友可以参考下
    2024-07-07
  • Docker网络配置与自定义IP容器通信

    Docker网络配置与自定义IP容器通信

    IP地址是Docker容器在网络中的唯一标识,每个Docker都会被分配一个 IP,用于网络通信,本文主要介绍了Docker网络配置与自定义IP容器通信,感兴趣的可以了解一下
    2024-03-03
  • 生产环境中安全运行Docker容器

    生产环境中安全运行Docker容器

    本文是一篇译文,给大家详细介绍如何在生产环境中安全运行Docker容器,有需要的小伙伴可以参考下
    2017-01-01
  • Docker 通过端口来连接一个容器的实现

    Docker 通过端口来连接一个容器的实现

    这篇文章主要介绍了Docker 通过端口来连接一个容器的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker images导出和导入操作

    Docker images导出和导入操作

    这篇文章主要介绍了Docker images导出和导入操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Docker之cAdvisor的安装使用方式

    Docker之cAdvisor的安装使用方式

    这篇文章主要介绍了Docker之cAdvisor的安装使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 如何使用docker compose安装gitlab

    如何使用docker compose安装gitlab

    使用Docker Compose安装GitLab是一个相对简单的过程,但需要按照一定的步骤来确保一切设置正确,这篇文章主要介绍了使用docker compose安装gitlab,需要的朋友可以参考下
    2024-12-12

最新评论