跳到主要内容

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 的版本(如 v1apps/v1)。
  • kind: 资源类型(这里是 Pod)。
  • metadata: 元数据,包含 name(资源名称)、labels(标签)等。
  • spec: 定义 Pod 的具体配置。
    • containers: 容器列表,每个容器有以下字段:
      • name: 容器名称。
      • image: 容器镜像。
      • ports: 容器暴露的端口。
      • env: 环境变量。
      • resources: 容器的资源请求和限制。
      • volumeMounts: 挂载到容器的存储卷。
    • volumes: 定义 Pod 使用的存储卷。

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: 元数据,包含 namelabels
  • 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: 服务类型(如 ClusterIPNodePortLoadBalancer)。

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 的类型(如 Opaquekubernetes.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: 存储的访问模式(如 ReadWriteOnceReadOnlyMany)。
    • 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 配置字段说明。如果你需要更详细的字段解释或其他资源类型的说明,请告诉我! 😊