【基于 RHEL 9.3 的 K8s + GitLab 全自动化部署环境搭建第一篇】

基于 RHEL 9.3 的 K8s + GitLab 全自动化部署环境搭建

包含 Helm、Maven、Docker-Compose 等核心组件配置,还原真实生产环境的前端容器化发布流程

一、引言:从手动部署的**"** 痛点 " DevOps 自动化的 " 破局 "

在中小型企业及个人开发者的项目部署场景中,传统手动部署模式几乎是大多数人的"必经之路",但随着项目迭代速度加快、服务规模扩大,这种模式的弊端会逐渐暴露,成为制约开发效率、影响服务稳定性的"绊脚石"。

相信很多运维和开发同学都有过这样的经历:每次代码迭代后,需要手动登录服务器,执行git pull拉取最新代码,再手动打包、编译、部署,全程操作繁琐且重复;如果涉及多环境(开发、测试、生产)部署,还要重复相同的操作流程,不仅耗时耗力,更易因人为操作失误(如命令输错、配置遗漏)导致部署失败,甚至影响线上服务可用性。更关键的是,手动部署无法实现"代码提交即部署"的闭环,开发、测试、部署环节脱节,迭代周期被拉长,难以适应快速交付的业务需求。

基于此,DevOps自动化部署成为解决上述痛点的核心方案------而GitLab CI/CD + Kubernetes K8s **)**的组合,凭借轻量级部署、高可用性、可扩展性强的优势,成为中小型团队的首选架构。它无需复杂的第三方工具集成,依托GitLab自带的CI/CD流水线功能,结合K8s的容器编排能力,可实现从代码提交、自动构建、镜像推送,到容器部署、服务运维的全流程自动化,彻底解放人力,提升部署效率和服务稳定性。

**二、方案核心优势:**GitLab CI/CD + K8s 为何成为首选?

相较于Jenkins + K8s、Jenkins + Docker等传统自动化架构,GitLab CI/CD + K8s的组合,在中小型团队场景中具备不可替代的优势,尤其适合追求"轻量部署、快速落地、低维护成本"的需求:

  • 轻量无依赖,部署成本低:GitLab CI/CD是GitLab自带的功能,无需额外部署Jenkins等第三方CI/CD工具,减少了工具间的集成复杂度和维护成本;K8s可通过kubeadm快速部署,支持轻量级集群配置,无需复杂的硬件资源支撑,个人开发者或小型团队也能轻松搭建。
  • 全流程闭环,自动化程度高:从开发者提交代码到GitLab仓库,触发CI/CD流水线,自动完成代码检查、编译、打包、构建镜像、推送镜像至仓库,再到K8s集群拉取镜像、部署服务,全程无需人工干预,实现"代码提交即部署",大幅缩短迭代周期。
  • 高可用、可扩展:K8s具备强大的容器编排和自愈能力,可实现服务的自动扩缩容、故障自愈,确保服务稳定运行;GitLab CI/CD支持多Runner并行执行,可根据项目规模动态扩展Runner节点,应对多项目、多流水线并行部署的需求。
  • 易用性强,学习成本低:GitLab CI/CD通过.gitlab-ci.yml文件配置流水线,语法简洁易懂,开发者可快速上手;K8s的核心操作的命令简洁,结合可视化工具(如Dashboard),可降低运维难度,即使是非专业运维人员也能完成基础部署和维护。

**三、架构拓扑图:**6 台主机交互逻辑详解

本次架构搭建共使用6台主机,涵盖"代码托管-流水线执行-镜像管理-容器部署"全流程,各主机各司其职、协同工作,形成完整的DevOps自动化闭环。以下是架构拓扑逻辑(可直接插入手绘架构图或节点规划图,建议标注清楚各主机IP和核心角色):

核心交互流程:Developer(开发者)→ GitLab Server(代码托管)→ GitLab Runner(流水线执行)→ Harbor(镜像仓库)→ K8s Cluster(容器部署)

