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