第 15 章 使用 Pod 预设置将信息注入 Pod
15.1. 概述
pod 预设置 是一个对象,在创建时将用户指定的信息注入 pod。
自 OpenShift Container Platform 3.7 起,pod 预设置不再被支持。
使用 pod 预设置对象,您可以注入:
- Secret 对象
-
ConfigMap
对象 - 存储卷
- 容器卷挂载
- 环境变量
开发人员只需要确保 pod 标签与 PodPreset 上的标签选择器匹配,以便将所有这些信息添加到 pod。pod 上的标签将 pod 与一个或多个 pod 预设置对象关联,该对象具有匹配的 标签选择器。https://access.redhat.com/documentation/en-us/openshift_container_platform/3.9/html-single/architecture/#labels
通过使用 pod 预设置,开发人员可以置备 pod,而无需知道 pod 将消耗的服务的详细信息。管理员可以从开发人员避免将服务配置项保持不可见,而不必防止开发人员部署容器集。例如,管理员可以创建一个 pod 预设,通过机密和数据库端口提供数据库的名称、用户名和密码,以及通过环境变量的数据库端口。pod 开发人员只需要知道要使用的标签,以便在 pod 中包含所有信息。开发人员也可以创建 pod 预设,并执行所有相同的任务。例如,开发人员可以创建一个预设置,将环境变量自动注入到多个 Pod 中。
当 pod 预设置应用到 pod 时,OpenShift Container Platform 会修改 pod 规格,添加可注入的数据,并注解 pod 规格以显示 pod 预设置修改它。该注解的格式如下:
podpreset.admission.kubernetes.io/<pod-preset name>: `resource version`
使用集群中的 pod 预设置:
- 管理员必须通过 /etc/origin/master/master -config.yaml 启用 pod 预设置的准入控制器插件;
-
pod preset 作者必须启用 API 类型
settings.k8s.io/v1alpha1/podpreset
到 pod 预设置,并为 pod 预设置添加可注入的信息。
如果 pod 创建遇到错误,则创建 pod 且没有从 pod 预设置注入的资源。
您可以使用 pod 规格中的 podpreset.admission.kubernetes.io/exclude: "true"
参数,排除 pod 预设置修改的特定 pod。请参阅以下 pod 示例规格。
只有在安装了 服务目录 时,Pod Preset 功能才可用。
pod preset 对象示例
kind: PodPreset apiVersion: settings.k8s.io/v1alpha1 1 metadata: name: allow-database 2 spec: selector: matchLabels: role: frontend 3 env: - name: DB_PORT 4 value: "6379" 5 envFrom: - configMapRef: 6 name: etcd-env-config - secretKeyRef: 7 name: test-secret volumeMounts: 8 - mountPath: /cache name: cache-volume volumes: 9 - name: cache-volume emptyDir: {}
pod 规格示例
apiVersion: v1
kind: Pod
metadata:
name: website
labels:
app: website
role: frontend 1
spec:
containers:
- name: website
image: ecorp/website
ports:
- containerPort: 80
- 1
- 与 pod 预先设置的标签选择器匹配的标签。
pod 预设置后的 pod 规格示例
apiVersion: v1 kind: Pod metadata: name: website labels: app: website role: frontend annotations: podpreset.admission.kubernetes.io/allow-database: "resource version" 1 spec: containers: - name: website image: ecorp/website volumeMounts: 2 - mountPath: /cache name: cache-volume ports: - containerPort: 80 env: 3 - name: DB_PORT value: "6379" envFrom: 4 - configMapRef: name: etcd-env-config - secretKeyRef: name: test-secret volumes: 5 - name: cache-volume emptyDir: {}
从 pod 预设置中排除 pod 的 pod 规格示例
apiVersion: v1
kind: Pod
metadata:
name: no-podpreset
labels:
app: website
role: frontend
annotations:
podpreset.admission.kubernetes.io/exclude: "true" 1
spec:
containers:
- name: hello-pod
image: docker.io/ocpqe/hello-pod
- 1
- 添加此参数以防止此 pod 由 pod 预设置功能注入。