kubectl中的yaml配置详解
Kubernetes YAML 文件详解
Kubernetes 使用 YAML (YAML Ain’t Markup Language) 文件来定义和配置集群中的资源对象。这些文件通过 kubectl
命令应用到集群中。
一、YAML 文件基本结构
一个标准的 Kubernetes YAML 文件通常包含以下四个主要部分:
apiVersion: v1 # 必填:API版本
kind: Pod # 必填:资源类型
metadata: # 必填:资源元数据name: my-pod # 资源名称
spec: # 必填:资源规格containers: # 容器定义- name: nginximage: nginx:1.14.2
二、核心字段详解
1. apiVersion
定义使用的 Kubernetes API 版本,不同资源类型对应不同 API 版本:
资源类型 | 常用 apiVersion |
---|---|
Pod | v1 |
Deployment | apps/v1 |
Service | v1 |
ConfigMap | v1 |
Ingress | networking.k8s.io/v1 |
CronJob | batch/v1 |
2. kind
指定要创建的资源类型,常见的有:
- Pod
- Deployment
- Service
- ConfigMap
- Secret
- StatefulSet
- DaemonSet
- Job
- CronJob
3. metadata
资源的元数据信息,包含:
metadata:name: my-resource # 资源名称(必填)namespace: default # 命名空间(可选)labels: # 标签(可选)app: nginxtier: frontendannotations: # 注解(可选)description: "生产环境nginx"
4. spec
定义资源的期望状态,内容因资源类型而异。
三、常用资源 YAML 示例
1. Pod 示例
apiVersion: v1
kind: Pod
metadata:name: nginx-podlabels:app: nginx
spec:containers:- name: nginx-containerimage: nginx:1.14.2ports:- containerPort: 80resources:limits:cpu: "500m"memory: "512Mi"requests:cpu: "250m"memory: "256Mi"
2. Deployment 示例
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80
3. Service 示例
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80type: ClusterIP
四、YAML 高级特性
1. 多资源定义
使用 ---
分隔符在一个文件中定义多个资源:
apiVersion: v1
kind: Pod
metadata:name: pod1
---
apiVersion: v1
kind: Service
metadata:name: service1
2. 环境变量配置
env:
- name: ENV_VARvalue: "production"
- name: DB_HOSTvalueFrom:configMapKeyRef:name: db-configkey: host
3. ConfigMap 和 Secret 使用
apiVersion: v1
kind: Pod
metadata:name: configmap-pod
spec:containers:- name: test-containerimage: busyboxcommand: ["/bin/sh", "-c", "env"]envFrom:- configMapRef:name: special-config- secretRef:name: secret-config
五、kubectl 操作 YAML 文件
-
创建资源:
kubectl apply -f deployment.yaml
-
查看资源定义:
kubectl get pod nginx-pod -o yaml
-
导出资源配置:
kubectl get deployment nginx-deployment -o yaml > nginx-deployment.yaml
-
验证 YAML 文件:
kubectl apply -f deployment.yaml --dry-run=client
-
编辑资源:
kubectl edit deployment nginx-deployment
六、最佳实践
-
使用
kubectl explain
查看字段说明:kubectl explain deployment.spec.template.spec.containers
-
保持 YAML 文件简洁,避免冗余配置
-
使用注释说明关键配置项
-
对生产环境配置进行版本控制
-
使用 Kustomize 或 Helm 管理复杂配置
通过掌握这些 YAML 文件的基本结构和常用配置,您将能够更高效地管理和部署 Kubernetes 资源。