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

k8s,v1.30.4,安装使用docker

一.前置概念

Docker 与 Kubernetes 共用同一个 containerd 进程 时,只要满足以下 3 个条件,就不会冲突:

检查点要求原因
cgroup-driverkubelet 与 containerd 必须同为 systemd二者不一致会导致 Pod 无法调度
Unix socketkubelet 指向 /run/containerd/containerd.sock;Docker 也复用该 socket不抢占,不重复启动 containerd
端口/目录无重叠
特性cri-dockerdcontainerd (内置 CRI)
本质一个适配器垫片一个完整的容器运行时,原生实现了 CRI 接口
目的为了在 dockershim 被移除后,让用户还能继续使用 Docker Engine作为 Kubernetes 的底层运行时。作为 Kubernetes 默认的、推荐的容器运行时。
架构多一层翻译,复杂度更高。kubelet -> cri-dockerd -> dockerd -> containerd -> runc架构更简洁。kubelet -> containerd (CRI) -> runc
推荐度不推荐。仅作为旧集群迁移的临时过渡方案强烈推荐。是所有新集群的标准选择
未来是旧技术的延伸,会逐步淘汰。是现在和未来的标准。

你有两种主要的实现路径,其核心区别如下表所示:

特性方案 A:安装 Docker 作为独立工具(推荐)方案 B:使用 cri-dockerd 让 K8s 接管 Docker
本质Docker 作为独立的工具,用于构建镜像、运行容器等让 Kubernetes 使用 Docker 作为其底层容器运行时
K8s 运行时保持不变,仍是 containerd需要变更,从 containerd 改为 Docker (通过 cri-dockerd)
管理方式容器和镜像由 Docker 和 containerd 分别管理容器和镜像由 Kubernetes 通过 Docker 统一管理
复杂度,简单安装配置即可,需安装配置 cri-dockerd 并调整 K8s 组件配置
稳定性风险,不影响现有 K8s 集群,更改运行时可能引入风险
适用场景需使用 Docker 命令构建镜像测试容器确实需要让 K8s 使用 Docker 来创建和管理容

二.安装docker

1.解决containerd冲突,安装docker

**注意:安装的docker版本需要支持k8s里面的containerd版本,docker不额外安装containerd,使用同一个containerd

# 确保已安装 yum-utils,它提供了 yumdownloader 命令
sudo yum install yum-utils -y # 添加仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoyumdownloader --resolve --destdir=/tmp docker-ce-24.0.* docker-ce-cli-24.0.* docker-compose-plugin 命令说明:--resolve:自动解析并下载所有依赖的包。这个参数非常重要,否则你只下载指定的包,安装时会因为缺少依赖而失败47。--destdir=/tmp:指定将下载的 RPM 包存放于 /tmp 目录。你可以根据需要修改为其他路径。

2.手动强制安装(忽略依赖)

cd /tmp
sudo rpm -Uvh --nodeps docker-ce-24.0.* docker-ce-cli-24.0.*

3.配置

mkdir -p /etc/docker
vim /etc/docker/daemon.json
{"exec-opts": ["native.cgroupdriver=systemd"],"storage-driver": "overlay2"
}// 强制 cgroup 驱动为 systemd,与 kubelet 保持一致
// 使用性能较好的overlay2存储驱动

4.启动

# 启动并设为开机自启
systemctl daemon-reload
systemctl enable --now docker
docker version

5.安装docker-compose 

sudo rpm -ivh docker-compose-plugin*-i	install(安装)
-v	verbose(显示详细过程)
-h	hash(进度条)

6.使用的命令查看的容器服务不同,原因containerd的名称空间隔离


(1)虽然物理上是同一个 containerd 进程,Docker 与 Kubernetes 各自把容器放在 不同的 containerd 命名空间:

  • Docker 默认使用 moby

  • Kubernetes CRI 使用 k8s.io

工具命名空间能看到谁的容器
docker ps / docker imagesmoby仅 Docker 手动启动的容器
crictl ps / crictl imagesk8s.io仅 Kubernetes Pod 容器
nerdctl -n k8s.io psk8s.ioPod 容器
# 看看 containerd 里有哪些命名空间
sudo ctr ns ls

(2)把 Docker 镜像搬到 k8s.io

# 把本地 Docker 镜像导出
docker save nginx:latest | sudo ctr -n k8s.io images import -

(3)containerd操作命令


7.使用自己的harbor

(1)默认拉取镜像的地址

# 如果没有这个文件
[root@master ~]# containerd config default >/etc/containerd/config.toml[root@master ~]# vim /etc/containerd/config.tomlsandbox_image = "harbor:443/k8s/pause:3.9"#这行配置指定了 containerd 用于创建 Pod 沙箱(sandbox)的镜像。在 Kubernetes 中,每个 Pod 都需要一个基础的沙箱镜像来启动,这个镜像通常是一个轻量级的、只包含基本功能的镜像,用于作为容器运行的基础环境。pause 镜像就是这样一个镜像,它通常用于在 Pod 内部创建一个容器,作为该 Pod 所有其他容器的“父容器”
这意味着 containerd 将从你的 Harbor 仓库中拉取这个特定的 pause 镜像版本。SystemdCgroup = true# 配置镜像仓库
末尾插入:[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://192.168.88.240:443"][plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor:443"]endpoint = ["https://192.168.88.240:443"][plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.88.240:443".tls]insecure_skip_verify = true
#这部分配置允许 containerd 在与 192.168.88.240:443 通信时跳过 TLS 证书验证。[root@master ~]# systemctl enable --now kubelet containerd
docker pull <Harbor地址>/<项目名>/<镜像名>:<标签>

http://www.xdnf.cn/news/19885.html

相关文章:

  • 嵌入式解谜日志-网络编程(udp,tcp,(while循环原理))
  • [特殊字符] 预告!我正在开发一款让自动化操作变得「像呼吸一样自然」的AI神器
  • 从静态到智能:用函数式接口替代传统工具类
  • 命令行小工具
  • Controller返回CompletableFuture到底是怎么样的
  • Ubuntu系统镜像源配置
  • 数据结构——树(03二叉树,与路径有关的问题,代码练习)
  • SPI片选踩坑实录(硬件片选和软件片选)
  • Base64编码的作用与应用场景
  • 利用 Java 爬虫获取淘宝商品 SKU 详细信息实战指南
  • 美团龙猫(longcat.AI)编写的利用二分查找优化Excel的sheet.xml指定范围输出C程序
  • 【数学建模学习笔记】时间序列分析:ARIMA
  • Scikit-learn从入门到实践:Scikit-learn入门-安装与基础操作
  • Qwen3-Reranker-0.6B 模型结构
  • Shell脚本一键监控平台到期时间并钉钉告警推送指定人
  • 自动化基本技术原理
  • 嵌入式解谜日志-网络编程
  • Kafka面试精讲 Day 5:Broker集群管理与协调机制
  • 基于SQLite的智能图片压缩存储系统:代码解析与实战应用
  • QuickUp-Ubuntu
  • FPGA AD7606串行驱动与并行驱动
  • 【Flask + Vue3 前后端分离管理系统】
  • 友思特案例 | 食品行业视觉检测案例集锦(三)
  • 利用 Python 获取微店商品关键词搜索 API 接口数据的实战指南
  • 利用飞算Java打造电商系统核心功能模块的设计与实现
  • 硬件开发(1)—单片机(1)
  • atomic常用类方法
  • VR智慧楼宇技术:打造智能办公空间的卓越方案​
  • 深圳外贸峰会究竟藏着啥秘密?能让外贸人收获满满?
  • RHEL9源码编译MySQL8.0.40