k8s initContainers emptyDir 例子
initContainers 可以依次执行 containers 。它是在 containers 运行前,执行的初始化操作,依次结束运行并且无异常后,正式的 containers 才会运行。利用这一点,可以实现多个任务的依次执行,把前面的任务写到 initContainers、最后一个任务写到containers 即可。
emptyDir 可以在同一个 containers 下的 pod 中共享
vi demo.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: sequential-jobs
spec:
backoffLimit: 0
template:
spec:
restartPolicy: Never
initContainers:
- name: job-1
image: alpine:3.11
command:
- 'sh'
- '-c'
- >
for i in 1 2 3;
do
echo "job-1 `date`";
sleep 1s;
done;
echo code > /srv/input/code
volumeMounts:
- mountPath: /srv/input/
name: input
- name: job-2
image: alpine:3.11
command:
- 'sh'
- '-c'
- >
for i in 1 2 3;
do
echo "job-2 `date`";
sleep 1s;
done;
cat /srv/input/code &&
echo artifact > /srv/input/output/artifact
resources:
requests:
cpu: 3
volumeMounts:
- mountPath: /srv/input/
name: input
- mountPath: /srv/input/output/
name: output
containers:
- name: job-3
image: alpine:3.11
command:
- 'sh'
- '-c'
- >
echo "job-1 and job-2 completed";
sleep 3s;
cat /srv/output/artifact
volumeMounts:
- mountPath: /srv/output/
name: output
volumes:
- name: input
emptyDir: {}
- name: output
emptyDir: {}
securityContext:
runAsUser: 2000
runAsGroup: 2000
fsGroup: 2000
backoffLimit: 0,这句指定这个Job不要失败重启。
volumes这部分,使用了input和output两个emptyDir,作为输入输出。
securityContext可以在镜像默认用户不确定的情况下,使用指定UID进行 Volume 操作,避免对root的依赖。
kubectl logs sequential-jobs-kmpvq job-1
job-1 Fri Sep 4 06:08:24 UTC 2020
job-1 Fri Sep 4 06:08:25 UTC 2020
job-1 Fri Sep 4 06:08:26 UTC 2020
kubectl logs sequential-jobs-kmpvq job-2
job-2 Fri Sep 4 06:08:28 UTC 2020
job-2 Fri Sep 4 06:08:29 UTC 2020
job-2 Fri Sep 4 06:08:30 UTC 2020
code
kubectl logs sequential-jobs-kmpvq job-3
job-1 and job-2 completed
artifact

浙公网安备 33010602011771号