RHCE2026云原生路线EX188和EX288完整备考指南


第一部分 EX188 Red Hat Certified Specialist in Containers

模块1 环境准备、容器基础概念、工具栈

知识点清单

  1. OCI标准容器架构、容器vs虚拟机区别
  2. RHEL9容器工具组:podman、buildah、skopeo
  3. rootful(root运行) vs rootless(普通用户无特权运行容器)
  4. 安装容器工具软件包组
  5. 容器生命周期:创建、运行、暂停、停止、删除

参考命令

bash 复制代码
# 安装全套容器工具
dnf install -y container-tools

# 查看版本
podman --version
buildah --version
skopeo --version

# rootless环境验证
loginctl enable-labs student
# 重新登录生效

🚨易踩坑点

  1. rootless容器端口只能使用>1024端口,无法绑定80/443特权端口
  2. rootless容器systemd管理必须使用 systemctl --user
  3. 切换用户后需要重新登录,loginctl配置才生效

模块2 Podman 镜像管理、Registry仓库交互

知识点清单

  1. registry登录/登出,私有仓库认证
  2. search、pull、tag、push镜像
  3. 镜像删除、本地镜像列表
  4. skopeo远程镜像查看、跨仓库迁移镜像(无需完整拉取)
  5. 镜像分层原理、镜像缓存机制

参考命令

bash 复制代码
# 登录镜像仓库
podman login registry.redhat.io
podman logout registry.redhat.io

# 搜索、拉取镜像
podman search rhel9/httpd
podman pull registry.redhat.io/rhel9/httpd-24:latest

# 镜像打标签
podman tag registry.redhat.io/rhel9/httpd-24:latest quay.io/mylab/httpd:v1

# 推送镜像
podman push quay.io/mylab/httpd:v1

# 本地镜像操作
podman images
podman rmi quay.io/mylab/httpd:v1
podman rmi -f $(podman images -q)

# skopeo远程操作(核心考点)
skopeo inspect docker://registry.redhat.io/rhel9/httpd-24
skopeo copy docker://registry.redhat.io/rhel9/httpd-24 docker://quay.io/mylab/httpd:v1
skopeo delete docker://quay.io/mylab/httpd:v2

🚨易踩坑点

  1. push前必须正确tag镜像,仓库地址错误推送失败
  2. skopeo copy不需要本地下载镜像,适合镜像迁移
  3. 私有仓库防火墙、证书问题,考试环境默认信任内部registry

模块3 Podman容器生命周期管理、基础运行参数

知识点清单

  1. podman run 创建并启动容器
  2. 前台/后台运行 -d
  3. 端口映射 -p hostport:containerport
  4. 环境变量注入 -e
  5. 容器命名 --name
  6. 查看容器、停止、重启、删除
  7. 进入运行中容器、容器内执行命令
  8. 容器日志查看、容器资源统计

参考命令

bash 复制代码
# 后台启动容器,端口映射、注入环境变量
podman run -d --name webserver -p 8080:80 -e ENV=prod registry.redhat.io/rhel9/httpd-24

# 查看运行/所有容器
podman ps
podman ps -a

# 容器启停删除
podman stop webserver
podman start webserver
podman restart webserver
podman rm webserver
podman rm -f webserver
podman rm -a

# 进入容器
podman exec -it webserver /bin/bash
podman attach webserver

# 日志、资源监控
podman logs webserver
podman logs -f webserver
podman top webserver
podman stats
podman inspect webserver

🚨易踩坑点

  1. rootless容器不能绑定1024以下端口
  2. attach退出容易直接终止容器,优先使用exec
  3. inspect输出JSON,常需要过滤 .NetworkSettings.Ports

模块4 容器持久化存储:卷volume、主机目录挂载

知识点清单

  1. 容器临时文件系统:容器删除数据丢失
  2. 命名卷 volume 生命周期独立容器
  3. 主机目录绑定挂载 -v /hostpath:/contpath
  4. SELinux标签 😒 :Z (必考高频)
  5. 挂载权限、rootless宿主目录权限问题

参考命令

bash 复制代码
# 创建命名卷
podman volume create webvol
podman volume ls
podman volume inspect webvol

# 使用命名卷启动容器
podman run -d --name web -v webvol:/var/www/html registry.redhat.io/rhel9/httpd-24

# 主机目录挂载,SELinux共享标签:z 私有标签:Z
podman run -d --name web -v /home/student/webroot:/var/www/html:Z registry.redhat.io/rhel9/httpd-24

