基于 RHEL 9.7 搭建 Kubernetes v1.34 集群实战:Docker 运行时 (cri-dockerd) 与国内源配置详解

基于 kubeadm 配合 cri-dockerd 的部署

0 前提知识

1. k8s简介

Kubernetes ,通常简称为 K8s ,是一个开源的容器编排引擎,用于自动化部署、扩展和管理容器化应用程序。

它的名字源于希腊语,意为"舵手"或"领航员",形象地说明了它在管理大量容器时所扮演的指挥和调度角色。
为什么需要 K8s?

想象一下,你使用 Docker 将一个应用打包成一个容器,这解决了"在我电脑上能跑,在服务器上跑不了"的环境一致性问题。但是,当你的应用变得复杂,由成百上千个微服务(容器)组成时,手动管理它们就成了一场噩梦:

  • 如何部署? 如何同时在几十台服务器上启动这些容器?
  • 如何扩缩容? 当用户访问量激增时,如何快速增加容器数量?流量下降时又如何减少以节省资源?
  • 如何保证高可用? 如果某个容器或服务器宕机了,如何自动恢复,确保服务不中断?
  • 如何服务发现? 容器IP是动态变化的,服务之间如何找到彼此?

K8s 就是为了解决这些问题而生的。 它就像一个智能的"操作系统",你只需要告诉它你的期望(比如"我要运行3个副本"),剩下的调度、自愈、负载均衡、滚动更新等工作,全部由 K8s 自动完成。

一句话总结:Docker 让单个应用能跑起来,而 K8s 让大规模集群里的应用跑得稳、跑得爽。
K8s 的核心架构

K8s 采用经典的主从(Master-Worker)架构:

  • Master(控制平面):这是集群的"大脑",负责全局的决策和管理。它包含几个核心组件:
  • API Server (kube-apiserver):集群的唯一入口,所有操作都通过它来认证和处理。
  • 调度器 (kube-scheduler):负责决定将新的容器(Pod)放到哪台工作节点上运行。
  • 控制器管理器 (kube-controller-manager):持续检查集群的实际状态是否与你的期望状态一致,如果不一致就自动修复(例如,你期望3个副本,实际只有2个,它就会自动创建1个)。
  • etcd: 一个高可用的键值数据库,保存了集群的所有配置和状态信息,是集群的"唯一数据源"。
  • Worker(工作节点):这是集群的"苦力",真正运行你的应用容器。每个节点上包含:
  • Kubelet:节点的"管家",负责与 Master 通信,并管理本节点上容器的生命周期(启动、停止等)。
  • Kube-proxy:负责维护网络规则,实现服务访问的负载均衡。
  • 容器运行时 (Container Runtime):真正运行容器的软件,比如 containerd 或 cri-dockerd。

最核心的概念

在 K8s 的世界里,一切都是"资源对象",通过 YAML 文件来声明。以下是几个你必须知道的核心概念:

  • Pod: K8s 中最小的调度和管理单位。你可以把它想象成一个"豌豆荚",里面可以装一个或多个紧密协作的容器(比如一个应用容器和一个日志收集容器),它们共享网络和存储。
  • Deployment: 用来管理无状态应用(如 Web 服务)的控制器。它可以轻松实现多副本部署、滚动更新和一键回滚。
  • Service: 为一组 Pod 提供一个稳定、统一的访问入口(固定的 IP 和 DNS 名)。因为 Pod 是"短命"的,IP 会变,Service 解决了服务发现和负载均衡的问题。
  • StatefulSet: 专门用来管理有状态应用(如 MySQL、Redis 等数据库),它能保证 Pod 拥有稳定的网络标识和持久化的存储。
  • ConfigMap / Secret: 用来将配置文件和敏感信息(如密码、密钥)与容器镜像解耦,方便管理和更新。
2. 安装docker

系统环境:RedHat 9.7/Rocky Linux 9 / AlmaLinux 9

如果没有对应的镜像,可以去官网下载:

安装说明:具体的系统安装步骤(如分区、网络配置等)属于通用操作,建议参考网络上的通用安装教程进行操作。

安装好基础的环境之后,接下来 进行docker的安装

1、安装必要的一些系统工具

bash 复制代码
yum install -y yum-utils

2、添加软件源信息------docker仓库

bash 复制代码
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/rhel/docker-ce.repo

https://mirrors.aliyun.com/docker-ce/linux/**rhel**/docker-ce.repo

红色标注部分可以根据自己的系统进行替换

3、安装Docker

bash 复制代码
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

4、配置镜像加速器

bash 复制代码
# 创建目录
sudo mkdir -p /etc/docker

