1. 工作负载 (Workloads)
这些资源用于管理和运行容器化应用。
资源名称 | 中文名 | 作用描述 |
---|---|---|
Pod | 容器组 | 可部署的最小计算单元。一个 Pod 包含一个或多个共享网络和存储的容器。通常是创建其他 workload 资源的底层载体。 |
Deployment | 部署 | 用于部署无状态应用的核心控制器。管理 Pod 的多个副本(Replicas),并提供滚动更新、回滚、扩缩容等功能。 |
ReplicaSet | 副本集 | 确保指定数量的 Pod 副本始终运行。Deployment 通过创建 ReplicaSet 来管理 Pod。通常用户不直接操作它。 |
StatefulSet | 有状态副本集 | 用于部署有状态应用(如数据库:MySQL, Elasticsearch)。为 Pod 提供稳定的标识符(有序编号、稳定的网络标识和持久化存储)。 |
DaemonSet | 守护进程集 | 确保所有(或部分)Node 节点上都运行一个指定的 Pod 副本。常用于运行集群级别的守护进程,如日志收集(Fluentd)、节点监控(Node Exporter)。 |
Job | 任务 | 创建一个或多个 Pod,并确保指定数量的 Pod 成功终止。用于处理批处理任务、离线计算等一次性任务。 |
CronJob | 定时任务 | 基于时间表的 Job。在指定的时间周期性地执行任务,类似于 Linux 系统的 Crontab。 |
2. 服务发现与负载均衡 (Service Discovery & Load Balancing)
这些资源将网络流量路由到集群内部或外部的正确工作负载。
资源名称 | 中文名 | 作用描述 |
---|---|---|
Service | 服务 | 定义一个稳定的网络端点(IP地址+端口),为一组提供相同服务的 Pod(通常由 Label 选择)提供负载均衡和服务发现。 |
Ingress | 入口 | 管理外部访问集群内部服务的规则(通常是 HTTP/HTTPS)。提供基于域名和路径的路由、SSL 终止等功能。需要 Ingress Controller 才能工作(如 Nginx, Traefik)。 |
IngressClass | 入口类 | 定义不同的 Ingress 控制器类型,允许集群中存在多种 Ingress Controller。 |
3. 配置与存储 (Config & Storage)
这些资源用于将配置数据、机密信息和存储卷注入到应用程序中。
资源名称 | 中文名 | 作用描述 |
---|---|---|
ConfigMap | 配置映射 | 用于将非机密的配置数据(如配置文件、环境变量、命令行参数)以键值对形式保存,并注入到 Pod 中。实现配置与镜像解耦。 |
Secret | 密钥 | 用于存储和管理敏感信息(如密码、OAuth 令牌、SSH 密钥)。数据以 base64 编码(默认,非加密)存储,确保安全需要额外配置。 |
Volume | 存储卷 | 抽象了 Pod 中容器可访问的存储目录。其生命周期与 Pod 绑定。有多种类型(如 emptyDir , hostPath , 以及云存储如 awsElasticBlockStore )。 |
PersistentVolume (PV) | 持久卷 | 集群级别的存储资源,由管理员预先配置或通过 StorageClass 动态配置。类似于一块“网络硬盘”。 |
PersistentVolumeClaim (PVC) | 持久卷申领 | 用户对存储的请求。Pod 通过 PVC 来消费 PV 资源。PVC 向 PV 申请特定的容量大小和访问模式(如 ReadWriteOnce)。 |
StorageClass (SC) | 存储类 | 定义 PV 的“类型”或“供给方式”。动态配置存储的基础,允许按需自动创建 PV(例如,指定创建 SSD 类型的云存储)。 |
4. 集群与安全 (Cluster & Security)
这些资源定义了集群的权限、策略和命名空间。
资源名称 | 中文名 | 作用描述 |
---|---|---|
Namespace | 命名空间 | 在物理集群内部提供虚拟的隔离区。用于将资源对象划分为不同的逻辑组,便于权限管理和资源配额控制(如 dev , test , production )。 |
ServiceAccount | 服务账户 | 为运行在 Pod 中的进程提供一个身份标识。用于与 API 服务器通信时的身份认证,并与 RBAC 绑定以确定其权限。 |
Role | 角色 | 定义在特定命名空间内的一组权限规则(例如,对 Pod 的 get, list, create 权限)。 |
ClusterRole | 集群角色 | 定义在集群范围内的一组权限规则(例如,访问所有节点的权限)。 |
RoleBinding | 角色绑定 | 将 Role 中定义的权限授予一个用户、组或 ServiceAccount(仅限于某个命名空间)。 |
ClusterRoleBinding | 集群角色绑定 | 将 ClusterRole 中定义的权限授予一个用户、组或 ServiceAccount(作用于整个集群)。 |
NetworkPolicy | 网络策略 | Pod 级别的防火墙。通过标签选择器控制 Pod 之间以及 Pod 与外部世界的网络流量(入站/出站)。 |
5. 元数据与扩展 (Metadata & Extension)
这些资源用于控制其他资源的行为或扩展 K8s 的功能。
资源名称 | 中文名 | 作用描述 |
---|---|---|
CustomResourceDefinition (CRD) | 自定义资源定义 | 扩展 Kubernetes API 的核心。允许用户定义自己的资源类型(Custom Resource),从而操作自定义API对象。是 Operator 模式的基础。 |
HorizontalPodAutoscaler (HPA) | 水平Pod自动扩缩容 | 根据观察到的 CPU 使用率(或自定义指标)自动调整 Deployment 等控制器中 Pod 的副本数量。 |
VerticalPodAutoscaler (VPA) | 垂直Pod自动扩缩容 | 自动调整 Pod 的 CPU 和内存请求与限制,使其更符合实际使用量。 |
LimitRange | 限制范围 | 在命名空间内为 Pod 或容器设置默认的、最小和最大的计算资源(CPU、内存)使用量。 |
ResourceQuota | 资源配额 | 在命名空间内限制总体资源消耗(如最多可创建的 Pod 数量、总的 CPU/内存请求量)。 |
ValidatingWebhookConfiguration / MutatingWebhookConfiguration | 验证/变更 webhook | 准入控制器的扩展机制。允许在创建/修改资源对象之前,调用外部 webhook 服务来验证(Validate) 或修改(Mutate) 该对象。 |
如何查看所有资源类型?
您可以使用 kubectl api-resources
命令来动态查询当前 Kubernetes 集群支持的所有资源类型,包括简称 (SHORTNAMES)、API 组 (APIGROUP) 和是否被命名空间隔离 (NAMESPACED)。
kubectl api-resources
输出示例:
NAME SHORTNAMES APIGROUP NAMESPACED KIND pods po true Pod services svc true Service deployments deploy apps true Deployment replicasets rs apps true ReplicaSet statefulsets sts apps true StatefulSet configmaps cm true ConfigMap secrets true Secret namespaces ns false Namespace persistentvolumes pv false PersistentVolume persistentvolumeclaims pvc true PersistentVolumeClaim serviceaccounts sa true ServiceAccount ...
总结
Kubernetes 的资源模型是其强大能力的核心。您可以通过组合这些“乐高积木”来定义、部署和管理任何复杂的应用。
一个典型的应用部署流程会涉及:
-
工作负载 (Deployment) 定义应用本身。
-
配置 (ConfigMap/Secret) 注入配置和密码。
-
存储 (PVC) 申请持久化存储。
-
网络 (Service/Ingress) 暴露服务给内部或外部访问。
-
安全 (ServiceAccount + RoleBinding) 为应用分配合适的权限。
理解这些资源及其相互关系是掌握 Kubernetes 的关键。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容