PodPreset PodPreset 用来给指定标签的 Pod 注入额外的信息,如环境变量、存储卷等。这样,Pod 模板就不需要为每个 Pod 都显式设置重复的信息。 当然,你也可以给 Pod 增加注解 来避免它们被 PodPreset 修改。 API 版本对照表 Kubernetes 版本 | API 版本 | 默认开启 v1.6+ | settings.k8s.io/v1alpha1 | 否 开启 PodPreset 开启 API 开启准入控制 PodPreset 示例 增加环境变量和存储卷的 PodPreset 用户提交 Pod 经过准入控制 后,Pod 会自动增加环境变量和存储卷 ConfigMap 示例 ConfigMap PodPreset 用户提交的 Pod 经过准入控制
PodPreset 用来给指定标签的 Pod 注入额外的信息,如环境变量、存储卷等。这样,Pod 模板就不需要为每个 Pod 都显式设置重复的信息。
当然,你也可以给 Pod 增加注解 podpreset.admission.kubernetes.io/exclude: "true" 来避免它们被 PodPreset 修改。
| Kubernetes 版本 | API 版本 | 默认开启 |
|---|---|---|
| v1.6+ | settings.k8s.io/v1alpha1 | 否 |
kube-apiserver --runtime-config=settings.k8s.io/v1alpha1=true--enable-admission-plugins=..,PodPreset增加环境变量和存储卷的 PodPreset
kind: PodPreset apiVersion: settings.k8s.io/v1alpha1 metadata: name: allow-database namespace: myns spec: selector: matchLabels: role: frontend env: - name: DB_PORT value: "6379" volumeMounts: - mountPath: /cache name: cache-volume volumes: - name: cache-volume emptyDir: {}
用户提交 Pod
apiVersion: v1 kind: Pod metadata: name: website labels: app: website role: frontend spec: containers: - name: website image: ecorp/website ports: - containerPort: 80
经过准入控制 PodPreset 后,Pod 会自动增加环境变量和存储卷
apiVersion: v1 kind: Pod metadata: name: website labels: app: website role: frontend annotations: podpreset.admission.kubernetes.io/allow-database: "resource version" spec: containers: - name: website image: ecorp/website volumeMounts: - mountPath: /cache name: cache-volume ports: - containerPort: 80 env: - name: DB_PORT value: "6379" volumes: - name: cache-volume emptyDir: {}
ConfigMap
apiVersion: v1 kind: ConfigMap metadata: name: etcd-env-config data: number_of_members: "1" initial_cluster_state: new initial_cluster_token: DUMMY_ETCD_INITIAL_CLUSTER_TOKEN discovery_token: DUMMY_ETCD_DISCOVERY_TOKEN discovery_url: http://etcd_discovery:2379 etcdctl_peers: http://etcd:2379 duplicate_key: FROM_CONFIG_MAP REPLACE_ME: "a value"
PodPreset
kind: PodPreset apiVersion: settings.k8s.io/v1alpha1 metadata: name: allow-database namespace: myns spec: selector: matchLabels: role: frontend env: - name: DB_PORT value: 6379 - name: duplicate_key value: FROM_ENV - name: expansion value: $(REPLACE_ME) envFrom: - configMapRef: name: etcd-env-config volumeMounts: - mountPath: /cache name: cache-volume - mountPath: /etc/app/config.json readOnly: true name: secret-volume volumes: - name: cache-volume emptyDir: {} - name: secret-volume secretName: config-details
用户提交的 Pod
apiVersion: v1 kind: Pod metadata: name: website labels: app: website role: frontend spec: containers: - name: website image: ecorp/website ports: - containerPort: 80
经过准入控制 PodPreset 后,Pod 会自动增加 ConfigMap 环境变量
apiVersion: v1 kind: Pod metadata: name: website labels: app: website role: frontend annotations: podpreset.admission.kubernetes.io/allow-database: "resource version" spec: containers: - name: website image: ecorp/website volumeMounts: - mountPath: /cache name: cache-volume - mountPath: /etc/app/config.json readOnly: true name: secret-volume ports: - containerPort: 80 env: - name: DB_PORT value: "6379" - name: duplicate_key value: FROM_ENV - name: expansion value: $(REPLACE_ME) envFrom: - configMapRef: name: etcd-env-config volumes: - name: cache-volume emptyDir: {} - name: secret-volume secretName: config-details
下面的示例会把带有标签 tz: shanghai的所有Pod都自动改成上海时区:
kind: PodPreset apiVersion: settings.k8s.io/v1alpha1 metadata: name: tz-shanghai namespace: default spec: selector: matchLabels: tz: shanghai volumeMounts: - mountPath: /etc/localtime name: tz-config volumes: - name: tz-config hostPath: path: /usr/share/zoneinfo/Asia/Shanghai