内容: 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: {}
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