podpreset


文档摘要

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

PodPreset 用来给指定标签的 Pod 注入额外的信息,如环境变量、存储卷等。这样,Pod 模板就不需要为每个 Pod 都显式设置重复的信息。

当然,你也可以给 Pod 增加注解 podpreset.admission.kubernetes.io/exclude: "true" 来避免它们被 PodPreset 修改。

API 版本对照表

Kubernetes 版本 API 版本 默认开启
v1.6+ settings.k8s.io/v1alpha1

开启 PodPreset

  • 开启 API kube-apiserver --runtime-config=settings.k8s.io/v1alpha1=true
  • 开启准入控制 --enable-admission-plugins=..,PodPreset

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 示例

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

修改 Pod 时区示例

下面的示例会把带有标签 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

作者与出处
原作者: feiskyer
来源:feiskyer
许可证:CC BY-SA 4.0
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: feiskyer 转发
评论区 (0)
U