关于Kubernetes的YAML配置信息与注释
Kubernetes中使用YAML文件来定义资源对象,比如Pod、Deployment等。YAML文件中包含了对象的配置信息和属性。为了增加可读性和解释性,YAML文件中可以添加注释。
YAML配置格式
Kubernetes的YAML文件配置遵循以下基本格式:
1 2 3 4 5 6 7 8 9 10
| apiVersion: kind: metadata: name: labels: spec: containers: - name: image: ports:
|
- apiVersion:指定API版本,不同API版本可能支持不同的资源对象和属性
- kind:指定对象类型,如Pod、Deployment
- metadata:对象的元数据,比如名称、标签等
- spec: 对象的规范描述,这部分对对象进行详细配置
添加注释
YAML文件中可以使用#
添加注释。
1 2 3 4 5 6 7 8 9 10 11
| apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
|
注释可以添加在YAML的任意位置,对文件内容进行解释和说明。
注释通常用于:
- 对文件作基本描述
- 对字段进行解释
- 提示默认值
- 临时注释掉一些配置
最佳实践
- 使用全单词,不要使用缩写,增加可读性
- 对重要参数和非默认配置添加注释
- 注释应简洁明了,避免冗长
- 注释应该解释为什么要这么配置,而不是简单描述配置参数
- 对于临时注释的配置,标明是临时性注释
使用正确的YAML注释可以大大提高Kubernetes资源配置的可读性和可维护性。
Deployment配置
Deployment用于部署和管理Pod和ReplicaSet。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.15.4 ports: - containerPort: 80
|
关键字段说明:
- replicas:指定副本数量
- selector:选择器,通过labels匹配Pod
- template:Pod模板,用于创建Pod
Service配置
Service用于暴露应用程序,提供服务发现和负载均衡。
1 2 3 4 5 6 7 8 9 10 11 12 13
| apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: NodePort selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 30000
|
关键字段说明:
- type:服务类型,如NodePort、LoadBalancer
- selector:选择器,通过labels匹配Pod
- ports:端口配置
Ingress配置
Ingress提供外部可访问的URL、负载均衡、SSL等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-ingress spec: rules: - host: nginx.example.com http: paths: - pathType: Prefix path: / backend: service: name: nginx-service port: number: 80
|
关键字段说明:
- rules:根据host和path路由流量
- backend:后端服务信息
ConfigMap配置
ConfigMap用来保存配置数据,可以被Pod引用。
1 2 3 4 5 6 7
| apiVersion: v1 kind: ConfigMap metadata: name: app-config data: LOG_LEVEL: INFO APP_PORT: "8080"
|
关键字段:
配置数据可以通过环境变量或volume挂载使用。
Secret配置
Secret类似ConfigMap,用于保存敏感数据,如密码等。
1 2 3 4 5 6 7 8
| apiVersion: v1 kind: Secret metadata: name: db-secret data: DB_HOST: bXlzcWw= DB_USER: cm9vdA== DB_PASSWORD: cGFzc3dvcmQ=
|
关键字段:
Job配置
Job用于运行一次性任务。
1 2 3 4 5 6 7 8 9 10 11 12 13
| apiVersion: batch/v1 kind: Job metadata: name: count-job spec: template: spec: containers: - name: counter image: busybox command: ["/bin/sh", "-c", "for i in $(seq 1 3); do echo $i; done"] restartPolicy: Never backoffLimit: 4
|
关键字段:
- restartPolicy: 任务结束后不重启
- backoffLimit: 失败重试次数
CronJob配置
CronJob基于crontab创建定时任务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| apiVersion: batch/v1beta1 kind: CronJob metadata: name: data-backup spec: schedule: "0 0 * * *" jobTemplate: spec: template: spec: containers: - name: backup image: backup:1.0 restartPolicy: OnFailure
|
关键字段:
- schedule: cron表达式
- jobTemplate: job模板
StatefulSet配置
StatefulSet用于管理有状态应用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: serviceName: "mysql" replicas: 3 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 ports: - containerPort: 3306 name: mysql
|
关键字段:
- serviceName: 头less服务名称
- replicas: 副本数量
- template: 模板
DaemonSet配置
DaemonSet在集群内的每一节点上运行一个Pod。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| apiVersion: apps/v1 kind: DaemonSet metadata: name: log-collector spec: selector: matchLabels: name: log-collector template: metadata: labels: name: log-collector spec: containers: - name: log-collector image: log-collector:1.0
|
关键字段:
- selector: 选择器,匹配将运行Pod的节点
- template: Pod模板
PV和PVC配置
PV和PVC用于存储管理和挂载。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| apiVersion: v1 kind: PersistentVolume metadata: name: pv-datastore spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce storageClassName: local-storage
---
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-datastore spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: local-storage
|
Horizontal Pod Autoscaler
HPA可以根据指标自动扩缩Pod数量。
1 2 3 4 5 6 7 8 9 10 11 12
| apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 maxReplicas: 10 targetCPUUtilizationPercentage: 50
|
关键字段:
- scaleTargetRef: 要扩缩的对象
- max/minReplicas: 最大/最小Pod数
- targetCPUUtilizationPercentage: 目标CPU利用率
NetworkPolicy
NetworkPolicy用于网络隔离和访问控制。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: db-policy spec: podSelector: matchLabels: role: db policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: name: api-pod ports: - protocol: TCP port: 3306 egress: - to: - ipBlock: cidr: 10.0.0.0/24
|
关键字段:
- podSelector: 选定Pod
- policyTypes: 策略类型
- ingress/egress: 入站和出站规则
CustomResourceDefinition
CRD可以自定义新的Kubernetes API对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: servers.stable.example.com spec: group: stable.example.com versions: - name: v1 served: true storage: true scope: Namespaced names: plural: servers singular: server kind: Server
|
以上包含了一些Kubernetes对象的常见YAML配置示例,可以根据需要进行扩展和组合,构建出完整的Kubernetes应用程序。