当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/434843.html

相关文章:

  • PHP7 的内核结构
  • JVM合集
  • tomcat端口被占用解决方法
  • 全新的训练算法:Reflection 70B进入大众的视野
  • 静态标注rtk文件参数解析
  • TensorFlow和PyTorch小知识
  • Java证书信息收集
  • flink写入hudi MOR表
  • 智能工厂程序设计 之-2 (Substrate) :三个世界--“存在的意义”-“‘我’的价值的实现” 之2
  • 概要设计例题
  • 注册表模式:使用注册表和装饰器函数的模块化设计
  • 怎样将vue项目 部署在ngixn的子目录下
  • FPGA开发:Verilog数字设计基础
  • 哈希表,算法
  • Java数组的定义及遍历
  • 【电路笔记】-反相运算放大器
  • 【电子通识】半导体工艺——刻蚀工艺
  • vue-router 之如何在模版(template)中获取路由配置信息?
  • HPL 源码结构分析
  • Java代码审计篇 | ofcms系统审计思路讲解 - 篇3 | 文件上传漏洞审计
  • 【Kubernetes】常见面试题汇总(五)
  • MySQL 解决时区相关问题
  • SpringSecurity Context 中 获取 和 更改 当前用户信息的问题
  • Makefile的四种赋值运算符
  • framebuffer
  • 7.科学计算模块Numpy(4)ndarray数组的常用操作(二)
  • 抖音评论区截流脚本软件详细使用教学,抖音私域获客引流的五种方法。
  • Linux_kernel移植uboot07
  • Day-04-QFile打开文件的两种方式
  • 第三部分:4---进程地址空间