k8s --- resource 资源
k8s --- resource 资源
- 什么是resource
- 如何定义一个资源
- k8s资源分类
- 资源的执行者 --- controller
什么是resource
在 Kubernetes 中,资源 是一个端点,它使用 Kubernetes API 来存储某种 API 对象 的集合. 也可以说k8s中一切皆资源
简单来说:
- 资源是 Kubernetes API 中的一个实体。比如 Pod、Deployment、Service 都是资源。
- 你通过创建、修改、删除这些资源对象来告诉 Kubernetes 你期望的集群状态。
- 每个资源都有其特定的 结构和功能,用来描述你想要运行的应用、网络、存储等
所有 Kubernetes 资源定义和状态都持久化存储在 etcd 中
如何定义一个资源
每个 Kubernetes 资源对象通常由以下几部分组成,定义在一个 YAML 或 JSON 文件中 (大概的模版,根据具体资源类型不同):
apiVersion: v1 # ① 使用的 API 版本
kind: Pod # ② 资源的类型
metadata: # ③ 资源的元数据name: my-pod # 资源名称labels: # 标签,用于识别和分组app: my-app
spec: # ④ 资源的“期望状态”,核心配置containers:- name: nginximage: nginx:1.19ports:- containerPort: 80
status: # ⑤ 资源的“实际状态”,由 Kubernetes 自动填充
k8s资源分类
工作负载资源 — 用于管理和运行你的应用程序容器。
| 资源 | 缩写 | 作用 |
|---|---|---|
| Pod | po | 最小的部署单元,包含一个或多个容器。 |
| Deployment | deploy | 管理无状态应用的 Pod 副本,支持滚动更新。 |
| StatefulSet | sts | 管理有状态应用的 Pod,提供稳定的标识和存储。 |
| DaemonSet | ds | 确保每个(或指定)节点上都运行一个 Pod 副本。 |
| Job | job | 创建一个或多个 Pod,并确保它们成功运行至结束。 |
| CronJob | cj | 基于时间表来运行 Job。 |
| ReplicaSet | rs | 维护一组稳定的 Pod 副本,通常由 Deployment 自动管理。 |
服务发现与负载均衡资源 — 用于使你的应用能够被网络发现和访问。
| 资源 | 缩写 | 作用 |
|---|---|---|
| Service | svc | 为一组 Pod 提供稳定的网络入口和负载均衡。 |
| Ingress | ing | 管理外部 HTTP/HTTPS 流量访问集群内部服务的规则。 |
| Endpoints | ep | 记录一个 Service 对应的所有 Pod IP 地址,通常自动生成。 |
配置与存储资源 — 用于管理应用配置、敏感信息和数据持久化。
| 资源 | 缩写 | 作用 |
|---|---|---|
| ConfigMap | cm | 用于存储非机密的配置数据,以键值对形式。 |
| Secret | sec | 用于存储敏感信息,如密码、令牌、密钥。 |
| PersistentVolume | pv | 集群中的一块网络存储资源。 |
| PersistentVolumeClaim | pvc | 用户对存储的请求,Pod 通过 PVC 使用 PV。 |
| StorageClass | sc | 定义 PV 的“类别”,支持动态创建 PV。 |
| namespace | ns | 用来将同一个物理集群划分为多个虚拟集群的机制| |
资源的执行者 — controller
- Controller(控制器)是 Kubernetes 的“自动化运维机器人”,它们持续监控集群状态,并努力确保系统的“实际状态”与你定义的“ (资源的yaml文件)期望状态”保持一致。
- 不是每个资源都有一个控制器,但绝大多数核心资源都由对应的控制器管理
由 Controller 管理的“主动”资源
- 这些是 Kubernetes 生态系统中的“劳动者”。它们有生命周期,需要被创建、更新、删除,以维护某种状态。
| 资源 | 控制器 | 控制器的作用 |
|---|---|---|
| Deployment | Deployment Controller | 确保指定数量的 Pod 副本在运行,并处理更新和回滚。 |
| StatefulSet | StatefulSet Controller | 管理有状态 Pod 的部署和扩缩容,维护其标识和存储。 |
| DaemonSet | DaemonSet Controller | 确保每个(或指定)节点上都运行一个 Pod 副本。 |
| Job | Job Controller | 确保一个或多个 Pod 成功运行至结束。 |
| Service | Endpoints Controller | 监控 Pod 的变化,并更新 Service 对应的 Endpoints 对象。 |
| Pod | 由创建它的控制器管理 | Pod 本身通常由更高级的控制器管理 (如deployment)。Node 故障时,由对应控制器创建新 Pod。 |
| Ingress | Ingress Controller | 它负责读取 Kubernetes 集群中的 Ingress 资源规则,并据此实现一个真正的、可处理 HTTP/HTTPS 流量的负载均衡器或反向代理 |
无 Controller 的“被动”资源
- 这些是 Kubernetes 生态系统中的“配置单”或“原材料”。它们本身不会“做”任何事情,只是被其他资源引用和使用。
| 资源 | 原因说明 |
|---|---|
| ConfigMap | 只是一个存储配置数据的容器。Pod使用它,但它自己不需要行动。 |
| Secret | 同ConfigMap,只是用于存储敏感数据。 |
| PersistentVolume | 代表一块存储资源。由管理员或StorageClass创建,等待被PVC申请。 |
| PersistentVolumeClaim | 是一个存储请求。PV Controller会监听PVC并为其绑定PV,但PVC本身不执行操作。 |
| Namespace | 是一个逻辑边界,本身不需要维护状态。 |
| ServiceAccount | 是一个身份标识,被Pod使用,但自己不需要行动。 |
