启用 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
- Pod 被自动注入了 PodPreset 声明的模板,而且该命名空间下面的所有 Pod 默认都会被注入该模板。