在 Kubernetes 中,spec
(规格说明)部分是资源配置文件的核心内容,它定义了资源期望的状态或配置。与 metadata
不同,spec
描述了资源实际“做什么”或者“应该如何运行”,例如一个 Pod 应该运行哪些容器,一个 Deployment 应该管理多少个副本,以及服务如何路由流量等。下面通过几个常见的资源类型来解析 spec
的关键元素。
1、对于 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:name: my-deployment
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80
- replicas: 指定副本集应该运行的副本数量。
- selector.matchLabels: 定义标签选择器,用来确定哪些 Pods 应该由这个 Deployment 管理。
- template: 描述了 Pod 的模板,实际创建的每个 Pod 将基于此模板。
- containers: 定义了容器列表及其配置,包括镜像、端口等。
2、对于 Service
apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: my-appports:- protocol: TCPport: 80targetPort: 9376type: ClusterIP
- selector: 用于匹配后端 Pods 的标签,确保 Service 能正确路由到对应的 Pods。
- ports: 定义了服务的端口映射,包括协议、外部访问端口和服务监听的容器端口。
- type: 指定服务的类型,如 ClusterIP、NodePort、LoadBalancer 或 ExternalName,决定了服务的可访问方式。
3、对于 Pod
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80volumeMounts:- mountPath: /var/log/nginxname: nginx-logsvolumes:- name: nginx-logsemptyDir: {}
- containers: 描述了 Pod 中包含的容器,包括容器名、镜像、端口暴露等。
- volumeMounts: 定义了容器内的卷挂载点,关联到
volumes
定义的存储。 - volumes: 定义了 Pod 使用的存储卷,这里是一个空目录
emptyDir
作为示例。