🚨易踩坑点

  1. SELinux enforcing模式,缺少:Z页面无法读写(每年大量考生失分)
  2. rootless挂载宿主目录,目录权限需要对普通用户开放
  3. 命名卷数据独立容器,删除容器不会删除volume

模块5 Containerfile 构建自定义镜像(EX188大题核心)

知识点清单

  1. Containerfile语法规范(原Dockerfile,红帽推荐名称Containerfile)
  2. FROM、RUN、COPY、ADD 区别
  3. WORKDIR、USER、EXPOSE、ENV、ARG
  4. CMD vs ENTRYPOINT 核心区别(高频考点)
  5. buildah bud / podman build 构建镜像
  6. 构建缓存机制,多阶段构建基础
Containerfile示例
dockerfile 复制代码
FROM registry.redhat.io/rhel9/httpd-24
ENV APP_ENV=production
WORKDIR /var/www/html
COPY index.html ./
EXPOSE 80
USER apache
CMD ["httpd","-D","FOREGROUND"]

参考构建命令

bash 复制代码
# podman构建
podman build -t myhttpd:v1 -f Containerfile .

# buildah原生构建
buildah bud -t myhttpd:v1 -f Containerfile .

# 传递构建参数
podman build --build-arg VERSION=v1 -t myhttpd:v1 .

🚨易踩坑点

  1. ADD支持自动解压压缩包;COPY仅复制文件,不要混用
  2. CMD可以被run命令参数覆盖;ENTRYPOINT不会直接覆盖
  3. USER指定非root运行,提升容器安全;不要全程使用root
  4. EXPOSE仅文档说明,不会自动开放端口,必须搭配-p端口映射

模块6 Pod管理(一组共享网络命名空间容器)

知识点清单

  1. Pod概念:一个pause容器 + 多个业务容器,共享网络栈
  2. podman pod create,在pod中启动容器
  3. Pod端口统一映射,容器之间localhost互通

参考命令

bash 复制代码
# 创建pod
podman pod create --name apppod -p 8080:80

# 将容器加入pod
podman run -d --pod apppod --name web registry.redhat.io/rhel9/httpd-24
podman run -d --pod apppod --name db registry.redhat.io/rhel9/mariadb-105

podman pod ps
podman pod stop apppod
podman pod rm apppod

🚨易踩坑点

Pod内容器共享网络,端口不能冲突;端口映射只需要定义在pod层面

模块7 容器持久运行:生成systemd单元文件

知识点清单

  1. podman generate systemd 自动生成service单元
  2. rootful(/etc/systemd/system)与rootless(~/.config/systemd/user)路径区分
  3. --new 参数:容器删除后重启服务自动重建容器(必考)

参考命令

bash 复制代码
# rootless 用户单元
mkdir -p ~/.config/systemd/user
podman generate systemd --name web --files --new
mv container-web.service ~/.config/systemd/user/

systemctl --user daemon-reload
systemctl --user enable --now container-web.service

# rootful全局单元
podman generate systemd --name web --files --new
mv container-web.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now container-web.service

🚨易踩坑点

  1. 忘记--new:容器手动删除后,systemd无法自动重建
  2. rootless必须携带--user,直接systemctl enable不会开机自启(需要loginctl linger)

模块8 Podman Compose(多容器应用栈)

知识点清单

  1. compose.yaml定义多容器依赖、网络、卷、环境变量
  2. podman-compose up / down 管理应用栈
yaml 复制代码
version: '3'
services:
  web:
    image: registry.redhat.io/rhel9/httpd-24
    ports:
      - "8080:80"
    volumes:
      - webvol:/var/www/html
volumes:
  webvol:
bash 复制代码
podman-compose up -d
podman-compose down

模块9 容器备份、导入导出

bash 复制代码
# 镜像导出导入
podman save -o httpd.tar registry.redhat.io/rhel9/httpd-24
podman load -i httpd.tar

# 容器提交为新镜像
podman commit web myweb:v2

模块10 EX188 SELinux、容器安全要点

  1. 非root用户运行容器 USER指令
  2. 卷挂载 :Z 标签
  3. 容器capabilities权限控制 --cap-drop --cap-add
  4. 镜像来源可信,避免latest浮动标签

模块11 EX188 排错基础命令汇总

bash 复制代码
podman inspect <容器名>
podman logs <容器名>
podman logs --previous <容器名>
podman events
ausearch -m avc -ts recent

第二部分 EX288 RHCE Cloud-native Application Development (OpenShift 4)

