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

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.dtcms.com/a/365534.html

相关文章:

  • java面试中经常会问到的spring问题有哪些(基础版)
  • 日志打印--idf的esp32
  • 如何区分 Context Engineering 与 Prompt Engineering
  • 用AI做旅游攻略,真能比人肉整理靠谱?
  • 特斯拉“宏图计划4.0”发布!马斯克:未来80%价值来自机器人
  • Springboot3+SpringSecurity6Oauth2+vue3前后端分离认证授权-客户端
  • C++:类和对象(上)
  • 集成运算放大器的作用、选型和测量指南-超简单解读
  • 夸克网盘辅助工具 QuarkPanTool 分析
  • 代码随想录算法训练营第一天 || (双指针)27.移除元素 26.删除有序数组中的重复项 283.移动零 977.有序数组的平方
  • 从 “能说会道” 到 “能做会干”:AI Agent 技术突破,如何让人工智能拥有 “行动力”?
  • Linux 创建服务 使用systemctl 管理
  • uni app 的app端 写入运行日志到指定文件夹。
  • 腾讯云《意愿核身移动 H5》 快速完成身份验证接入
  • 国产CAD皇冠CAD(CrownCAD)建模教程:汽车驱动桥
  • HTML5 标题标签、段落、换行和水平线
  • shell-awk命令详解(理论+实战)
  • 【面试场景题】1GB 大小HashMap在put时遇到扩容的过程
  • 第七章 表达:成果展示--创建第二大脑读书笔记
  • 10名机械画图人员如何共享一台云服务器的软硬件资源进行设计办公
  • ArcGIS解决csv或者excel转换为矢量的坐标问题
  • 第二章 Windows 核心概念通俗解析
  • 03 - HTML常用标签
  • 【学Python自动化】 9.1 Python 与 Rust 类机制对比学习笔记
  • PyTorch 和 Transformer的区别与联系
  • Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十五天
  • 农业XR数字融合工作站,赋能农业专业实践学习
  • Qt为什么要引入QML语言?
  • 八、算法设计与分析
  • 瑞芯微rv1126 linux内核使用spidev驱动