【博客409】 k8s使用 PodPreset 将信息注入 Pods
内容: k8s使用 PodPreset 将信息注入 Pods场景与功能:PodPreset:Pod Preset是API资源,在Pod创建时可以使用它将额外的运行时需求注入到里面。可以使用标签选择器指定Pod Preset用户相应的Pod。使用PodPreset允许pod模板不必为每个pod显式的设置信息。这样pod模板的作者不必知道该服务的所有的详细信息。我们可以使用标签选择器来指定某个或某些
·
内容: k8s使用 PodPreset 将信息注入 Pods
场景与功能:
PodPreset:
Pod Preset是API资源,在Pod创建时可以使用它将额外的运行时需求注入到里面。
可以使用标签选择器指定Pod Preset用户相应的Pod。使用PodPreset允许pod模板
不必为每个pod显式的设置信息。这样pod模板的作者不必知道该服务的所有的详细信息。
我们可以使用标签选择器来指定某个或某些 Pod,来将 PodPreset 预设信息应用上去。
使用 PodPreset 的好处就是我们可以将一些常用 Pod 预设信息配置为模板,这样就不
需要显式为每个 Pod 提供所有信息,简化 Pod 初始化配置,还能起到配置统一的效果。
启动podpreset:
使用 Pod Preset,必须确保以下条件成立:
1、已启用 api 类型 settings.k8s.io/v1alpha1/podpreset
2、已启用准入控制器 PodPreset
3、已定义 pod preset
注意:
K8s 默认不开启 PodPreset 支持的,其 API 类型为 settings.k8s.io/v1alpha1,如不
确认集群是否已开启 PodPreset 支持,可以通过 kubectl api-versions 命令查看是否
存在该类型,或者 kubectl get podpreset 命令查看,如果没开启会提示:
error: the server doesn't have a resource type "podpreset"
启用 PodPreset,可以通过 K8s ApiServer 增加:
--runtime-config=settings.k8s.io/v1alpha1=true 配置即可
禁用podpreset:
不希望 pod 被 pod preset 所改动,这时,可以在 pod spec 中添加注解:
podpreset.admission.kubernetes.io/exclude: “true”
实例:
##pod示例:
apiVersion: v1
kind: Pod
metadata:
name: website
labels:
app: website
role: frontend
spec:
containers:
- name: website
image: ecorp/website
ports:
- containerPort: 80
##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
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: {}
更多推荐
已为社区贡献51条内容
所有评论(0)