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
posted @ 2020-09-04 15:10  klvchen  阅读(484)  评论(0)    收藏  举报