具体交互逻辑说明:

  1. 开发者通过本地Git工具,将代码提交至GitLab Server(代码托管服务器),完成代码版本管理;
  2. 代码提交后,触发GitLab CI/CD流水线,GitLab Server向GitLab Runner发送执行指令;
  3. GitLab Runner接收指令后,拉取GitLab仓库中的代码,执行流水线任务(代码检查、编译、打包、构建Docker镜像);
  4. 镜像构建完成后,GitLab Runner将镜像推送至Harbor私有镜像仓库,进行镜像存储和版本管理;
  5. 镜像推送完成后,GitLab Runner通过kubectl命令与K8s Cluster交互,触发K8s集群从Harbor拉取对应镜像,完成容器部署、服务启动;
  6. K8s Cluster(Master节点+Node节点)负责容器的编排、调度、扩缩容和故障自愈,确保服务稳定运行。:

四、环境规格清单

以下是本次架构搭建的6台主机详细规格清单,包含主机名、IP地址、核心角色、部署软件及版本、资源规划,均经过实际测试,可直接复用(适配中小型团队需求,资源可根据自身服务器配置灵活调整):

|---------------|-----------------|----------------|-------------------------------------------------|------------|------------------------------------|
| 组件/主机名 | IP地址 | 角色 | 核心软件/版本 | 资源规划 | 备注 |
| Harbor | 192.168.223.200 | 私有镜像仓库 | Docker 24.0.7、Harbor v2.10.2 | 2C2G(最低配置) | 存储项目Docker镜像,支持镜像版本管理、权限控制 |
| K8s-Master | 192.168.223.20 | K8s控制平面 | kubeadm 1.28.0、kubelet 1.28.0、cri-dockerd 0.3.9 | 2C4G(推荐配置) | 负责K8s集群的调度、管理,核心组件部署节点 |
| K8s-Node1 | 192.168.223.21 | K8s计算节点 | kubelet 1.28.0、Docker 24.0.7 | 2C2G(最低配置) | 运行容器实例,承担服务运行负载 |
| K8s-Node2 | 192.168.223.22 | K8s计算节点 | kubelet 1.28.0、Docker 24.0.7 | 2C2G(最低配置) | 与Node1协同,实现负载均衡和故障冗余 |
| GitLab | 192.168.223.23 | 代码托管+CI/CD控制中心 | gitlab-ce:17.3.1(社区版) | 6C6G(推荐配置) | 存储代码、管理CI/CD流水线,核心控制节点,资源需充足 |
| GitLab-Runner | 192.168.223.24 | CI/CD流水线执行器 | gitlab-runner 16.3.0、kubectl 1.28.0 | 6C4G(推荐配置) | 执行流水线任务(构建、推送镜像、部署),需与GitLab、K8s通信 |

补充说明

  • 资源规划为"推荐配置",若服务器资源紧张,可适当降低GitLab和GitLab-Runner的资源,但会影响流水线执行速度;
  • 所有主机均采用rhel-9.3操作系统,确保软件安装和运行环境稳定;
  • Docker、K8s、Harbor等软件版本均经过兼容性测试,避免版本不兼容导致的部署失败,建议严格按照清单版本部署。

五、前置环境准备(全主机必做,落地关键)

架构落地的前提是完成所有主机的基础环境初始化,确保各组件部署无依赖冲突、通信正常。以下是所有6台主机(Harbor、K8s-Master、K8s-Node1/2、GitLab、GitLab-Runner)均需执行的基础配置步骤,每一步均经过实测,可直接复制命令执行,重点标注易错点和注意事项。

5.1****关闭防火墙和 SELinux (核心前置,避免端口拦截)

K8s、GitLab、Harbor等组件需占用多个端口通信,防火墙和SELinux会拦截通信请求,导致部署失败,所有服务器必须执行以下命令关闭:

复制代码
# 关闭防火墙(临时+永久)
systemctl stop firewalld
systemctl disable firewalld

# 关闭SELinux(临时+永久)
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

验证:执行getenforce,输出Permissive即为关闭成功;执行systemctl status firewalld,输出inactive即为关闭成功。

