PodPreset 用来给指定 Label 的 Pod 注入额外的信息,比如有时候想要让一批容器在启动的时候就注入一些信息,如环境变量、存储卷等。 这样,Pod 模板就不需要为每个 Pod 都显式设置重复的信息。
工作机制
在启用了准入控制器(PodPreset)时,Pod Preset 会将应用创建请求传入到该控制器上。当有 Pod 创建请求发生时,系统将执行以下操作:
检索所有可用的 PodPresets。
检查 PodPreset 标签选择器上的标签,看看其是否能够匹配正在创建的 Pod 上的标签。
尝试将由 PodPreset 定义的各种资源合并到正在创建的 Pod 中。
出现错误时,在该 Pod 上引发记录合并错误的事件,PodPreset 不会注入任何资源到创建的 Pod 中。
注释刚生成的修改过的 Pod spec,以表明它已被 PodPreset 修改过。注释的格式为 podpreset.admission.kubernetes.io/podpreset-<pod-preset name>": "<resource version>"。
每个 Pod 可以匹配零个或多个 Pod Prestet;并且每个 PodPreset 可以应用于零个或多个 Pod。
开启 Pod Preset
开启 API settings.k8s.io/v1alpha1/podpreset,通过 API server --runtime-config 包含 settings.k8s.io/v1alpha1=true, 如 --runtime-config=autoscaling/v2beta1=true,settings.k8s.io/v1alpha1=true。
开启准入控制 PodPreset,对于 1.10 及更高版本 API server --enable-admission-plugins 包含 PodPreset 选项。在以前的版本 是 --admission-control 包含 PodPreset 选项。