本系列文章:
第一章:九析带你轻松完爆 k8s pod 日期介绍
第二章:九析带你轻松完爆 k8s pod 时间设置
目录
1 PodPreset 介绍
2 PodPreset 开启
2.1 PodPreset 确认
2.2 PodPreset 开启
3 PodPreset 创建
4 PodPreset 验证
1 PodPreset 介绍
上小节中我们知道了 docker 容器默认会使用 UTC(国际标准时间),因为我们是 CST(北京时间),因此容器内时间会比北京时间晚了 8 个小时。
如何批量修改容器时间,使其跟我们使用的北京时间保持同步呢?可以使用 PodPreset 实现。
PodPreset 是 k8s API 资源,作用是在创建 Pod 时预设(preset)信息,比如 secrets、configmap、环境变量、volume mounts 等。有了 PodPreset,我们就不必显示为每个 Pod 编写所需信息,而只需执行 PodPreset API,自动将这些信息注入到指定的 Pod 容器中。
有关 PodPreset 说明,请点击查看。
2 PodPreset 开启
2.1 PodPreset 确认
PodPreset 在 K8S 中的资源类型为 settings.k8s.io/v1alpha1,默认并不开启。查看命令:
kubectl api-versions
或者:
kubectl get podpreset
2.2 PodPreset 开启
编辑 /etc/kubernetes/manifests/kube-apiserver.yaml 配置文件,在启动参数新增 runtime-config 选项;在原有 enable-admission-plugins 选项中追加 PodPreset。
--runtime-config=settings.k8s.io/v1alpha1=true // 新增
--enable-admission-plugins=NodeRestriction,PodPreset // 追加
需要注意:
第一:如果集群是多 master,那么每个 master 都要修改。
第二:修改完 kube-apiserver.yaml 文件后,apiserver 会自动重启,因此需要等一段时间
3 PodPreset 创建
编写资源文件 pod-preset.yaml:
apiVersion: settings.k8s.io/v1alpha1
kind: PodPreset
metadata:
name: pod-env-preset
namespace: default
spec:
selector:
matchLabels:
app: nginx
volumeMounts:
- mountPath: /etc/localtime
name: localtime
volumes:
- name: localtime
hostPath:
path: /etc/localtime
创建 Podpreset 资源:
kubectl apply -f pod-preset.yaml
查看 Podpreset 资源:
kubectl get podpreset
4 PodPreset 验证
特别注意 PodPreset 作用范围是 namespace。所以在创建 pod 资源时,namespace 要正确:
编写资源文件 pod.yaml :
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: default
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
创建 pod 资源:
kubectl apply -f pod.yaml
创建 pod 成功后,进入 pod 容器查看时间:
kubectl exec -it nginx /bin/sh
自此,pod preset 时间修改被轻松完爆。