Kubernetes 资源清单
Zhongjun Qiu 元婴开发者

介绍了 Kubernetes 中的资源概念、分类以及如何编写资源清单。

资源是什么

K8S中的所有内容都抽象为资源,资源实例化之后,才有K8S中各个组件(Service,Pod等等)。

类似面向对象中,类和实例之间的关系。

资源类别

Kubernetes 中的资源可按照作用范围和用途划分为三大类:名称空间级别资源集群级资源元数据型资源。每类资源承担不同的职责,适用于不同的场景。

每个只列出部分,全面的可以自行了解

名称空间级别资源

这类资源通常存在于某个特定的命名空间(Namespace)中,适用于隔离和管理应用的生命周期。

➤ 工作负载型资源

  • Pod:Kubernetes 中最小的可调度单元,封装了一个或多个容器。
  • ReplicaSet:确保指定数量的 Pod 副本始终运行。
  • Deployment:用于声明式地更新和管理 Pod 和 ReplicaSet。

特点:直接与应用运行相关,用于控制副本、滚动更新等功能。

➤ 服务发现及负载均衡型资源

  • Service:提供稳定的访问入口,用于服务间通信和负载均衡。
  • Ingress:提供基于域名或路径的 HTTP 路由规则,将外部请求转发到内部服务。

特点:提供服务暴露与访问能力,支持内部和外部通信。

➤ 配置与存储型资源

  • Volume:为 Pod 提供持久化或临时的存储能力。
  • CSI(Container Storage Interface):通过插件扩展 Kubernetes 存储系统能力。

特点:解决存储问题,支持跨容器或持久挂载的场景。

➤ 特殊类型的存储卷

  • ConfigMap:用于存储配置数据,以 key-value 的形式提供给容器。
  • Secret:用于存储敏感数据,如密码、证书等。

特点:用于将配置信息或敏感信息从代码中解耦,支持热更新。

集群级资源

这些资源不属于任何命名空间,而是作用于整个 Kubernetes 集群,主要用于权限、节点管理等。

  • Namespace:逻辑隔离资源的单位,常用于多租户管理。
  • Node:集群中的一台物理机或虚拟机,运行着 Pod。
  • ClusterRole:定义集群范围内的访问权限。
  • ClusterRoleBinding:将 ClusterRole 绑定给用户、组或 ServiceAccount,实现权限赋予。

特点:管理集群级别的资源或控制策略,通常由管理员维护。

元数据型资源

这些资源并不直接参与工作负载的调度与管理,而是用于辅助定义或限制行为。

  • HPA(Horizontal Pod Autoscaler):基于 CPU、内存等指标自动调整 Pod 副本数。
  • PodTemplate:定义 Pod 的模板结构,常用于控制器内部引用。
  • LimitRange:用于限制命名空间中 Pod 或容器资源(如 CPU、内存)的最小最大值。

特点:用于优化资源分配、自动伸缩与行为约束,提高系统弹性与效率。

资源清单编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
namespace: default
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: nginx:1.25
ports:
- containerPort: 80
env:
- name: ENVIRONMENT
value: production
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
hostPath:
path: /data
type: Directory
restartPolicy: Always
nodeSelector:
disktype: ssd
字段 说明
apiVersion 使用的 API 版本,这里 v1 表示核心组。
kind 资源类型,此处是 Pod
metadata 元信息部分,如名称、命名空间、标签等。

metadata 子字段

  • name:Pod 名称,集群中唯一。
  • namespace:所属命名空间,默认为 default
  • labels:键值对形式的标签,用于选择器匹配、管理等。
字段 说明
containers 容器列表,Pod 中的每个容器都需定义在此。
restartPolicy 重启策略:AlwaysOnFailureNever(默认 Always)。
nodeSelector 节点选择器,用于指定将 Pod 调度到具有某种 label 的节点。
volumes 定义挂载卷,用于持久化或传入配置等。

containers 子字段

  • name:容器名称,必须唯一。
  • image:容器镜像名,包含版本标签。
  • ports:暴露的容器端口。
  • env:环境变量设置,可用于配置程序运行参数。
  • volumeMounts:将定义的卷挂载到容器内的路径。

volumes 子字段

  • name:卷名称,与 volumeMounts.name 对应。
 REWARD AUTHOR
 Comments
Comment plugin failed to load
Loading comment plugin