Kubernetes中YAML字段说明
在 Kubernetes 中,kind 字段用于指定资源类型。每种资源类型都有其独特的 YAML 配置字段,这些字段用于定义资源的属性和行为。以下是 Kubernetes 中常见 kind 的 YAML 文件配置及字段说明。
1. Pod
Pod 是 Kubernetes 中最小的部署单元,包含一个或多个容器。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:1.21
ports:
- containerPort: 80
env:
- name: ENV_VAR_NAME
value: "value"
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
volumeMounts:
- mountPath: /app/config
name: config-volume
volumes:
- name: config-volume
configMap:
name: my-config
字段说明
- apiVersion: 定义 API 的版本(如
v1、apps/v1)。 - kind: 资源类型(这里是
Pod)。 - metadata: 元数据,包含
name(资源名称)、labels(标签)等。 - spec: 定义 Pod 的具体配置。
- containers: 容器列表,每个容器有以下字段:
- name: 容器名称。
- image: 容器镜像。
- ports: 容器暴露的端口。
- env: 环境变量。
- resources: 容器的资源请求和限制。
- volumeMounts: 挂载到容器的存储卷。
- volumes: 定义 Pod 使用的存储卷。
- containers: 容器列表,每个容器有以下字段:
2. Deployment
Deployment 用于管理无状态应用的部署。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
labels:
app: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:1.21
ports:
- containerPort: 80
字段说明
- apiVersion: 资源的 API 版本(Deployment 通常为
apps/v1)。 - kind: 资源类型(这里是
Deployment)。 - metadata: 元数据,包含
name和labels。 - spec: 定义 Deployment 的配置。
- replicas: 副本数,表示 Deployment 创建的 Pod 数量。
- selector: 指定 Deployment 管理的 Pod,通常通过
matchLabels匹配。 - template: 定义 Pod 的模板,结构与 Pod 的 YAML 相同。
3. Service
Service 用于将一组 Pod 暴露为一个网络服务。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
字段说明
- apiVersion: 资源的 API 版本(Service 通常为
v1)。 - kind: 资源类型(这里是
Service)。 - metadata: 元数据。
- spec: 定义 Service 的配置。
- selector: 选择器,用于选择与 Service 关联的 Pod。
- ports: 定义服务的端口映射。
- protocol: 使用的协议(如 TCP 或 UDP)。
- port: Service 暴露的端口。
- targetPort: Pod 中容器监听的端口。
- type: 服务类型(如
ClusterIP、NodePort、LoadBalancer)。
4. ConfigMap
ConfigMap 用于存储非敏感的配置信息。
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
config.json: |
{
"key": "value"
}
app.properties: |
key1=value1
key2=value2
字段说明
- apiVersion: 资源的 API 版本(ConfigMap 通常为
v1)。 - kind: 资源类型(这里是
ConfigMap)。 - metadata: 元数据。
- data: 配置信息,键值对格式。
5. Secret
Secret 用于存储敏感数据(如密码、密钥)。
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
username: YWRtaW4=
password: cGFzc3dvcmQ=
字段说明
- apiVersion: 资源的 API 版本(Secret 通常为
v1)。 - kind: 资源类型(这里是
Secret)。 - metadata: 元数据。
- type: Secret 的类型(如
Opaque、kubernetes.io/tls)。 - data: Base64 编码的键值对。
6. PersistentVolume (PV)
PersistentVolume 是集群中的存储资源。
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/data
字段说明
- apiVersion: 资源的 API 版本(PV 通常为
v1)。 - kind: 资源类型(这里是
PersistentVolume)。 - metadata: 元数据。
- spec: 定义存储卷的配置。
- capacity: 存储容量。
- accessModes: 存储的访问模式(如
ReadWriteOnce、ReadOnlyMany)。 - hostPath: 存储的路径。
7. PersistentVolumeClaim (PVC)
PVC 是用户对存储资源的请求。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
字段说明
- apiVersion: 资源的 API 版本(PVC 通常为
v1)。 - kind: 资源类型(这里是
PersistentVolumeClaim)。 - metadata: 元数据。
- spec: 定义存储请求的配置。
- accessModes: 请求的访问模式。
- resources.requests.storage: 请求的存储大小。
8. Ingress
Ingress 用于暴露 HTTP 和 HTTPS 服务。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: my-app.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
字段说明
- apiVersion: 资源的 API 版本(Ingress 通常为
networking.k8s.io/v1)。 - kind: 资源类型(这里是
Ingress)。 - metadata: 元数据。
- spec: 定义 Ingress 的配置。
- rules: 定义路由规则。
- host: 域名。
- paths: 路径和对应的后端服务。
9. CronJob
CronJob 用于定时任务。
apiVersion: batch/v1
kind: CronJob
metadata:
name: my-cronjob
spec:
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: my-job
image: busybox
args:
- /bin/sh
- -c
- date; echo "Hello from the Kubernetes CronJob"
restartPolicy: OnFailure
字段说明
- apiVersion: 资源的 API 版本(CronJob 通常为
batch/v1)。 - kind: 资源类型(这里是
CronJob)。 - metadata: 元数据。
- spec: 定义定时任务的配置。
- schedule: Cron 表达式。
- jobTemplate: 定义任务模板。
- containers: 定义任务运行的容器。
- restartPolicy: 重启策略。
以上是 Kubernetes 中常见 kind 的 YAML 配置字段说明。如果你需要更详细的字段解释或其他资源类型的说明,请告诉我! 😊