EX288 = RHCE云原生路线,使用oc客户端操作OpenShift集群,核心:应用构建、S2I、配置管理、路由、存储、GitOps基础、应用自愈、资源清单yaml

模块1 OpenShift 基础操作、项目Project管理

知识点清单

  1. oc客户端登录、切换上下文
  2. project(namespace)创建、切换、查看
  3. oc get/oc describe/oc explain 资源查询
  4. 资源清单 apply/create/edit/delete
  5. 命令补全配置

参考命令

bash 复制代码
# 登录集群
oc login https://api.cluster.example.com -u student -p redhat

# 项目操作
oc new-project demo
oc project demo
oc get projects

# 通用资源查询
oc get pods,svc,dc,bc,is
oc describe pod web-7f965
oc explain pod.spec.containers
oc api-resources

# yaml资源管理
oc apply -f app.yaml
oc create -f app.yaml
oc edit svc web
oc delete -f app.yaml
oc delete pod web-7f965

🚨易踩坑点

  1. create只能新建资源;apply支持创建+更新,考试优先使用apply
  2. oc explain用于考场查阅yaml字段,禁止死记所有字段

模块2 OpenShift 应用快速部署 new-app

知识点清单

  1. oc new-app 基于镜像部署应用
  2. oc new-app Git源码 + S2I自动构建
  3. 标签labels管理,资源注解annotate
bash 复制代码
# 镜像部署
oc new-app registry.redhat.io/rhel9/httpd-24 --name web

# Git源码S2I自动构建
oc new-app https://github.com/example/php-app --name phpapp

# 打标签
oc label pod web app=frontend
oc annotate svc web owner=student

模块3 BuildConfig(BC)、ImageStream(IS) S2I源码构建【EX288大题重中之重】

知识点清单

  1. Source-to-Image(S2I)原理:Builder镜像 + 源码自动构建容器镜像
  2. BuildConfig:构建配置,构建触发器(Git提交、镜像变更、手动触发)
  3. ImageStream:镜像流,跟踪镜像版本,触发应用滚动更新
  4. start-build手动启动构建,cancel-build取消构建
  5. 构建钩子Build Hooks(post-build脚本执行)

参考命令

bash 复制代码
# 手动触发构建
oc start-build phpapp
oc start-build phpapp --follow
oc cancel-build phpapp-1

# 查看构建日志
oc logs bc/phpapp

# 导入镜像流
oc import-image httpd:24 --from=registry.redhat.io/rhel9/httpd-24 --confirm

# 设置构建触发器
oc set triggers dc/phpapp --from-image=phpapp:latest

🚨易踩坑点

  1. ImageStream镜像更新后自动触发DeploymentConfig滚动更新,必须正确配置trigger
  2. S2I构建失败优先查看build pod日志

模块4 DeploymentConfig(DC) 应用部署、滚动更新、回滚

知识点清单

  1. DeploymentConfig:OpenShift原生部署控制器(K8s Deployment并行存在)
  2. 副本扩缩容 oc scale
  3. rollout历史、重启、暂停、回滚undo
  4. 就绪探针readinessProbe、存活探针livenessProbe(必考)
  5. 资源限制 requests / limits CPU内存

参考命令

bash 复制代码
# 扩缩容副本
oc scale dc web --replicas=3

# 部署版本管理
oc rollout history dc web
oc rollout latest dc web
oc rollout restart dc web
oc rollout undo dc web
oc rollout pause dc web
oc rollout resume dc web

# 设置探针
oc set probe dc web --readiness-get=http://:80/health
oc set probe dc web --liveness-get=http://:80/health

# 设置资源限制
oc set resources dc web --limits=cpu=200m,memory=256Mi --requests=cpu=100m,memory=128Mi

🚨易踩坑点

  1. 就绪探针失败service不会将pod加入endpoint,访问报错503
  2. rollout undo回滚至上一个版本,支持指定revision

模块5 Service、Route 网络访问体系

知识点清单

  1. Service:内部服务发现,selector匹配pod标签
  2. Service类型ClusterIP(默认)
  3. Route:OpenShift独有,对外HTTP/HTTPS入口,路由策略
  4. Route三种策略:Edge、Passthrough、Reencrypt TLS

参考命令

bash 复制代码
# 创建service(暴露dc端口)
oc expose dc web --port=80 --name web-svc

# 创建route
oc expose svc web-svc --name web-route

# 创建TLS Edge路由
oc create route edge web-route --service=web-svc --cert=tls.crt --key=tls.key

