PodPreset

启用 PodPreset

1.要启用PodPreset功能,需要确保你使用的是 kubernetes 1.8版本以上,然后需要在准入控制中加入PodPreset,另外为了定义 PodPreset 对象,还需要其中 PodPreset 的 API 版本,在 APIServer 启动参数中添加如下配置,kubeadm在这个路劲下/etc/kubernetes/manifests/:

- --enable-admission-plugins=NodeRestriction,PodPreset
- --runtime-config=settings.k8s.io/v1alpha1=true
### 要重启

2.我们经常有一个需求就是需要同步 Pod 和宿主机的时间,一般情况下,我们是通过挂载宿主机的 localtime 来完成的,如下 Pod:(time-demo.yaml)

[root@master01 ~]# cat 2.yaml 
apiVersion: v1 
kind: Pod
metadata:
  name: demo
  labels:
    app: time
spec:
  containers:
  - name: demo
    image: nginx
    ports:
    - containerPort: 80
[root@master01 ~]# kubectl exec demo date
Fri Jul  9 07:01:58 UTC 2021
[root@master01 ~]# date
Fri Jul  9 15:02:02 CST 2021

3.定义PodPreset 来预设模板,定义一个如下所示的 PodPreset 资源对象:(time-preset.yaml)

[root@master01 ~]# cat time-preset.yaml 
apiVersion: settings.k8s.io/v1alpha1
kind: PodPreset
metadata:
  name: time-preset
  namespace: monitoring
spec:
  selector:
    matchLabels:
  volumeMounts:
  - name: localtime
    mountPath: /etc/localtime
  volumes:
  - name: localtime
    hostPath:
      path: /etc/localtime
[root@master01 ~]#   kubectl get pods -l app=time -n monitoring 
NAME        READY   STATUS    RESTARTS   AGE
time-demo   1/1     Running   0          68m
[root@master01 ~]#   kubectl exec time-demo -n monitoring  date
Fri Jul  9 15:05:01 CST 2021

4.定义pod,进行测试

[root@master01 ~]# cat 1.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: time-demo
  namespace: monitoring 
  labels:
    app: time
spec:
  containers:
  - name: time-demo
    image: nginx
    ports:
    - containerPort: 80
[root@master01 ~]# kubectl exec -n monitoring time-demo date
Fri Jul  9 15:07:25 CST 2021
[root@master01 ~]# date
Fri Jul  9 15:07:28 CST 2021
  1. Pod 被自动注入了 PodPreset 声明的模板,而且该命名空间下面的所有 Pod 默认都会被注入该模板。
原文地址:https://www.cnblogs.com/Applogize/p/14990675.html