k8s集群部署:容器运行时
1. 卸载旧版本 Docker
# 卸载旧版本的 Docker 组件
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
注释: 该命令会移除系统中现有的 Docker 及其相关组件,以确保不会与新的 Docker 版本冲突。
2. 二进制包安装 Docker
2.1 下载 Docker RPM 包
访问以下 URL 下载适用于 CentOS 9 ARM64 架构的 Docker RPM 包下载:
https://download.docker.com/linux/centos/9/aarch64/stable/Packages/
注释: 根据系统架构下载相应的 Docker RPM 包文件。
2.2 安装 RPM 包
# 安装 Docker 及相关组件
sudo yum install -y ./containerd.io-1.7.20-3.1.el9.aarch64.rpm \./docker-ce-27.1.2-1.el9.aarch64.rpm \./docker-ce-cli-27.1.2-1.el9.aarch64.rpm \./docker-buildx-plugin-0.16.2-1.el9.aarch64.rpm \./docker-ce-rootless-extras-27.1.2-1.el9.aarch64.rpm \./docker-compose-plugin-2.29.1-1.el9.aarch64.rpm
注释: 通过 yum 安装下载的 Docker 二进制包文件,其中包括 Docker 引擎、CLI 工具、Buildx 插件、Rootless 组件以及 Compose 插件。
2.3 启动并启用 Docker
# 启动 Docker 服务
sudo systemctl start docker
# 设置 Docker 开机自启
sudo systemctl enable docker
注释: 安装完成后,启动 Docker 并将其设置为开机自启,以确保系统重启后 Docker 自动启动。
2.4 验证安装
# 查看 Docker 版本信息
sudo docker version
# 运行 hello-world 容器来确认 Docker 是否工作正常
sudo docker run hello-world
注释: hello-world 容器的成功运行标志着 Docker 已正确安装并可以正常工作。
2.5 使非 root 用户可操作 Docker
# 将 kubernetes 用户添加到 docker 组中
sudo usermod -aG docker kubernetes
注释: 该命令将 kubernetes 用户添加到 docker 组,使其能够无需 root 权限运行 Docker 命令。
# 切换用户会话以使更改生效
su - kubernetes
注释: 用户组的更改需要重新登录才能生效。
# 验证 kubernetes 用户是否加入 docker 组
groups kubernetes
注释: groups 命令应显示 docker 组在 kubernetes 用户的组列表中。
# 使用非 root 用户运行 Docker 命令测试
docker run hello-world
3. 安装 cri-dockerd
3.1 下载 cri-dockerd
从以下地址下载适用于 ARM64 架构的 cri-dockerd下载:
https://github.com/Mirantis/cri-dockerd/releases
3.2 解压 cri-dockerd
# 使用 tar 解压 cri-dockerd 文件
tar -xvzf cri-dockerd-0.3.15.arm64.tgz
注释: 解压后会得到 cri-dockerd 的二进制文件。
3.3 将 cri-dockerd 移动到系统路径
# 将 cri-dockerd 二进制文件复制到 /usr/local/bin 目录
sudo cp cri-dockerd/cri-dockerd /usr/local/bin/
# 设置执行权限
sudo chmod +x /usr/local/bin/cri-dockerd
注释: 将 cri-dockerd 二进制文件移动到系统的可执行路径并赋予可执行权限。
3.4 创建 Systemd 服务文件
# 创建 cri-dockerd 的 systemd 服务文件
sudo vi /etc/systemd/system/cri-docker.service
添加以下内容:
[Unit]
Description=CRI Interface for Docker Application Container Engine # 服务的描述,表示这是Docker的CRI接口
Documentation=https://docs.mirantis.com # 文档链接,供用户查阅详细信息
After=network-online.target firewalld.service docker.service # 这个服务需要在网络服务、firewalld(防火墙服务)、docker服务启动后再启动
Wants=network-online.target # 确保网络在服务启动时已启动
Requires=cri-docker.socket # 要求 cri-docker.socket 作为依赖,在 cri-dockerd 启动时同时启动 socket 文件
[Service]
Type=notify # 通知型服务类型,服务启动后会向 systemd 发送通知表明它已准备好
ExecStart=/usr/local/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.1
# 指定服务启动命令,此处 cri-dockerd 启动并使用 CNI 作为网络插件,指定 pod 的基础镜像为 pause 镜像,用于 Kubernetes 中
ExecReload=/bin/kill -s HUP $MAINPID # 当服务重新加载时发送 HUP 信号,重新启动主进程
TimeoutSec=0 # 禁用超时,允许服务无限期运行
RestartSec=2 # 服务失败后2秒钟后自动重启
Restart=always # 如果服务意外停止,总是自动重启
StartLimitBurst=3 # 在60秒内允许的启动次数为3次
StartLimitInterval=60s # 如果在60秒内超过了允许的启动次数限制,则不再重新启动
LimitNOFILE=infinity # 无限制地允许服务打开的文件数量
LimitNPROC=infinity # 无限制地允许服务可启动的进程数
LimitCORE=infinity # 无限制地允许服务生成的core dump文件大小
TasksMax=infinity # 服务可以创建的进程和线程总数不受限制
Delegate=yes # 将资源控制的管理委托给该服务,允许服务创建的进程和子进程进行自己的资源管理
KillMode=process # 仅杀死主进程而不杀死整个服务的所有子进程
[Install]
WantedBy=multi-user.target # 指定该服务将在多用户目标下启动,即系统进入普通多用户模式时
注释: 该文件定义了 cri-dockerd 的 systemd 服务,确保 cri-dockerd 在系统启动时自动启动。
3.5 创建 Systemd Socket 文件
# 创建 cri-dockerd 的 socket 文件
sudo vi /etc/systemd/system/cri-docker.socket
添加以下内容:
[Unit]
[Unit]
Description=CRI Docker Socket for the API # socket文件的描述,表示这是用于CRI Docker API通信的socket
[Socket]
ListenStream=%t/cri-dockerd.sock # 定义 socket 文件路径,%t 表示系统的运行时目录(通常为 /run)
SocketMode=0660 # 设置 socket 文件权限为0660,拥有者和组有读写权限,其他用户无权访问
SocketUser=root # socket文件由 root 用户拥有
SocketGroup=docker # socket文件属于 docker 组,允许 docker 组内的用户使用该socket
[Install]
WantedBy=sockets.target # 该socket文件将在系统的 sockets.target 下启动,用于管理socket
注释: 该文件配置 cri-dockerd 的 socket 通信。
3.6 启动并启用服务
# 重新加载 systemd 配置以应用更改
sudo systemctl daemon-reload# 启用并启动 cri-docker 服务和 socket
sudo systemctl enable cri-docker.service
sudo systemctl enable cri-docker.socket
sudo systemctl start cri-docker.service
sudo systemctl start cri-docker.socket
注释: 通过 systemctl 启动并启用 cri-docker 服务和 socket。
3.7 验证安装
# 检查 cri-docker 服务状态
sudo systemctl status cri-docker.service
# 检查 cri-docker socket 状态
sudo systemctl status cri-docker.socket
注释: 确认 cri-dockerd 服务和 socket 是否已启动并正在运行。
专栏目录:
1、k8s集群部署:环境准备
2、k8s集群部署:容器运行时
3、k8s集群部署:安装 kubeadm
本文参考:http://www.weifos.com/Home/TechStack/1807017272963891200