# 写入配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
    	"https://docker-0.unsee.tech",
        "https://proxy.1panel.live",
        "https://docker-cf.registry.cyou",
        "https://docker.1panel.live"
    ]
}
EOF

# 重启docker服务
sudo systemctl daemon-reload && sudo systemctl restart docker

如果遇到 sudo systemctl restart docker 启动失败,可能是因为某个特定的加速域名(如 docker.1panel.live)在该时刻无法解析。

可以尝试只保留 https://docker.1panel.live 或注释掉该文件进行排查。

5、启动docker并放到开机自启列表中

bash 复制代码
 systemctl enable --now docker

6、查看版本信息

bash 复制代码
docker --version

至此,docker就安装好了。

3. 前置准备与原理

在开始敲命令部署之前,我们需要先理解为什么要在 RHEL 9 上这样配置 K8s v1.34。

  1. 为什么选择 RHEL 9?

CentOS 7 已停止维护,且其老旧的内核(3.10)对新版 K8s 的 cgroups v2 支持不佳。RHEL 9 系列(Rocky/AlmaLinux)提供了更现代的内核环境,是未来的主流选择。

  1. 核心环境要求
  • CPU/内存: 建议 2核/4G 起步,内存不足会导致 Kubelet 频繁 OOM。
  • 网络规划: 请确保 Pod 网段(如 10.244.0.0/16)与宿主机 IP 不冲突。
  1. 关键系统参数调优(知其所以然)
  • 关闭 Swap: K8s 为了保证 Pod 的服务质量(QoS),禁止使用 Swap 分区,否则 Kubelet 无法准确计算资源使用率。
  • 配置 cri-dockerd: 自 K8s v1.24 起,Dockershim 被移除。我们需要安装 cri-dockerd 作为适配器,才能让 Docker 继续作为 K8s 的容器运行时。
4. 集群部署方式

4.1 常见部署方式概述

目前部署 Kubernetes 集群的方式主要有三种形式,它们分别适用于不同的使用场景。
4.2 Minikube(单机简化安装)

Minikube 是一个由社区维护的工具,旨在让你在本地环境中快速运行 Kubernetes。它通常在一个虚拟机(VM)中运行单节点的 Kubernetes 集群。

  • 特点: 极其轻量,安装简单,适合个人开发者在笔记本上进行功能验证和学习。
  • 局限: 仅支持单节点,无法模拟多节点的分布式架构,因此不适用于生产环境。

4.3 二进制包部署(生产环境极简版)

顾名思义,这种方式是通过手动下载 Kubernetes 的二进制可执行文件(如 kube-apiserver, kubelet 等),然后手动编写 Systemd 服务文件进行配置和启动。

  • 特点: "从零造轮子",对环境的控制粒度最细。
  • 适用人群: 仅推荐给需要深度研究 K8s 源码或对集群底层原理有极高要求的资深架构师。对于普通运维来说,过程繁琐且容易出错。

4.4 Kubeadm 与 Kubeasz(重点推荐)
(1) Kubeadm (官方标准)

kubeadm 是 Kubernetes 官方提供的用于快速搭建集群的工具。它通过 kubeadm init 和 kubeadm join 命令,提供了最佳实践的"快速路径"来初始化控制平面节点和加入工作节点。

(2) Kubeasz (国产开源利器)

kubeasz 是一个基于 Ansible 开发的开源工具集,特别针对国内网络环境进行了优化。它封装了 kubeadm 的复杂流程,通过 YAML 配置文件实现一键式部署。

  • 核心优势: 适合在生产环境中快速构建高可用(HA)集群,支持离线安装,且集成了丰富的运维脚本。
  • 适用场景: 国内企业生产环境,尤其是需要快速批量部署且无法稳定访问 Google 服务的场景。
  • 官方地址: https://github.com/easzlab/kubeasz

4.4 部署方式对比总结

部署方式 核心工具 适用场景
本地学习 Minikube 个人开发机、功能验证
深度研究 二进制包 源码分析、底层原理研究
生产/教学 Kubeadm 生产环境、教学实验、原理学习
国产化生产 Kubeasz 国内生产环境、离线部署

4.5 . 为什么推荐使用 Kubeadm?

