关于Kubernetes的YAML配置信息与注释

Kubernetes中使用YAML文件来定义资源对象,比如Pod、Deployment等。YAML文件中包含了对象的配置信息和属性。为了增加可读性和解释性,YAML文件中可以添加注释。

YAML配置格式

Kubernetes的YAML文件配置遵循以下基本格式:

1
2
3
4
5
6
7
8
9
10
apiVersion: # API版本,例如v1
kind: # 对象类型,例如Pod
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
# 这个Pod的名称是nginx
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"

关键字段:

  • data: key-value配置数据

配置数据可以通过环境变量或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=

关键字段:

  • data: base64编码的配置数据

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应用程序。