1. 程式人生 > 實用技巧 ># 2021-01-03 #「Kubernetes Objects」- PodPreset(學習筆記)

# 2021-01-03 #「Kubernetes Objects」- PodPreset(學習筆記)

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

參考文獻

K4NZ/PodPreset(學習筆記)
Pod Preset
Injecting data into a Pod using PodPreset
the design proposal for PodPreset
CHAPTER 15. INJECTING INFORMATION INTO PODS USING POD PRESETS