在本教程中,我们选择 Kubeadm 作为核心讲解工具,主要基于以下三大理由:

  1. 官方权威性(The Official Way):kubeadm 是 CNCF 和 Kubernetes 官方维护的项目。它是所有其他高级部署工具(如 Kubeasz、RKE、kops 等)的基石。学习它就是学习 K8s 集群构建的"标准答案"。
  2. 原理透明化(Best for Learning):相比于"一键安装"的黑盒工具,kubeadm 的每一步操作(初始化、证书生成、加入节点)都清晰可见。通过它,你将透彻理解 K8s 各个组件(etcd, apiserver, kubelet 等)是如何协同工作的。
  3. 贴近生产环境(Production-Grade):虽然它是"引导"工具,但只要配合合理的 CNI 网络插件和高可用架构(HA),kubeadm 完全可以搭建出符合生产级标准的集群。掌握它,就等于掌握了企业级 K8s 运维的核心技能。

本教程选择 Docker 作为容器运行时,是基于国内实际网络环境与学习成本的折中之选。诚然,Kubernetes 自 1.24 版本起已正式弃用 Dockershim 并默认转向 Containerd,但这并不意味着 Docker 失去了价值;相反,由于 Containerd 在国内直接拉取镜像常面临网络阻塞的困境,而 Docker 拥有极其成熟的镜像加速配置与广泛的国内源支持,能极大提升实验效率。因此,我们将通过安装 cri-dockerd 插件作为适配层,让新版 K8s 依然能够兼容并调度 Docker Engine,从而在享受最新 K8s 版本特性的同时,规避掉繁琐的镜像拉取难题,让你能更专注于集群核心功能的学习。

1.环境准备

三台2核+4G内存的rhel 9.7, 单网卡(最小环境)

如果电脑内存不够,可以适当调整两台从服务器的内存为2G

|----------------|---------------|
| IP | 角色 |
| 192.168.194.26 | master(单管理节点) |
| 192.168.194.27 | node1 |
| 192.168.194.28 | node2 |

2 软件资源规划

  • 1 所有节点进行主机名绑定
bash 复制代码
# 修改主机名的命令
hostnamectl set-hostname master && bash
hostnamectl set-hostname node1 && bash
hostnamectl set-hostname node2 && bash

修改IP

bash 复制代码
nmcli c m ens160 ipv4.method manual ipv4.addresses 192.168.194.26/24 ipv4.gateway 192.168.194.2 ipv4.dns 223.5.5.5 connection.autoconnect yes 
nmcli c up ens160
bash 复制代码
# 打开主机名文件,把master、node1、node2添加上
vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.194.26  master
192.168.194.27  node1
192.168.194.28  node2
  • 2 所有节点关闭selinux,关闭firewalld,安装iptables服务,并保存为空规则
bash 复制代码
# 1. 关闭防火墙、SELinux、交换分区
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab

# 2. 转发 IPv4 并让 iptables 看到桥接流量
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sysctl --system

# 3. 配置阿里云 Kubernetes YUM 源 (RHEL 9 兼容 RHEL 8 源)
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.34/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.34/rpm/repodata/repomd.xml.key
EOF

# 4. 安装 kubelet, kubeadm, kubectl
dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet

安装 cri-dockerd 安装 (所有节点)

cri-dockerd 是一个适配器(Adapter)或桥梁。

简单来说,它的作用是让 Docker Engine(大家最熟悉的容器引擎)能够继续作为 Kubernetes(K8s)的容器运行时(Container Runtime)来使用。

为了让你更直观地理解,我们可以通过背景、作用和对比三个方面来拆解:
1. 为什么会出现 cri-dockerd?(背景)

在 Kubernetes v1.24 版本之前,K8s 内部内置了一个叫 dockershim 的组件,让它能直接指挥 Docker 干活。

但在 v1.24 版本中,Kubernetes 官方彻底移除了 dockershim。这意味着,如果你想在 K8s 里继续用 Docker,就必须找一个替代品来填补这个空缺,而 cri-dockerd 就是这个官方推荐的"外援"。
2. 它是如何工作的?(原理)

Kubernetes 现在只讲"标准普通话"(即 CRI 接口),而 Docker Engine 讲的是"方言"(Docker API)。

没有它时:K8s 无法直接指挥 Docker。

有了它后:cri-dockerd 就像一个翻译官。它监听 K8s 的 CRI 接口请求,把这些请求"翻译"成 Docker 能听懂的 API 调用,从而让 Docker 继续为 K8s 创建和管理容器。

Docker Engine 与 cri-dockerd 的区别

维度 Docker Engine cri-dockerd
核心功能 真正的容器引擎,负责创建、运行、管理容器 适配器/翻译层,本身不具备运行容器的能力
依赖关系 独立运行,不依赖 K8s 强依赖 Docker Engine,必须配合 Docker 使用
适用场景 单机开发、测试、简单部署 Kubernetes 集群中,且必须使用 Docker 作为运行时的场景
与 K8s 关系 K8s v1.24+ 不再直接支持 K8s v1.24+ 连接 Docker 的唯一桥梁