5.2 配置本地 YUM 源(解决软件安装依赖问题)

CentOS默认YUM源为国外源,下载速度慢且易失败,建议挂载系统光盘作为本地YUM源,同时安装常用运维工具,所有服务器执行:

复制代码
# 挂载系统光盘(若光盘未识别,可替换为/dev/cdrom)
mount /dev/sr0 /mnt

# 创建本地YUM源配置文件
cat > /etc/yum.repos.d/local.repo << 'EOF'
[base01]
name=base
baseurl=/mnt/BaseOS
enable=1
gpgcheck=0
[base02]
name=app
baseurl=/mnt/AppStream
enable=1
gpgcheck=0
EOF

# 安装常用运维工具(后续部署必备)
yum install vim net-tools tree zip git -y

注意:挂载后若重启服务器,需重新执行mount /dev/sr0 /mnt,若需永久挂载,可将挂载命令添加至/etc/fstab文件。

5.3****配置主机名与 hosts 映射(确保组件间通信)

为各主机配置规范主机名,并添加hosts映射,避免因IP地址记忆繁琐、解析失败导致的通信问题,所有服务器执行:

复制代码
# 添加hosts映射(无需修改,直接执行)
cat >> /etc/hosts << 'EOF'
192.168.223.20 k8s-master master
192.168.223.21 k8s-node1 node1
192.168.223.22 k8s-node2 node2
192.168.223.200 harbor harbor-server
192.168.223.23 gitlab gitlab-server
192.168.223.24 gitlab-runner runner
EOF

补充:可根据各主机角色手动修改主机名(如Harbor主机执行hostnamectl set-hostname harbor),修改后重启生效,不修改也不影响部署,但建议规范命名,便于后续运维。

5.4****关闭 swap 与配置内核参数( K8s 部署必备)

K8s要求关闭swap分区,否则会导致kubelet启动失败;同时需配置必要的内核参数,确保CRI(容器运行时接口)通信正常,所有服务器执行:

复制代码
# 关闭swap(临时+永久)
sed '/swap/s/^/#/g' -i /etc/fstab
swapoff -a
swapon -s  # 无输出即为关闭成功

# 添加K8s所需内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

# 生效内核参数
sysctl --system

# 加载必要模块(确保网络正常)
modprobe br_netfilter
modprobe vxlan
echo "br_netfilter" >> /etc/modules-load.d/k8s.conf
echo "vxlan" >> /etc/modules-load.d/k8s.conf
lsmod | grep br_netfilter  # 有输出即为加载成功

易错点:若执行lsmod | grep br_netfilter无输出,可重新执行modprobe br_netfilter,并检查内核版本是否兼容(CentOS 8默认内核可直接使用)。

5.5****部署 Docker (所有组件依赖,统一环境)

Harbor、GitLab、K8s均依赖Docker运行,所有服务器需安装相同版本的Docker,并配置镜像加速器(解决国外镜像拉取慢、失败问题),步骤如下:

复制代码
# 安装Docker依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加Docker阿里云镜像源(注意:原阿里云源可能报错,可直接执行后续加速器配置)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装Docker(默认安装最新兼容版本,也可指定版本)
yum install -y docker-ce

# 启动Docker(临时+永久)
systemctl enable docker
systemctl start docker

# 配置Docker镜像加速器(核心!解决拉取镜像超时问题)
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",  # 推荐优先使用,稳定可用
    "https://p1umdw8d.mirror.aliyuncs.com",
    "https://docker.xuanyuan.cn",
    "https://registry.docker-cn.com",
    "https://mirror.ccs.tencentyun.com"
  ],
  "insecure-registries": ["192.168.223.200"]  # 允许访问本地Harbor私有仓库
}
EOF

# 重启Docker,使加速器生效
systemctl daemon-reload
systemctl restart docker

# 验证加速器是否生效
docker info | grep -A 10 "Registry Mirrors"

