第 15 章 使用 Pod 预设置将信息注入 Pod


15.1. 概述

pod 预设置 是一个对象,在创建时将用户指定的信息注入 pod。

重要

自 OpenShift Container Platform 3.7 起,pod 预设置不再被支持。

使用 pod 预设置对象,您可以注入:

开发人员只需要确保 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: {}

1
指定 settings.k8s.io/v1alpha1 API。
2
pod 预设置的名称。此名称在 Pod 注解中使用。
3
与 pod 规格中标签匹配的标签选择器。
4 5
创建要传递给容器的环境变量。
6
ConfigMap 添加到 pod 规格中。
7
将 secret 对象添加到 pod 规格。
8
指定在容器中挂载外部存储卷的位置。
9
定义可供容器使用的存储卷。

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: {}

1
如果 pod 规格没有配置为防止修改,则添加注解以显示 pod 预设置已被注入。
2
卷挂载添加到 pod。
3
环境变量添加到 pod。
4
添加至 pod 的 ConfigMap 和 secret 对象。
5
卷挂载添加到 pod。

从 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 预设置功能注入。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.