k8s通过yaml创建pod_k8s Pod进阶(四):Pod预设

Pod预设是什么

Pod Preset 是一种K8s API资源,用于在创建 Pod 时注入额外运行时需要的信息(包括 secrets、volume mounts、environment variables 等)。可以使用标签选择器(label selector)来指定Pod,并将 Pod Preset 预设信息应用到这些特定的Pod。使用 Pod Preset 可以将常用 Pod 预设信息配置为模板,通过模板每个 Pod 提供所有信息,从而简化 Pod 初始化配置。使用 Pod Preset 使得 pod 模板编写者不必显式地为每个 pod 设置信息。 这样,使用特定服务的 pod 模板编写者不需要了解该服务的所有细节。

工作机制

K8s为PodPreset提供了一个准入控制器(admission controller),当创建pod的请求到达时,通过这个准入控制器将PodPreset应用到label selector选中的pod中,具体流程如下:

1.检索系统中所有可用的PodPreset。

2.检查所有PodPreset的label selector是否与正在创建pod的标签匹配。

3.尝试将匹配的PodPreset中的各种资源合并进正在创建的pod。

4.合并如果发生错误,为pod抛出合并PodPreset失败的异常事件,同时创建一个没有注入任何PodPreset资源的Pod。

5.如合并成功,增加注释信息到Pod规范Spec中。注释格式如下:

annotations:

podpreset.admission.kubernetes.io/podpreset-: ""

特别提醒:

每个pod可以被0到多个PodPreset匹配,每个PodPreset可以应用到0到多个pod。当PodPreset被应用到pod时,kubernetes会修改pod的spec。

当注入volume时,修改pod的spec。

当注入Env、EnvFrom、VolumeMounts时,kubernetes会修改pod中所有container的spec, 初始容器init container(详细参见 《k8s Pod进阶(三):初始容器》)的修改需要kubernetes 1.14.0或更高版本。

禁用/开启Pod预设

禁用Pod预设:在某些情况下,不希望所创建的pod被PodPreset修改,可以在pod的Spec中增加注解,如下:

podpreset.admission.kubernetes.io/exclude: "true"

开启Pod预设:

1. 启用API 类型: settings.k8s.io/v1alpha1/podpreset。

如:在运行API server时,在--runtime-config选项中包含settings.k8s.io/v1alpha1=true。在minikube中启动集群时,添加标志 --extra-config=apiserver.runtime-config=settings.k8s.io/v1alpha1=true

2. 启用PodPreset的准入控制器,在运行API server时--enable-admission-plugins选项中包含PodPreset值。在minikube中启动集群时,添加标志 --extra-config=apiserver.enable-admission- plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook, ResourceQuot,PodPreset

3.在所使用的namespace下,创建PodPreset对象定义Pod Preset

简单示例

1. 编辑Pod preset的yaml文件:preset.yaml
22c8bc71f23956ef6cb96d2859311d6d.png
2. 建立 PodPreset对象
5124e32c7061179baf35afc777acd471.png

新建立的PodPreset对象,将修改任何带有标签role: frontend的Pod,并将PodPreset的内容注入Pod中。

3. 检查建立的PodPreset
d19f059a1912b4bd1a0c1575c84f0a8d.png
4. 编辑pod的yaml文件:pod.yaml
f05fb09afb4171840abbef5c078704b4.png
5. 建立Pod
ea93522718184c7822e9d446d635b0f7.png
6. 查看正在运行的Pod
9f8a265eeebb14116d0e65a509cae38d.png
7. 准入控制启用后的pod,即合并了预设后的Pod
4bd4085a31a812ccb4eb8dfea7dac4cc.png

今天的分享就到这里,欢迎大家关注,收藏,转发,评论。谢谢大家支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值