k8s-01 图 5 已提到 kube-proxy 与卷挂载在总览中的位置。本篇把 存储、Service、RBAC 三个「一碰到环境就千差万别」的主题,收敛成可迁移的模型:先理解对象与数据流,再查自己集群的 StorageClass、Ingress Controller、云厂商集成文档。
本系列与编号约定
- 步骤 1~5 与 kube-proxy 在概述中的角色见 k8s-01 图 5 与组件表。
- 上一篇:k8s-04。
系列导航
| 篇目 | 链接 |
|---|---|
| 上一篇 | pipeline-frameworks-k8s-04.工作负载与资源调度 |
| 概述 | pipeline-frameworks-k8s-01.框架概述 |
| 相关 | Argo Workflows 入门 |
1. 存储:Volume、PVC、PV 与 StorageClass
Pod 内声明的是 Volume(以及容器里的 volumeMount):挂到哪个路径、用哪种卷类型。需要持久化且跨 Pod 复用时,通常不直接写死云盘 ID,而是使用 PersistentVolumeClaim(PVC)——用户声明「我要多少容量、什么访问模式、哪类存储类」,由集群中的 PV 或 动态供给器 满足。
图 1 PVC 绑定 PV;Pod 通过卷引用 PVC
| 对象 | 谁创建 | 一句话 |
|---|---|---|
| PVC | 用户/流水线 | 「我要持久卷」的声明 |
| PV | 管理员或 动态供给 | 真实存储的一端(与后端实现绑定) |
| StorageClass | 集群管理员 | 定义动态供给时用哪个 provisioner、参数模板 |
访问模式(如 ReadWriteOnce / ReadWriteMany)能否实现,取决于底层存储,不是 K8s 单独保证。生信场景常见「大目录、多 Pod 只读共享」——需要 RWX 能力时,必须选支持共享的文件系统类存储(如 NFS、部分云文件存储),块存储往往只支持 RWO。
PVC Pending(未绑定)会导致 Pod 长期 Pending,见 k8s-04 图 3。
2. Service:稳定访问与 kube-proxy
Pod IP 会因重启而变化。Service 提供一组 稳定的虚拟 IP(ClusterIP)或 DNS 名,通过 label selector 关联到后端 Pod;Endpoints(或 EndpointSlice)对象维护当前 Pod IP 与端口列表。各节点上的 kube-proxy 把到 Service IP 的流量转发到实际 Pod(实现机制常见 iptables 或 IPVS)。
图 2 Service 与后端 Pod(示意)
| 类型 | 直觉 |
|---|---|
| ClusterIP | 仅集群内访问(默认) |
| NodePort | 在每个节点开放静态端口,可经节点 IP 访问 |
| LoadBalancer | 常由云厂商接入外部负载均衡(需环境支持) |
Ingress 则在七层(HTTP)按主机名、路径把流量路由到不同 Service,通常需要集群内安装 Ingress Controller(如 nginx、traefik 等)。具体注解、TLS、证书与各厂商实现强相关,本文只保留「Ingress 资源 + Controller 才生效」这一占位。
3. RBAC:谁能对 API 做什么
Kubernetes 用 RBAC(Role-Based Access Control)控制「哪个身份可以对哪些资源执行哪些动词」。
- Subject:用户、组,或 ServiceAccount(给 Pod 用的集群内身份)。
- Role / ClusterRole:允许
get、list、create等对 pods、jobs等资源的操作。 - RoleBinding / ClusterRoleBinding:把 Subject 绑到 Role 上;命名空间内常用 Role + RoleBinding,全集群用 ClusterRole + ClusterRoleBinding。
图 3 RBAC 绑定关系(示意)
流水线控制器(含 Argo)常在 ServiceAccount 下创建 Pod;若该 SA 没有创建 Job/Pod 的权限,你会在 Workflow 或 Pod 事件里看到 403 Forbidden。排障方向:检查 Workflow 使用的 serviceAccountName、对应 RoleBinding 与 Role。
4. 阅读策略:先模型,后环境
存储类名、Ingress 注解、IAM 与 IRSA 等强依赖厂商与集群版本。建议:
- 用本文三张图建立 PVC → PV / 动态供给、Service → Endpoints → kube-proxy、Subject → Binding → Role 的固定心智。
- 在目标集群执行
kubectl get storageclass、kubectl get ingressclass(或文档中的等价命令)了解可用能力。 - 再打开具体 YAML 样例与官方「安装 Ingress Controller / CSI 驱动」章节。