以下是 Kubernetes 中常见核心资源的对比表格,帮助理解它们的用途和差异:
1. 核心工作负载资源对比
资源类型 | 主要功能 | 副本管理 | 适用场景 | 关键字段/特性 |
---|
Pod | 最小部署单元,封装容器 | ❌ | 单容器/多容器协作 | containers , volumes |
Deployment | 管理 Pod 副本和滚动更新 | ✅ | 无状态应用(如 Web 服务) | replicas , strategy |
ReplicaSet | 确保指定数量的 Pod 副本运行 | ✅ | 通常由 Deployment 自动管理 | replicas , selector |
StatefulSet | 管理有状态应用的 Pod(唯一标识和顺序) | ✅ | 数据库(如 MySQL、Redis) | serviceName , volumeClaimTemplates |
DaemonSet | 每个节点运行一个 Pod。也可以通过 Label、Selector 实现在指定节点上运行 Pod。 | ❌ | 节点级服务(如日志采集) | nodeSelector , tolerations |
Job | 运行一次性任务 | ❌ | 批处理任务 | completions , backoffLimit |
CronJob | 定时运行 Job | ❌ | 定时任务(如每日备份) | schedule , startingDeadlineSeconds |
2. 网络资源对比
资源类型 | 主要功能 | 适用场景 | 关键字段/特性 |
---|
Service | 暴露 Pod 的稳定 IP 和端口 | 内部服务访问 | selector , type (ClusterIP, NodePort, LoadBalancer) |
Ingress | 提供 HTTP/HTTPS 路由规则 | 外部访问(域名和路径映射) | rules , tls |
Endpoint | 记录 Service 后端 Pod 的 IP 列表 | 动态更新 Service 的关联 Pod | 自动生成,无需手动配置 |
3. 配置与存储资源对比
资源类型 | 主要功能 | 适用场景 | 关键字段/特性 |
---|
ConfigMap | 存储非敏感配置数据(键值对或文件) | 配置文件、环境变量 | data , binaryData |
Secret | 存储敏感数据(如密码、证书) | 加密存储敏感信息 | data (base64 编码) |
PV (PersistentVolume) | 集群级别的存储资源 | 抽象存储设备(如 NFS、云盘) | capacity , accessModes |
PVC (PersistentVolumeClaim) | Pod 对存储资源的请求 | 绑定 Pod 与 PV | resources.requests.storage |
4. 其他关键资源
资源类型 | 主要功能 | 适用场景 |
---|
Namespace | 逻辑隔离集群资源(如开发、生产环境) | 多租户资源隔离 |
HPA (HorizontalPodAutoscaler) | 自动扩缩容 Pod 副本数 | 动态调整负载(基于 CPU/内存) |
Role/RoleBinding | 定义 RBAC 权限规则 | 控制用户或服务的访问权限 |
5.对比总结
- 工作负载管理:
- 无状态应用:用 Deployment。
- 有状态应用:用 StatefulSet。
- 节点级服务:用 DaemonSet。
- 批处理任务:用 Job/CronJob。
- 网络与访问:
- 内部访问:用 Service。
- 外部访问:用 Ingress + Service。
- 配置与存储:
- 配置文件:用 ConfigMap。
- 敏感数据:用 Secret。
- 持久化存储:用 PV + PVC。
- 扩展与安全:
- 自动扩缩容:用 HPA。
- 权限控制:用 Role + RoleBinding。
6.示例场景
- 部署一个 Web 应用:
- 使用 Deployment 管理 Pod 副本。
- 使用 Service (ClusterIP) 暴露内部访问。
- 使用 Ingress 配置外部域名访问。
- 使用 ConfigMap 挂载配置文件。
- 运行一个数据库:
- 使用 StatefulSet 管理有状态 Pod。
- 使用 PVC 绑定持久化存储。
- 使用 Secret 存储数据库密码。