# 查看路由访问地址
oc get route web-route

🚨易踩坑点

Service selector标签与pod标签不一致 → Endpoints为空,无法访问(最高频故障)

模块6 ConfigMap & Secret 配置注入(必考)

知识点清单

  1. ConfigMap:普通文本配置、环境变量、挂载配置文件
  2. Secret:敏感信息,通用secret、docker仓库拉取密钥、TLS证书secret
  3. 将配置注入Pod:环境变量 / 文件挂载两种方式

参考命令

bash 复制代码
# 创建ConfigMap
oc create configmap app-cfg --from-literal=env=prod --from-file=config.ini

# 创建通用Secret
oc create secret generic app-secret --from-literal=dbpass=Super@123

# 创建镜像拉取secret
oc create secret docker-registry quay-secret --docker-server=quay.io --docker-username=user --docker-password=pass

# 注入环境变量到DC
oc set env dc web --from=configmap/app-cfg
oc set env dc web --from=secret/app-secret

# 挂载配置文件
oc set volumes dc web --add --name=cfg-volume --mount-path=/config --configmap-name=app-cfg

🚨易踩坑点

ConfigMap/Secret修改后不会自动更新运行中Pod,需要rollout restart触发重建

模块7 OpenShift 持久化存储 PV/PVC

知识点清单

  1. PersistentVolume(PV)集群存储资源
  2. PersistentVolumeClaim(PVC)应用存储申请
  3. accessModes访问模式(ReadWriteOnce/RWX)
  4. 将PVC挂载至DeploymentConfig
bash 复制代码
# 创建PVC yaml示例
cat > pvc-web.yaml <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: web-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
EOF
oc apply -f pvc-web.yaml

# 挂载PVC至应用
oc set volumes dc web --add --name=data --mount-path=/var/www/html --persistent-volume-claim=web-pvc

🚨易踩坑点

PVC状态Pending:没有匹配容量、访问模式的可用PV

模块8 Pod远程调试:rsh、exec、port-forward、rsync

bash 复制代码
# 进入pod终端
oc rsh web-7f965
oc exec -it web-7f965 -- /bin/bash

# 本地端口转发
oc port-forward pod/web-7f965 8080:80

# 本地与pod同步文件
oc rsync ./html web-7f965:/var/www/html

模块9 日志、事件、监控基础

bash 复制代码
oc logs web-7f965
oc logs dc/web -f
oc logs web-7f965 --previous
oc get events --sort-by=.lastTimestamp
oc top pods
oc top nodes

模块10 调度策略:标签label、污点Taint、容忍Toleration

bash 复制代码
# 节点打标签
oc label node worker-0 app=workload
# DC节点亲和调度
oc patch dc web -p '{"spec":{"template":{"spec":{"nodeSelector":{"app":"workload"}}}}}'

# 污点容忍
oc adm taint node worker-1 key=value:NoSchedule
oc patch dc web -p '{"spec":{"template":{"spec":{"tolerations":[{"key":"key","value":"value","effect":"NoSchedule"}]}}}}'

模块11 自动扩缩容 HPA

bash 复制代码
oc autoscale dc web --min=2 --max=10 --cpu-percent=70
oc get hpa

模块12 OpenShift Template模板

知识点清单

  1. OpenShift Template模板,参数化资源定义
  2. 使用模板批量创建整套应用资源(Service+DC+Route+PVC)
bash 复制代码
oc create -f app-template.yaml
oc new-app template/app-template --param APP_NAME=web

模块13 基础GitOps ArgoCD(EX288新增考点)

  1. 安装OpenShift GitOps Operator
  2. 创建ArgoCD Application,关联Git仓库清单
  3. 同步策略:自动同步/手动同步、自愈
  4. 检测资源漂移

模块14 用户权限基础(oc adm)

bash 复制代码
oc adm policy add-role-to-user edit student -n demo
oc adm policy add-scc-to-user anyuid -z default

模块15 常用资源清单YAML核心字段记忆

pod、service、route、dc、bc、is、configmap、secret、pvc、hpa


第三部分 EX188 Podman/Buildah/Skopeo 标准化故障排错流程

3.1 容器无法启动通用排查步骤

  1. podman ps -a 查看容器状态
  2. podman logs <容器名> 查看启动日志,必要加--previous
  3. podman inspect 检查挂载参数、环境变量、启动命令
  4. 检查端口冲突:ss -ntulnp
  5. SELinux拦截排查 ausearch -m avc -ts recent
  6. 卷挂载检查是否缺少 :Z 标签
  7. rootless场景确认目录权限、端口号>1024