注意事项:

  • 若添加阿里云Docker源时报错"当前不支持该文件类型",可忽略该步骤,直接配置daemon.json中的加速器,不影响Docker安装和使用;
  • 验证时若能看到配置的镜像加速器地址,即为生效;
  • 所有主机Docker版本需统一,避免后续镜像构建、推送出现兼容性问题。

六、核心组件部署(实操完整版:Harbor + K8s 集群)

前置环境准备完成后,我们开始分节点部署核心组件:Harbor 私有镜像仓库 + K8s 1.35.3 集群。所有命令均经过实测,无坑、无报错、可直接复制执行。

6.1 Harbor(192.168.223.200):私有镜像仓库部署

Harbor 用于存储 Docker 镜像(如 GitLab CI/CD 构建的项目镜像、K8s 集群所需的基础镜像),部署前需确认:

6.1.1 安装 docker-compose

复制代码
# 下载 docker-compose 2.2.3(稳定版)
wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64

# 移动到系统命令目录
mv docker-compose-linux-x86_64 /usr/bin/docker-compose

# 添加执行权限
chmod +x /usr/bin/docker-compose

# 查看版本(验证成功)
docker-compose version

执行结果:

复制代码
Docker Compose version v2.2.3

6.1.2 下载并安装 Harbor 2.10.2

复制代码
# 下载离线安装包(国内环境推荐离线包)
wget https://github.com/goharbor/harbor/releases/download/v2.10.2/harbor-offline-installer-v2.10.2.tgz

# 解压
tar -zxf harbor-offline-installer-v2.10.2.tgz
cd harbor

6.1.3 修改 Harbor 配置文件

复制代码
# 复制模板配置
cp harbor.yml.tmpl harbor.yml

# 编辑配置
vim harbor.yml

harbor.yml修改的内容:

复制代码
# 第 5 行 修改为本机 IP
hostname: 192.168.223.200

# http 端口保持 80
http:
  port: 80

# 全部注释 https(实验环境不开 HTTPS)
# https:
#   port: 443
#   certificate: /your/certificate/path
#   private_key: /your/private/key/path

6.1.4 启动安装 & 启动 Harbor

复制代码
# 运行安装脚本
./install.sh

# 后台启动 Harbor
docker-compose up -d

# 查看状态(全部为 Up 表示成功)
docker-compose ps

6.1.5 Harbor 页面初始化配置

第一步:访问 Harbor

  • 地址:http://192.168.223.200
  • 账号:admin
  • 密码:Harbor12345

第二步:创建 K8s 专用项目(必须做)

  1. 点击 Projects
  2. 点击 New Project
  3. 项目名称:k8s
  4. 访问级别:Public
  5. 点击 OK

6.2 K8s 集群(192.168.223.20/21/22):容器编排集群部署

K8s 集群由 1 台 Master 节点和 2 台 Node 节点组成,部署前需确认:

  • Master 节点资源需满足 "2C4G 及以上",否则 kubelet 启动会失败;
  • 所有节点已安装 cri-dockerd(K8s 与 Docker 的通信桥梁),版本需与 K8s 版本兼容;
  • 配置 K8s YUM 源(阿里云源),地址:https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/rpm/,确保能正常安装 kubeadm、kubelet、kubectl;
  • 提前准备 K8s 集群所需基础镜像(如 pause、etcd、coredns 等),可通过阿里云镜像仓库拉取,再推送至本地 Harbor,避免部署时拉取超时。

6.2.1 安装 cri-dockerd(所有 Master + Node 执行)

复制代码
# 安装依赖 + cri-dockerd
rpm -ivh libcgroup-0.41-19.el8.x86_64.rpm
rpm -ivh cri-dockerd-0.3.14-3.el8.x86_64.rpm

修改 cri-docker 服务文件:

复制代码
vim /lib/systemd/system/cri-docker.service

修改 ExecStart 行:

复制代码
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=192.168.223.200/k8s/pause:3.10.1

# 重新加载并启动
systemctl daemon-reload
systemctl enable --now cri-docker

# 查看状态
systemctl status cri-docker

# 验证 sock 文件存在
ll /var/run/cri-dockerd.sock

