HAOJX

在kubernetes中如何给pod自动填充某些默认字段

字数统计: 284阅读时长: 1 min
2018/11/02 Share

在kubernetes的v1.11 版本 , 有个 PodPreset(Pod 预设置)的功能

在PodPreset 对象中,凡是想在Pod 里追加的字段,都可以预先定义好 , 比如:

vim podpreset.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: settings.k8s.io/v1alpha1
kind: PodPreset
metadata:
name: allow-database
spec:
selector:
matchLabels:
role: frontend
env:
- name: DB_PORT
value: "6379"
volumeMounts:
- mountPath: /cache
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}

在这个 PodPreset 的定义中,首先是一个 selector。这就意味着后面这些追加的定义,只会作用于 selector 所定义的、带有“role: frontend”标签的 Pod 对象,这就可以防止“误伤”。

先创建这个yaml文件

1
$ kubectl apply -f podpreset.yaml

之后比如说开发人员想创建一个pod , 他就可以填些简单的字段 , 比如:

vim website.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: Pod
metadata:
name: website
labels:
app: website
role: frontend
spec:
containers:
- name: website
image: nginx
ports:
- containerPort: 80
1
$ kubectl apply -f website.yaml

运行起来以后 可以看到这个pod的yaml文件已经和之前创建的podpreset.yaml文件合并了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ kubectl get pod website -o yaml
apiVersion: v1
kind: Pod
metadata:
name: website
labels:
app: website
role: frontend
annotations:
podpreset.admission.kubernetes.io/podpreset-allow-database: "resource version"
spec:
containers:
- name: website
image: nginx
volumeMounts:
- mountPath: /cache
name: cache-volume
ports:
- containerPort: 80
env:
- name: DB_PORT
value: "6379"
volumes:
- name: cache-volume
emptyDir: {}
CATALOG