小结:如果你正在维护一个旧版的 Kubernetes 集群,或者团队非常依赖 Docker 的生态和工具链,不想迁移到 containerd 或 CRI-O,那么你就需要在节点上安装并配置 cri-dockerd,并在 Kubelet 配置中指定它的 socket 地址(通常是 unix:///var/run/cri-dockerd.sock),这样你的集群才能继续"指挥"Docker 干活。

bash 复制代码
# 1. 下载二进制包 (改用更稳定的镜像站或直接拉取二进制)
wget https://ghproxy.net/https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16.amd64.tgz

# 2. 解压并移动到系统路径
tar -xf cri-dockerd-0.3.16.amd64.tgz
cp cri-dockerd/cri-dockerd /usr/bin/
chmod +x /usr/bin/cri-dockerd

# 3. 下载并配置 systemd 服务文件
wget https://ghproxy.net/https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.service
wget https://ghproxy.net/https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.socket

# 4. 移动服务文件并修改配置(指定国内 pause 镜像)
cp cri-docker.service cri-docker.socket /etc/systemd/system/
sed -i 's|/usr/bin/cri-dockerd|/usr/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.10|' /etc/systemd/system/cri-docker.service

# 5. 启动服务
systemctl daemon-reload
systemctl enable --now cri-docker.socket
systemctl enable --now cri-docker.service

Master 节点初始化 (仅在 Master 执行)

192.168.194.26 上执行:

bash 复制代码
# 初始化集群
kubeadm init \
  --apiserver-advertise-address=192.168.194.26 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.34.5 \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket unix:///var/run/cri-dockerd.sock

apiserver-advertise-address=192.168.194.26

红色标注部分请改为自己的master主机ip

如果终端出现以下命令显示,就代表你的k8s初始化完成了

bash 复制代码
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.194.26:6443 --token 4rvhna.0zsnkd21f213zorr \
        --discovery-token-ca-cert-hash sha256:f54d2cd417f3c1863992e4827372a17a3745390409730fd29e7c838746471eb2

master主机上运行下面的命令

bash 复制代码
# 配置 kubectl 访问权限
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

在工作节点node1和node2中加入k8s集群中

bash 复制代码
kubeadm join 192.168.194.26:6443 \
    --token 4rvhna.0zsnkd21f213zorr \
    --discovery-token-ca-cert-hash sha256:f54d2cd417f3c1863992e4827372a17a3745390409730fd29e7c838746471eb2 \
    --cri-socket unix:///var/run/cri-dockerd.sock

为什么要加入这个参数" --cri-socket unix:///var/run/cri-dockerd.sock"

1、K8s 不再直接认识 Docker

在老版本 K8s 里,代码里内置了对接 Docker 的驱动(叫 dockershim)。但从 1.24 版本开始,K8s 删除了这段代码,它现在只认符合 CRI ( Container Runtime Interface ) 标准的接口。

  • Docker 本身不支持 CRI 标准

  • cri-dockerd 就是一个"翻译官",它左手接入 K8s 的 CRI 请求,右手转头去调用 Docker。

2、操作系统里有两个"候选项"

RHEL 9 系统在安装 Docker 时,通常会自动附带安装一个叫 containerd 的组件。

  • containerd 自己就是一个符合 CRI 标准的运行时(路径是 /run/containerd/containerd.sock)。

  • 你手动安装的 cri-dockerd 也是一个标准接口(路径是 /run/cri-dockerd.sock)。

当运行 kubeadm join 时,K8s 发现系统里有两个"接待员",它不知道该把容器发给谁,所以会报错:

found multiple CRI endpoints on the host...

3、明确"效忠"对象

通过加上 --cri-socket unix:///var/run/cri-dockerd.sock,你是在明确告诉 kubeadm"别管系统自带的那个 containerd ,请务必通过 cri-dockerd 这个翻译官来调用我的 Docker!"

强调:这个参数必须带上,否则 K8s 会默认去找 containerd,导致节点 NotReady。
风险:Token 默认有效期是 24 小时。如果读者看完教程隔天才操作,Token 会失效。

注意:如果 Token 过期,可以在 Master 节点运行 kubeadm token create --print-join-command 重新生成新的加入命令。

3 安装网络插件

  1. 首选推荐:Flannel(最适合你现在的环境)
  • 优点:极其简单。它只负责一件事情:给每个 Pod 分配 IP,并让它们能跨节点通信。它不需要复杂的配置,不依赖数据库,内存占用极低。

  • 缺点:功能单一,不支持网络策略(Network Policy,即不能限制谁能访问谁)。

  • 适用场景:开发测试、小型集群、K8s 初学者。

  1. 进阶推荐:Calico(生产环境的首选)
  • 优点 :性能极高,支持网络策略(防火墙规则)。它是目前工业界的标准,大厂生产环境几乎都用它。

  • 缺点:配置复杂,对内核有一定要求(虽然 RHEL 9 没问题),且比 Flannel 沉重。

  • 适用场景:正式生产环境、对安全性有高要求的集群。

在master节点安装Flannel插件

bash 复制代码
# 1. 下载官方配置
curl -O https://ghproxy.net/https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# 2. 修改配置以适配你的网段 (如果你 init 时用了 10.244.0.0/16,则无需修改)
kubectl apply -f kube-flannel.yml

监控Pod进度

bash 复制代码
# 监控 Pod 启动进度
watch kubectl get pods -n kube-system -w

当看到 kube-flannel-ds-xxx 变成 Running 后,再次执行:

bash 复制代码
kubectl get nodes

4 警告

bash 复制代码
[init] Using Kubernetes version: v1.34.5
[preflight] Running pre-flight checks
        [WARNING SystemVerification]: kernel release 5.14.0-611.5.1.el9_7.x86_64 is unsupported. Supported LTS versions from the 5.x series are 5.4, 5.10 and 5.15. Any 6.x version is also supported. For cgroups v2 support, the recommended version is 5.10 or newer

在 Linux 发行版(如 RHEL、Ubuntu、CentOS)上部署 K8s 时,只要 内核版本 > 5.10 ,且 cgroups v2 正常工作,这些 SystemVerification 警告请放心,这只是一个提示性警告,不影响功能,直接忽略即可继续后续操作。。

案例一:直接使用 YAML 部署(测试网络与基础调度)

我们部署一个简单的 Nginx。这个案例会测试:Master 能否下发任务、Node 能否自动拉取镜像、Flannel 网络是否通畅。

Master 上创建 nginx-demo.yaml

XML 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25.1
        ports:
        - containerPort: 80

执行部署

bash 复制代码
kubectl apply -f nginx-demo.yaml

验证状态

bash 复制代码
kubectl get pods -o wide

注意:这里拉取镜像失败了,需要手动拉取一下

docker pull nginx:1.25.1

案例二:测试识别本地已拉取的镜像

这个实验很有意义。我们要验证:如果我手动用 docker pull 拉了一个镜像,K8s 能不能直接用,而不再去网上下载?

在 node1 节点上手动拉取一个镜像 : (选一个稍微大一点的镜像,比如 redis:7.0

bash 复制代码
# 在 node1 执行
docker pull redis:7.0

在 Master 上编写 redis-local.yaml : 关键点在于 imagePullPolicy: IfNotPresent(如果本地有就不拉取)。

bash 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: redis-local-test
spec:
  nodeName: node1  # 强制调度到你刚才拉取镜像的 node1
  containers:
  - name: redis
    image: redis:7.0
    imagePullPolicy: IfNotPresent

Master 上部署并观察时间

bash 复制代码
kubectl apply -f redis-local.yaml

# 查看 Pod 事件
kubectl describe pod redis-local-test

​​​​​​如何判断它识别了本地镜像?kubectl describe 输出的最下方 Events 部分:

  • 成功识别 :你会看到一条信息写着:Container image "redis:7.0" already present on machine

  • 没识别 :它会显示 Pulling image "redis:7.0"...

删除部署的案例

要一次性删除多个文件,你需要为每个文件都加上 -f 标志:

bash 复制代码
kubectl delete -f nginx-demo.yaml -f redis-local.yaml
相关推荐
openFuyao1 天前
openFuyao亮相KubeCon Europe 2026 携InferNex套件深耕AI云原生推理领域
人工智能·云原生
yuzhuanhei1 天前
docker常用命令
运维·docker·容器
我叫张小白。1 天前
Dify系列(一):平台安装部署+界面操作
docker·ai·语言模型·大模型·dify·智能体
anarckk1 天前
docker volume 导入导出命令
运维·docker·容器
Brandon汐1 天前
从0开始搭建一主两节点k8s集群对接Ceph集群
ceph·容器·kubernetes
杨浦老苏1 天前
音乐和有声读物播放器AudioDock
docker·群晖·多媒体·音乐·有声读物
青春不流名1 天前
Portainer CE(社区版)部署 & 运行
云原生·eureka
gordon~91 天前
Windows 11 wsl 中安装的Ubuntu-24.04 中装docker
windows·ubuntu·docker
倔强的胖蚂蚁1 天前
openEuler 24.03 LTS SP3 motd标志区使用教程
运维·云原生