使用 PodPreset 资源,可以在 Pod 创建时,自动修改 Pod 模板。
使用 label selector 选择要修改的 Pod 对象。
能够注入的属性有:secret objects / ConfigMap objects / storage volumes / container volume mounts / environment variables
相关文档
Pod Preset => overview
Injecting data into a Pod using PodPreset
the design proposal for PodPreset
第一步、启用 PodPreset 资源
Kubernetes v1.16.2/Pod Preset
Kubernetes v1.16.2/kube-apiserver
Kubernetes v1.16.2/API OVERVIEW/PodPreset v1alpha1 settings.k8s.io
how does kube-apiserver restart after editing /etc/kubernetes/manifests/kube-apiserver.yaml
Kubernetes v1.16.2,vim /etc/kubernetes/manifests/kube-apiserver.yaml
- --runtime-config=settings.k8s.io/v1alpha1=true - --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset
由于 API Server 是静态 Pod 资源,因此在修改配置后,kubelet 会自动重启 API Server 组件。
第二步、定义 PodPreset 资源
由于很多镜像没有正确设置时区,因此我们计划使用 PodPreset 资源设置时区:
apiVersion: settings.k8s.io/v1alpha1
kind: PodPreset
metadata:
name: etc-localtime
spec:
selector:
# 如果 POD 设置 localtime: image 标签 ,则不应用
matchExpressions:
- operator: "NotIn"
key: "localtime"
values:
- "image"
volumeMounts:
- mountPath: /etc/localtime
name: etc-localtime
readOnly: true
volumes:
- name: etc-localtime
hostPath:
path: /etc/localtime
第三步、创建 Pod 测试
将应用 PodPreset 的资源:
apiVersion: v1
kind: Pod
metadata:
name: counter
namespace: default
spec:
containers:
- name: count
image: busybox
args: [/bin/sh, -c,
'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']
将忽略 PodPreset 的资源:
apiVersion: v1
kind: Pod
metadata:
name: counter-localtime-image
namespace: default
labels:
localtime: image
spec:
containers:
- name: count
image: busybox
args: [/bin/sh, -c,
'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']
相关文章
「Kubernetes」- 使用存储(学习笔记)
「Kubernetes Objects」- Service(学习笔记)
「Kubernetes Objects」- ConfigMap(学习笔记)
「Kubernetes Objects」- Managing Compute Resources(学习笔记)
「Kubernetes Objects」- CronJob(学习笔记)
「K8s」- 简单的Ingress示例
「Kubernetes Objects」- Pod(学习笔记)
参考文献
Pod Preset
Injecting data into a Pod using PodPreset
the design proposal for PodPreset
CHAPTER 15. INJECTING INFORMATION INTO PODS USING POD PRESETS
本文介绍了如何在 Kubernetes 中启用和使用 PodPreset 资源,以在 Pod 创建时自动修改模板,特别是设置 Pod 的时区。通过定义 PodPreset 资源,并通过 labelselector 选择目标 Pod,可以注入 volumeMounts 和 volumes,如 /etc/localtime。示例中展示了如何创建 PodPreset 来设置时区,并创建测试 Pod 进行验证。

被折叠的 条评论
为什么被折叠?



