3.4 控制器之Pod

文章目录

  • 1、Job管理创建单个pod
  • 2、Job创建多个Pod
  • 3、设置job运行时间

k8s 提供了Job资源,Job可以控制pod只启动一次,等pod中内部进程结束后,容器不在重启,pod完成状态。Job控制的pod资源适合做一次任务。
当Job控制的Pod发生故障时,可以选择restartPolicy的重启策略进行重启,OnFailure失败时才会重启,或者不重启,不运行设置Always,因为Job适合只做一次就结束的任务。

1、Job管理创建单个pod

下面以job.yaml为例

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  template:
    metadata:
      name: mypod
    spec:
      containers:
      - name: my-busybox
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c", "sleep 60"]
      restartPolicy: OnFailure

下面创建并查看Job以及创建的pod

#创建Job
[root@k8s-master01 job_work]# kubectl create -f job.yaml
job.batch/myjob created

#查看创建的Job,COMPLETIONS显示创建了一个Pod,0个pod处于完成状态;DURATION显示Job任务持续了6s
[root@k8s-master01 job_work]# kubectl get job
NAME    COMPLETIONS   DURATION   AGE
myjob   0/1           6s         6s

#查看Job创建的pod
[root@k8s-master01 job_work]# kubectl get pod
NAME          READY   STATUS    RESTARTS   AGE
myjob-6rlwx   1/1     Running   0          11s

#过一段时间再查看,pod已经完成状态,并且没有再重启
[root@k8s-master01 job_work]# kubectl get pod
NAME          READY   STATUS      RESTARTS   AGE
myjob-6rlwx   0/1     Completed   0          103s

#创建的Job也显示已经完成
[root@k8s-master01 job_work]# kubectl get job
NAME    COMPLETIONS   DURATION   AGE
myjob   1/1           62s        109s

2、Job创建多个Pod

上述时一个作业任务创建一个pod进行工作,另外也可以创建多个Pod实例,并以并行或串行的方式运行。
下面以job1.yaml为例

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  completions: 3   	#完成myjob任务,创建3个pod
  parallelism: 2  	#同时有2个pod会并行执行,当结束一个后,会立即启动下一个
  template:
    metadata:
      name: mypod
    spec:
      restartPolicy: Never
      containers:
      - name: busybox
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c", "sleep 60"]

下面创建job

#创建job1
[root@k8s-master01 job_work]# kubectl create -f job1.yaml 
job.batch/myjob created

#查询创建的job,有3个pod尚未执行完成
[root@k8s-master01 job_work]# kubectl get job
NAME    COMPLETIONS   DURATION   AGE
myjob   0/3           5s         5s

#查询创建的pod,2个正在执行
[root@k8s-master01 job_work]# kubectl get pod -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
myjob-fnsr7   1/1     Running   0          12s   10.244.2.101   k8s-node02              
myjob-mt8gl   1/1     Running   0          12s   10.244.1.99    k8s-node01              

#60s后查询pod,有2个pod已经完成状态,一个正在创建中
[root@k8s-master01 job_work]# kubectl get pod -o wide
NAME          READY   STATUS              RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
myjob-9dbgf   0/1     ContainerCreating   0          0s             k8s-node01              
myjob-fnsr7   1/1     Running             0          62s   10.244.2.101   k8s-node02              
myjob-mt8gl   0/1     Completed           0          62s   10.244.1.99    k8s-node01              

#过一段时间再查询,2个pod已经完成状态,1个正在运行中,运行结束后job就完成了。
[root@k8s-master01 job_work]# kubectl get pod -o wide
NAME          READY   STATUS      RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
myjob-9dbgf   1/1     Running     0          3s    10.244.1.100   k8s-node01              
myjob-fnsr7   0/1     Completed   0          65s   10.244.2.101   k8s-node02              
myjob-mt8gl   0/1     Completed   0          65s   10.244.1.99    k8s-node01              

上述示例是pod并行执行任务,也可设置pod穿行执行任务,再上述基础上只需要配置completions: 3 ,3个pod会串行执行,此时parallelism为1,也可以显示的指定parallelism: 1 , 也会让3个pod串行执行。

另外也可以在job运行时,修改parallelism以达到修改job运行pod并行的个数

kubectl scale job myjob --replicas 3

3、设置job运行时间

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  activeDeadlineSeconds: 40  	#如果pod在40s内没有运行完成,pod标记失败
  backoffLimit: 3   			#pod重启次数
  completions: 3
  parallelism: 2
  template:
    metadata:
      name: mypod
    spec:
      restartPolicy: Never
      containers:
      - name: busybox
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c", "sleep 60"]

参考《kubenetes in action》

你可能感兴趣的:(k8s,Job,completions,parallelism)