「Kubernetes Objects」- PodPreset(学习笔记) @20210306

本文介绍了如何在 Kubernetes 中启用和使用 PodPreset 资源,以在 Pod 创建时自动修改模板,特别是设置 Pod 的时区。通过定义 PodPreset 资源,并通过 labelselector 选择目标 Pod,可以注入 volumeMounts 和 volumes,如 /etc/localtime。示例中展示了如何创建 PodPreset 来设置时区,并创建测试 Pod 进行验证。

使用 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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值