3.2 Containerfile构建失败

  1. 观察build输出报错行
  2. 确认基础镜像名称、registry连通性
  3. COPY/ADD源文件路径正确
  4. USER切换用户后文件读写权限

3.3 systemd容器服务无法开机自启

  1. rootless确认loginctl enable-linger
  2. 确认service文件存在--new参数
  3. systemctl --user status container-xxx

3.4 镜像push/pull失败

  1. podman login认证是否有效
  2. 镜像tag仓库地址正确
  3. 网络连通registry、防火墙放行443

第四部分 EX288 OpenShift oc 集群应用标准化故障排错流程

4.1 Pod 状态 Pending

  1. oc describe pod xxx 查看Events
  2. 资源不足CPU/内存、节点亲和/污点不匹配
  3. PVC未绑定、镜像拉取失败ImagePullBackOff
  4. 镜像密钥secret缺失

4.2 Pod CrashLoopBackOff(反复启动退出)

  1. oc logs podname --previous 查看崩溃前日志
  2. 检查启动命令、配置文件、环境变量缺失
  3. OOM内存溢出、权限不足
  4. 探针配置错误

4.3 Service无法访问,页面503

  1. oc get endpoints svcname 检查端点列表是否为空
  2. 核对Service selector 和 Pod labels 是否一致
  3. 检查readinessProbe就绪探针是否成功
  4. oc exec进入pod内部验证应用端口正常监听

4.4 Route域名无法访问

  1. Route关联service名称正确
  2. 检查TLS证书配置(Edge/Passthrough模式匹配应用)
  3. DNS解析指向集群路由入口IP

4.5 S2I Build构建失败

  1. oc logs bc/appname 查看构建pod日志
  2. Git仓库地址、访问密钥
  3. Builder镜像可用、源码目录结构符合S2I规范

4.6 PVC Pending无法绑定PV

  1. oc describe pvc xxx 事件
  2. 请求storage容量、accessModes没有匹配PV
  3. StorageClass名称不匹配

4.7 ConfigMap/Secret更新不生效

根本原因:静态挂载配置不会热更新,执行

bash 复制代码
oc rollout restart dc appname

第五部分 RHCE云原生路线 EX188+EX288 考场全局避坑总则

  1. EX188区分rootful / rootless容器,rootless禁止绑定低于1024端口
  2. Podman主机目录挂载SELinux :Z 私有标签 是高频失分点
  3. Containerfile区分CMD / ENTRYPOINT,ADD/COPY不要混用
  4. 要求容器开机自启必须使用 podman generate systemd --new
  5. EX288优先使用oc命令或yaml清单完成任务,禁止登录集群节点操作podman
  6. Service访问异常第一时间检查Endpoints,标签匹配问题占故障70%
  7. DC部署修改ConfigMap/Secret后,必须rollout restart Pod才能加载新配置
  8. S2I构建务必使用 oc start-build --follow 观察构建过程
  9. 所有YAML使用空格缩进,禁止Tab;书写完成可先oc apply验证语法
  10. 任务完成尽可能重建Pod/删除重建资源验证配置持久生效
  11. 善用 oc explain、man podman、podman --help 官方文档,考场无外网
相关推荐
张洛闻Eren1 小时前
MySQL 管理复制拓扑【MySQL第四课】
linux·运维·数据库·mysql
西安景驰电子1 小时前
《PTP精确时间协议系列》第二篇:工程部署、调试与性能优化
运维·服务器·网络·数据库·windows·性能优化
Aision_2 小时前
代码安全学习手记(二):SCA 软件成分分析原理与 OWASP Dependency-Check 集成实战
运维·人工智能·学习·安全·web安全·网络安全
yinshuzhineng2 小时前
如何提升生产线自动化水平,降低人工成本?
运维·人工智能·自动化·制造
码云骑士2 小时前
110-多模型热切换-API网关-LiteLLM代理-负载均衡故障转移
运维·python·负载均衡
虹科网络安全2 小时前
KnowBe4 SAT 是什么?安全意识培训平台功能与应用详解
网络
wechatbot8883 小时前
极客互动企业微信 SCRM 私域运营实战效果全景
大数据·汇编·微信·自动化·企业微信·rpa
艺杯羹3 小时前
古典密码学攻防演进全景:从凯撒移位、频率分析到一次一密与恩尼格玛机破译
网络·人工智能·安全·网络安全·密码学·密码安全