所有节点登录 Harbor:

复制代码
docker login 192.168.223.200 -u admin -p Harbor12345

6.2.2 配置 K8s YUM 源(所有节点)

复制代码
vim /etc/yum.repos.d/kubernetes.repo

写入:

复制代码
[kubernetes]
name = kubernetes
baseurl = https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/rpm/
gpgcheck = 0

6.2.3 安装 K8s 组件

Master 节点执行:
复制代码
dnf install kubelet kubeadm kubectl -y
systemctl enable --now kubelet
Node 节点执行:
复制代码
dnf install kubelet kubeadm -y
systemctl enable --now kubelet
所有节点配置 cri-dockerd 套接字:
复制代码
cat > /etc/sysconfig/kubelet << EOF
KUBELET_EXTRA_ARGS="--container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --runtime-request-timeout=15m"
EOF

systemctl daemon-reload
systemctl restart kubelet
Master 节点命令补全:
复制代码
echo "source <(kubectl completion bash)" >> ~/.bashrc
echo "source <(kubeadm completion bash)" >> ~/.bashrc
source ~/.bashrc

6.2.4 拉取 K8s 镜像并推送到 Harbor(仅 Master)

复制代码
# 从阿里云拉取镜像
kubeadm config images pull \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.35.3 \
--cri-socket=unix:///var/run/cri-dockerd.sock

批量打标签并推送到 Harbor:

复制代码
docker images --format "{{.Repository}}:{{.Tag}}" | awk -F "/" '/google_containers/{system("docker tag "$0" 192.168.223.200/k8s/"$3)}'

docker images --format "{{.Repository}}:{{.Tag}}" | awk -F "/" '/192.168.223.200/{system("docker push "$0)}'

6.2.5 Master 节点初始化 K8s 集群

复制代码
kubeadm init --pod-network-cidr=10.244.0.0/16 \
--image-repository 192.168.223.200/k8s \
--kubernetes-version v1.35.3 \
--cri-socket=unix:///var/run/cri-dockerd.sock

执行成功后执行:

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

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

6.2.6 Node 节点加入集群(在 Node1/Node2 执行)

复制代码
kubeadm join 192.168.223.20:6443 --token 9uq9ic.5kmnqvnu2ig9k3jo \
--discovery-token-ca-cert-hash sha256:8e522b1b2fe2fb8c00fc04b1f6e28ae574d44e18546212e6c23842b5d8b0e2e9 \
--cri-socket unix:///var/run/cri-dockerd.sock

忘记加入命令?执行:

复制代码
kubeadm token create --print-join-command

初始化失败?重置:

复制代码
kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock

6.2.7 查看集群状态(Master)

复制代码
kubectl get nodes

结果:

复制代码
NAME     STATUS     ROLES           AGE     VERSION
master   NotReady   control-plane   34m     v1.35.3
node1    NotReady   <none>          3m32s   v1.35.3
node2    NotReady   <none>          3m56s   v1.35.3

七、安装 K8s 网络插件 Flannel(节点变为 Ready)

当前 K8s 集群节点状态为NotReady,是因为缺少网络插件实现集群内部通信。我们使用 Flannel v0.28.1 作为网络插件,并将镜像上传至本地 Harbor 仓库,确保内网环境可正常运行。

7.1 加载离线 Flannel 镜像(仅 Master 执行)

复制代码
# 查看离线镜像文件
ls

# 加载 Flannel 核心镜像
docker load -i 192.168.223.200-flannel-io-flannel-v0.28.1.tar

# 加载 Flannel CNI 插件镜像
docker load -i 192.168.223.200-flannel-io-flannel-cni-plugin-v1.9.0-flannel1.tar

执行结果:

复制代码
Loaded image: 192.168.223.200/flannel-io/flannel:v0.28.1
Loaded image: 192.168.223.200/flannel-io/flannel-cni-plugin:v1.9.0-flannel1

7.2 给镜像打标签(适配 Harbor 地址)

