使用場景:如果某些pod的鏡像是其他人做好的,咱們又不方便修改,但是要向裏面批量添加一些配置,可以使用PodPreset,k8s 1.17
k8s默認沒有開啓,開啓方法如下
# 查看是否開啓
kubectl api-versions|grep setting
# 開啓方法,k8s集羣,添加如下配置
--runtime-config=settings.k8s.io/v1alpha1=true
# minikube
# --image-repository 鏡像倉庫
# 通過命令行啓用 PodPreset
minikube start --vm-driver=none --image-repository=registry.aliyuncs.com/google_containers --extra-config=apiserver.runtime-config=settings.k8s.io/v1alpha1=true --extra-config=apiserver.enable-admission-plugins=PodPreset
# 也可以修改配置文件/etc/kubernetes/manifests/kube-apiserver.yaml在command下添加如下命令
- --runtime-config=settings.k8s.io/v1alpha1=true #新增該配置
- --enable-admission-plugins=PodPreset #最後邊增加 ,PodPreset 支持
使用kubeadm初始化的Kubernetes集羣中,kube-apiserver是以靜態Pod的形式運行在Master Node上。 可以在Master Node上找到其定義文件/etc/kubernetes/manifests/kube-apiserver.yaml,當/etc/kubernetes/manifests/kube-apiserver.yaml被修改後,kubelet會重啓kube-apiserver
官方實例
- 創建 PodPreset:
kubectl apply -f https://k8s.io/examples/podpreset/preset.yaml
檢查所創建的 PodPreset:
kubectl get podpreset
NAME AGE
allow-database 1m
新的 PodPreset 會對所有具有標籤 role: frontend 的 Pods 採取行動
- 創建 測試Pod:
kubectl create -f https://k8s.io/examples/podpreset/pod.yaml
列舉運行中的 Pods:
kubectl get pods
NAME READY STATUS RESTARTS AGE
website 1/1 Running 0 4m
- 查看是否添加成功
kubectl get pod website -o yaml
看是否添加如下內容:
env:
- name: DB_PORT
value: "6379"
volumeMounts:
- mountPath: /cache
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}