复制代码
docker tag 192.168.223.200/flannel-io/flannel:v0.28.1   192.168.223.200/flannel-io/flannel:v0.28.1
docker tag 192.168.223.200/flannel-io/flannel-cni-plugin:v1.9.0-flannel1 192.168.223.200/flannel-io/flannel-cni-plugin:v1.9.0-flannel1

7.3 推送 Flannel 镜像到 Harbor 私有仓库

复制代码
docker push 192.168.223.200/flannel-io/flannel:v0.28.1
docker push 192.168.223.200/flannel-io/flannel-cni-plugin:v1.9.0-flannel1

执行结果:

复制代码
v0.28.1: digest: sha256:xxxx size: 522
v1.9.0-flannel1: digest: sha256:xxxx size: 522

7.4 下载并修改 kube-flannel.yml 配置文件

复制代码
# 下载官方 Flannel YAML 文件
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

关键修改:替换镜像地址将文件中默认的镜像:

复制代码
flannel-io/flannel:v0.28.1
flannel-io/flannel-cni-plugin:v1.9.0-flannel1

替换为本地 Harbor 地址:

复制代码
192.168.223.200/flannel-io/flannel:v0.28.1
192.168.223.200/flannel-io/flannel-cni-plugin:v1.9.0-flannel1

7.5 应用 Flannel 网络插件

复制代码
kubectl apply -f kube-flannel.yml

执行结果:

复制代码
namespace/kube-flannel created
serviceaccount/flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

7.6 验证集群状态(Master 节点)

复制代码
# 查看节点状态
kubectl get nodes

执行结果:

复制代码
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   56m   v1.35.3
node1    Ready    <none>          25m   v1.35.3
node2    Ready    <none>          26m   v1.35.3

# 查看 Flannel 运行状态
kubectl get pod -n kube-flannel

执行结果:

复制代码
NAME                    READY   STATUS    RESTARTS   AGE
kube-flannel-ds-4j74t   1/1     Running   0          23s
kube-flannel-ds-lcn9g   1/1     Running   0          23s
kube-flannel-ds-mnt22   1/1     Running   0          23s

八、本阶段总结

到这里,我们已经完成了整个架构的基础环境 + 核心组件搭建:

✅ 所有主机基础环境初始化完成(防火墙 / SELinux 关闭、Docker 配置完成)

✅ Harbor 私有镜像仓库部署完成(支持 K8s 镜像存储)

✅ K8s 1.35.3 集群搭建完成(1 Master + 2 Node)

✅ Flannel 网络插件部署完成,所有节点状态变为Ready

接下来,我们将进入整个方案的核心环节:搭建 CI/CD 环境,完成从代码提交到自动部署的全流程闭环。

相关推荐
曾庆睿2 小时前
【基于 RHEL 9.3 的 K8s + GitLab 全自动化部署环境搭建第二篇】
kubernetes·自动化·gitlab
AC赳赳老秦3 小时前
全链路自动化巡检:用 OpenClaw 实现服务器 - 应用 - 数据库全链路巡检,自动生成报告与整改建议
服务器·数据库·人工智能·深度学习·自动化·deepseek·openclaw
黄昏回响4 小时前
信息系统基础知识(六):办公自动化系统(OAS)详解
计算机网络·程序人生·面试·自动化·改行学it
半导体守望者5 小时前
MKS elite 300 600 750W RF Plasma Generator 射频电源 OPERATIONMANUAL
经验分享·笔记·机器人·自动化·制造
晚风烟火5 小时前
【无标题】
自动化·rpa
Agent手记5 小时前
空运智能装箱规划自动化、落地方法与合规适配:2026年Agent矩阵驱动的技术演进与实操指引
运维·人工智能·ai·矩阵·自动化
脑子加油站5 小时前
K8S-RBAC认证中心
云原生·容器·kubernetes·rbac认证
Cat_Rocky5 小时前
K8s RBAC认证 简单讲
java·docker·kubernetes
半导体守望者5 小时前
MKS ACG-3 XL RF Power Generator OPERATION MANUAL RF 射频电源
学习·机器人·自动化·制造·模块测试