成功启动一个Job

1、Job.spec.template.metadata,没有空格符的错误

[machangwei@mcwk8s-master ~]$ cat mcwJob1.yml
apiVersion: batch/v1
kind: Job
metadata:
name: mcwJob
spec:
template:
metadata:
name:mcwJob
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: Never
[machangwei@mcwk8s-master ~]$ kubectl apply -f mcwJob1.yml
error: error validating "mcwJob1.yml": error validating data: ValidationError(Job.spec.template.metadata): invalid type for io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta: got "string", expected "map"; if you choose to ignore these errors, turn validation off with --validate=false Job.metadata.name 名字大写是错误的,Job.spec.template.metadata.name大写是可以的
[machangwei@mcwk8s-master ~]$ cat mcwJob1.yml
apiVersion: batch/v1
kind: Job
metadata:
name: mcwJob
spec:
template:
metadata:
name: mcwJob
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: Never
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$ kubectl apply -f mcwJob1.yml
The Job "mcwJob" is invalid: metadata.name: Invalid value: "mcwJob": a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')

正确编写格式的yml文件

[machangwei@mcwk8s-master ~]$ cat mcwJob1.yml  #文件
apiVersion: batch/v1
kind: Job
metadata:
name: mcw-job
spec:
template:
metadata:
name: mcwJob
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: Never
[machangwei@mcwk8s-master ~]$ kubectl apply -f mcwJob1.yml #启动Job
job.batch/mcw-job created
[machangwei@mcwk8s-master ~]$ kubectl get job #查看Job的状态
NAME COMPLETIONS DURATION AGE
mcw-job 0/1 16s 16s
[machangwei@mcwk8s-master ~]$ kubectl get pod ##已经完成的Job
NAME READY STATUS RESTARTS AGE
mcw-job-j8jtl 0/1 Completed 0 28s
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$ kubectl get job #已经完成
NAME COMPLETIONS DURATION AGE
mcw-job 1/1 24s 9m7s
[machangwei@mcwk8s-master ~]$ kubectl logs mcw-job-j8jtl #由于Firewalls阻挡,没有查出日志
Error from server: Get "https://10.0.0.6:10250/containerLogs/default/mcw-job-j8jtl/hello": dial tcp 10.0.0.6:10250: connect: no route to host
[machangwei@mcwk8s-master ~]$ kubectl logs mcw-job-j8jtl #去节点上将这个防火墙停掉,然后查看到日志打印信息
hello k8s job!
[machangwei@mcwk8s-master ~]$

Pod失败的情况

1、restartPolicy: Never

将command 中echo修改为invald_command
[machangwei@mcwk8s-master ~]$ cat mcwJob1.yml
apiVersion: batch/v1
kind: Job
metadata:
name: mcw-job
spec:
template:
metadata:
name: mcwJob
spec:
containers:
- name: hello
image: busybox
command: ["invald_command","hello k8s job!"]
restartPolicy: Never
[machangwei@mcwk8s-master ~]$ kubectl delete -f mcwJob1.yml #修改后,以文件做删除操作不影响。
job.batch "mcw-job" deleted
[machangwei@mcwk8s-master ~]$ kubectl get pod
No resources found in default namespace.
[machangwei@mcwk8s-master ~]$ kubectl apply -f mcwJob1.yml #启动Job
job.batch/mcw-job created
[machangwei@mcwk8s-master ~]$ kubectl get job #0/1 Job应该有一个,成功0个
NAME COMPLETIONS DURATION AGE
mcw-job 0/1 14s 14s
[machangwei@mcwk8s-master ~]$ kubectl get job -o wide
NAME COMPLETIONS DURATION AGE CONTAINERS IMAGES SELECTOR
mcw-job 0/1 25s 25s hello busybox controller-uid=1c2444d0-4f2f-4080-b13b-90a2f1c60fe7
[machangwei@mcwk8s-master ~]$ kubectl get pod #查看pod,很多个失败的.当第一个POD启动时容器失败退出,因为设置重启策略是从不,
NAME READY STATUS RESTARTS AGE #此失败容器不会重启,但是Job的pod需要成功一个目前没有成功的,
mcw-job-9bmvs 0/1 ContainerCannotRun 0 34s #不满足,索引controller会启动新的POD,直到有一个成功。
mcw-job-kz6s4 0/1 ContainerCreating 0 17s #而这里这个例子是永远不会成功
mcw-job-qxhs9 0/1 ContainerCannotRun 0 53s
[machangwei@mcwk8s-master ~]$ kubectl describe pod mcw-job-qxhs9 #查看一个失败pod详情
Name: mcw-job-qxhs9
Namespace: default
Priority: 0
Node: mcwk8s-node2/10.0.0.6
Start Time: Tue, 18 Jan 2022 22:24:41 +0800
Labels: controller-uid=1c2444d0-4f2f-4080-b13b-90a2f1c60fe7
job-name=mcw-job
Annotations: <none>
Status: Failed
IP: 10.244.0.23
IPs:
IP: 10.244.0.23
Controlled By: Job/mcw-job
Containers:
hello:
Container ID: docker://4b795658c37e4a29fc410dd0a81a2fff6977393cf35b58bfea168e10c8e0b30e
Image: busybox
Image ID: docker-pullable://busybox@sha256:5acba83a746c7608ed544dc1533b87c737a0b0fb730301639a0179f9344b1678
Port: <none>
Host Port: <none>
Command:
invald_command
hello k8s job!
State: Terminated
Reason: ContainerCannotRun
Message: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "invald_command": executable file not found in $PATH: unknown
Exit Code: 127
Started: Tue, 18 Jan 2022 22:24:58 +0800
Finished: Tue, 18 Jan 2022 22:24:58 +0800
Ready: False
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-7jxxj (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
kube-api-access-7jxxj:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 79s default-scheduler Successfully assigned default/mcw-job-qxhs9 to mcwk8s-node2
Normal Pulling 79s kubelet Pulling image "busybox"
Normal Pulled 63s kubelet Successfully pulled image "busybox" in 16.107623367s
Normal Created 63s kubelet Created container hello
Warning Failed 62s kubelet Error: failed to start container "hello": Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "invald_command": executable file not found in $PATH: unknown #失败时执行文件没有找到,符合预期

2、restartPolicy: OnFailure

[machangwei@mcwk8s-master ~]$ kubectl delete -f mcwJob1.yml  #将之前的删掉
job.batch "mcw-job" deleted
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$ vim mcwJob1.yml
[machangwei@mcwk8s-master ~]$ cat mcwJob1.yml #修改重启策略为OnFailure,
apiVersion: batch/v1
kind: Job
metadata:
name: mcw-job
spec:
template:
metadata:
name: mcwJob
spec:
containers:
- name: hello
image: busybox
command: ["invald_command","hello k8s job!"]
restartPolicy: OnFailure
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$ kubectl apply -f mcwJob1.yml #启动Job
job.batch/mcw-job created
[machangwei@mcwk8s-master ~]$ kubectl get job
NAME COMPLETIONS DURATION AGE
mcw-job 0/1 9s 9s
[machangwei@mcwk8s-master ~]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
mcw-job-dmxrj 0/1 RunContainerError 0 (9s ago) 26s
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$ kubectl get pod #过一段时间查看POD,没有启动成功,会重启.(RESTARTS增加)
NAME READY STATUS RESTARTS AGE
mcw-job-dmxrj 0/1 CrashLoopBackOff 1 (21s ago) 54s
[machangwei@mcwk8s-master ~]$ kubectl get pod #再过段时间查看,已经没有pod了,也没有重启
No resources found in default namespace.
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$ kubectl get job #job还在。这是设置的重启策略,失败的时候,默认最多重启三次,三次重启后还不行就不会重启了
NAME COMPLETIONS DURATION AGE
mcw-job 0/1 14m 14m

Job的并行性(并行处理场景,批处理程序)

如果不指定paralelism和completions,默认值均为1

1、paralelism,Job中并发pod数量

[machangwei@mcwk8s-master ~]$ vim mcwJob1.yml
[machangwei@mcwk8s-master ~]$ cat mcwJob1.yml #添加paralelism,设置并行Pod数量为2,
apiVersion: batch/v1
kind: Job
metadata:
name: mcw-job
spec:
parallelism: 2
template:
metadata:
name: mcwJob
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: OnFailure
[machangwei@mcwk8s-master ~]$ kubectl apply -f mcwJob1.yml
job.batch/mcw-job created
[machangwei@mcwk8s-master ~]$ kubectl get job
NAME COMPLETIONS DURATION AGE
mcw-job 0/1 of 2 7s 7s
[machangwei@mcwk8s-master ~]$ kubectl get job #这里显示1/1 of 2
NAME COMPLETIONS DURATION AGE
mcw-job 1/1 of 2 19s 19s
[machangwei@mcwk8s-master ~]$ kubectl get pod #Job一共启动了两个pod,而且age相同,可见是并行运行的。
NAME READY STATUS RESTARTS AGE
mcw-job-d726g 0/1 Completed 0 34s
mcw-job-wlnp4 0/1 Completed 0 34s
[machangwei@mcwk8s-master ~]$ kubectl get job #这里显示2/1 of 2 NAME COMPLETIONS DURATION AGE
mcw-job 2/1 of 2 19s 51s

2、completions  Job中成功完成pod总数,可以配合使用parallelism

[machangwei@mcwk8s-master ~]$ cat mcwJob1.yml  #设置Job成功完成pod总数为6,每次运行两个pod
apiVersion: batch/v1
kind: Job
metadata:
name: mcw-job
spec:
completions: 6
parallelism: 2
template:
metadata:
name: mcwJob
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: OnFailure
[machangwei@mcwk8s-master ~]$ kubectl apply -f mcwJob1.yml
job.batch/mcw-job created
[machangwei@mcwk8s-master ~]$ kubectl get job
NAME COMPLETIONS DURATION AGE
mcw-job 0/6 5s 5s
[machangwei@mcwk8s-master ~]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
mcw-job-7zxf7 0/1 ContainerCreating 0 16s
mcw-job-dqhhw 0/1 ContainerCreating 0 16s
[machangwei@mcwk8s-master ~]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
mcw-job-4xtqm 0/1 ContainerCreating 0 5s
mcw-job-7zxf7 0/1 Completed 0 22s
mcw-job-dqhhw 0/1 Completed 0 22s
mcw-job-x8crl 0/1 ContainerCreating 0 4s
[machangwei@mcwk8s-master ~]$ kubectl get job #由job和pod每次都是两个两个创建和完成,AGE两个两个的一致
NAME COMPLETIONS DURATION AGE #可知,每次运行两个pod。总共需要成功完成pod总数为6
mcw-job 2/6 29s 29s
[machangwei@mcwk8s-master ~]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
mcw-job-4xtqm 0/1 Completed 0 20s
mcw-job-7zxf7 0/1 Completed 0 37s
mcw-job-c9qq2 0/1 ContainerCreating 0 3s
mcw-job-dqhhw 0/1 Completed 0 37s
mcw-job-jj5xj 0/1 ContainerCreating 0 2s
mcw-job-x8crl 0/1 Completed 0 19s
[machangwei@mcwk8s-master ~]$ kubectl get job
NAME COMPLETIONS DURATION AGE
mcw-job 4/6 43s 43s
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$ kubectl get job
NAME COMPLETIONS DURATION AGE
mcw-job 6/6 53s 55s
[machangwei@mcwk8s-master ~]$ kubectl get pod -o wide #job的运行,是分配到节点上去了的
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mcw-job-4xtqm 0/1 Completed 0 46s 10.244.0.29 mcwk8s-node2 <none> <none>
mcw-job-7zxf7 0/1 Completed 0 63s 10.244.0.28 mcwk8s-node2 <none> <none>
mcw-job-c9qq2 0/1 Completed 0 29s 10.244.0.30 mcwk8s-node2 <none> <none>
mcw-job-dqhhw 0/1 Completed 0 63s 10.244.0.26 mcwk8s-node1 <none> <none>
mcw-job-jj5xj 0/1 Completed 0 28s 10.244.0.28 mcwk8s-node1 <none> <none>
mcw-job-x8crl 0/1 Completed 0 45s 10.244.0.27 mcwk8s-node1 <none> <none> [machangwei@mcwk8s-master ~]$ kubectl get job #删除job也可以这样删除
NAME COMPLETIONS DURATION AGE
mcw-job 6/6 53s 43m
[machangwei@mcwk8s-master ~]$ kubectl delete job mcw-job
job.batch "mcw-job" deleted
[machangwei@mcwk8s-master ~]$ kubectl get job
No resources found in default namespace.
[machangwei@mcwk8s-master ~]$ kubectl get job
No resources found in default namespace.

定时Job (CronJob)

1、错误的定时任务(配置apiserver出错以及恢复)

[machangwei@mcwk8s-master ~]$ cat mcwCron.yml
apiVersion: batch/v2alpha1
kind: CronJob
metadata:
name: mcw-dingshi-hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: OnFailure
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$ kubectl apply -f mcwCron.yml
error: unable to recognize "mcwCron.yml": no matches for kind "CronJob" in version "batch/v2alpha1"
[machangwei@mcwk8s-master ~]$ ls /etc/kubernetes/
admin.conf controller-manager.conf kubelet.conf manifests pki scheduler.conf
[machangwei@mcwk8s-master ~]$ ls /etc/kubernetes/pki/
apiserver.crt apiserver-etcd-client.key apiserver-kubelet-client.crt ca.crt etcd front-proxy-ca.key front-proxy-client.key sa.pub
apiserver-etcd-client.crt apiserver.key apiserver-kubelet-client.key ca.key front-proxy-ca.crt front-proxy-client.crt sa.key
[machangwei@mcwk8s-master ~]$ ls /etc/kubernetes/manifests/
etcd.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml
[machangwei@mcwk8s-master ~]$ ls /etc/kubernetes/manifests/kube-apiserver.yaml
/etc/kubernetes/manifests/kube-apiserver.yaml
[machangwei@mcwk8s-master ~]$ vim /etc/kubernetes/manifests/kube-apiserver.yaml
[machangwei@mcwk8s-master ~]$ ll /etc/kubernetes/manifests/kube-apiserver.yaml
-rw-------. 1 root root 3347 Jan 12 23:14 /etc/kubernetes/manifests/kube-apiserver.yaml 在root用户下,进入/etc/kubernetes/manifests/kube-apiserver.yaml
在它下面添加- --runtime-config=batch/v2alpha1=true
- kube-apiserver [root@mcwk8s-master ~]$ systemctl restart kubelet.service #重启,k8s_kube-apiserver_kube-apiserver起不来
[root@mcwk8s-master ~]$ docker logs 8126c
I0118 16:15:48.702168 1 server.go:565] external host was not specified, using 10.0.0.4
I0118 16:15:48.703312 1 server.go:172] Version: v1.23.1
E0118 16:15:49.581300 1 run.go:120] "command failed" err="group version batch/v2alpha1 that has not been registered" 普通用户下,也获取不到pod等信息
[machangwei@mcwk8s-master ~]$ kubectl get pod --all-namespaces
The connection to the server 10.0.0.4:6443 was refused - did you specify the right host or port? 删除添加的配置后,apiserver起来了。重启kukelet,这下面四个都会重启,但是短时间内第二次重启kubectl,有两个不是再次重启的
[root@mcwk8s-master ~]$ docker ps |grep minute
8cbb9bf1332b b6d7abedde39 "kube-apiserver --ad…" 4 minutes ago Up 4 minutes k8s_kube-apiserver_kube-apiserver-mcwk8s-master_kube-system_429285c0d2c92c23be02783c184635f6_2
4cffcd921d7a registry.aliyuncs.com/google_containers/pause:3.6 "/pause" 4 minutes ago Up 4 minutes k8s_POD_kube-apiserver-mcwk8s-master_kube-system_429285c0d2c92c23be02783c184635f6_1
dba80e8b1fce f51846a4fd28 "kube-controller-man…" 13 minutes ago Up 13 minutes k8s_kube-controller-manager_kube-controller-manager-mcwk8s-master_kube-system_d9f17dcbf3b105928155bc45fff440a9_8
1e6ff9100c86 71d575efe628 "kube-scheduler --au…" 13 minutes ago Up 13 minutes k8s_kube-scheduler_kube-scheduler-mcwk8s-master_kube-system_119aedc9dc885d479086cea38d1a8061_9
[root@mcwk8s-master ~]$ [root@mcwk8s-master ~]$ docker ps |grep minute|awk '{print $NF}' #重启的四个服务
k8s_kube-apiserver_kube-apiserver-mcwk8s-master_kube-system_429285c0d2c92c23be02783c184635f6_2
k8s_POD_kube-apiserver-mcwk8s-master_kube-system_429285c0d2c92c23be02783c184635f6_1
k8s_kube-controller-manager_kube-controller-manager-mcwk8s-master_kube-system_d9f17dcbf3b105928155bc45fff440a9_8
k8s_kube-scheduler_kube-scheduler-mcwk8s-master_kube-system_119aedc9dc885d479086cea38d1a8061_9
[root@mcwk8s-master ~]$ 再次看,已经好了
[machangwei@mcwk8s-master ~]$ kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6d8c4cb4d-cnj2t 1/1 Running 0 6d1h

2、正确的写法:

查看api版本
[machangwei@mcwk8s-master ~]$ kubectl api-versions #这里要使用batch/v1beta1作为定时任务的版本,就可以成功了,v1我不知道行不行,没试过,有时间验证下
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1
coordination.k8s.io/v1
discovery.k8s.io/v1
discovery.k8s.io/v1beta1
events.k8s.io/v1
events.k8s.io/v1beta1
flowcontrol.apiserver.k8s.io/v1beta1
flowcontrol.apiserver.k8s.io/v1beta2
networking.k8s.io/v1
node.k8s.io/v1
node.k8s.io/v1beta1
policy/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
scheduling.k8s.io/v1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1 查看定时任务yml文件
[machangwei@mcwk8s-master ~]$ cat mcwCron.yml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: mcw-dingshi-hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: OnFailure
[machangwei@mcwk8s-master ~]$ kubectl apply -f mcwCron.yml #成功创建定时任务
Warning: batch/v1beta1 CronJob is deprecated in v1.21+, unavailable in v1.25+; use batch/v1 CronJob
cronjob.batch/mcw-dingshi-hello created
[machangwei@mcwk8s-master ~]$ kubectl get cronjob #查看定时任务
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
mcw-dingshi-hello */1 * * * * False 0 27s 36s
[machangwei@mcwk8s-master ~]$ kubectl get pod #查看pod,已经有一个已经完成了
NAME READY STATUS RESTARTS AGE
mcw-dingshi-hello-27375392-l5j7n 0/1 Completed 0 46s
[machangwei@mcwk8s-master ~]$ kubectl get jobs #查看jobs,已经完成了一个,时间到第二分钟(这里周期是1分钟)
NAME COMPLETIONS DURATION AGE #就开始创建第二个任务
mcw-dingshi-hello-27375392 1/1 17s 64s
mcw-dingshi-hello-27375393 0/1 4s 4s
[machangwei@mcwk8s-master ~]$ kubectl get pod #第二个pod开始创建
NAME READY STATUS RESTARTS AGE
mcw-dingshi-hello-27375392-l5j7n 0/1 Completed 0 70s
mcw-dingshi-hello-27375393-l99l2 0/1 ContainerCreating 0 10s
[machangwei@mcwk8s-master ~]$ kubectl get pod #第二个完成
NAME READY STATUS RESTARTS AGE
mcw-dingshi-hello-27375392-l5j7n 0/1 Completed 0 98s
mcw-dingshi-hello-27375393-l99l2 0/1 Completed 0 38s
[machangwei@mcwk8s-master ~]$ kubectl get jobs #每隔一分钟启动一个job
NAME COMPLETIONS DURATION AGE
mcw-dingshi-hello-27375392 1/1 17s 2m
mcw-dingshi-hello-27375393 1/1 17s 60s
mcw-dingshi-hello-27375394 0/1 0s 0s
[machangwei@mcwk8s-master ~]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
mcw-dingshi-hello-27375392-l5j7n 0/1 Completed 0 2m52s
mcw-dingshi-hello-27375393-l99l2 0/1 Completed 0 112s
mcw-dingshi-hello-27375394-ddm8s 0/1 Completed 0 52s
[machangwei@mcwk8s-master ~]$ kubectl logs mcw-dingshi-hello-27375394-ddm8s #主节点上查看其中一个pod的打印信息
hello k8s job! 也可以找到mcw-dingshi-hello-27375393-l99l2第一个pod,到它所在的节点查看容器打印,
[machangwei@mcwk8s-master ~]$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mcw-dingshi-hello-27375393-l99l2 0/1 Completed 0 2m30s 10.244.0.31 mcwk8s-node2 <none> <none>
mcw-dingshi-hello-27375394-ddm8s 0/1 Completed 0 90s 10.244.0.30 mcwk8s-node1 <none> <none>
mcw-dingshi-hello-27375395-wxt48 0/1 Completed 0 30s 10.244.0.32 mcwk8s-node2 <none> <none>
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$ 打印结果如下,相同
[root@mcwk8s-node2 ~]$ docker ps -a|grep 27375393
4a46ea160748 busybox "echo 'hello k8s job…" 2 minutes ago Exited (0) 2 minutes ago k8s_hello_mcw-dingshi-hello-27375393-l99l2_default_21d0c1ea-47cd-4394-89ae-cbc8e2f94bfd_0
848a1b050f0d registry.aliyuncs.com/google_containers/pause:3.6 "/pause" 3 minutes ago Exited (0) 2 minutes ago k8s_POD_mcw-dingshi-hello-27375393-l99l2_default_21d0c1ea-47cd-4394-89ae-cbc8e2f94bfd_0
[root@mcwk8s-node2 ~]$ docker logs 4a46ea
hello k8s job!
[root@mcwk8s-node
[root@mcwk8s-node2 ~]$ docker ps -a|grep 27375393 #再过一段时间,这个退出的容器已经被删除了。
[root@mcwk8s-node2 ~]$

3、定时任务解释:

apiVersion: batch/v1beta1 #当前CronJob的apiVersion
kind: CronJob #当前资源类型
metadata:
name: mcw-dingshi-hello
spec:
schedule: "*/1 * * * *" #指定什么时候运行Job。与Linux的定时任务一样的配置
jobTemplate: #定义Job的模板,格式与前面的Job一致
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: OnFailure

4、系统apiserver用的kube-apiserver.yaml

[root@mcwk8s-master ~]$ cat /etc/kubernetes/manifests/kube-apiserver.yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 10.0.0.4:6443
creationTimestamp: null
labels:
component: kube-apiserver
tier: control-plane
name: kube-apiserver
namespace: kube-system
spec:
containers:
- command:
- kube-apiserver
- --advertise-address=10.0.0.4
- --allow-privileged=true
- --authorization-mode=Node,RBAC
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --enable-admission-plugins=NodeRestriction
- --enable-bootstrap-token-auth=true
- --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
- --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
- --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
- --etcd-servers=https://127.0.0.1:2379
- --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
- --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
- --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
- --requestheader-allowed-names=front-proxy-client
- --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
- --requestheader-extra-headers-prefix=X-Remote-Extra-
- --requestheader-group-headers=X-Remote-Group
- --requestheader-username-headers=X-Remote-User
- --secure-port=6443
- --service-account-issuer=https://kubernetes.default.svc.cluster.local
- --service-account-key-file=/etc/kubernetes/pki/sa.pub
- --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
- --service-cluster-ip-range=10.96.0.0/12
- --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
- --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
image: registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.1
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: 8
httpGet:
host: 10.0.0.4
path: /livez
port: 6443
scheme: HTTPS
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 15
name: kube-apiserver
readinessProbe:
failureThreshold: 3
httpGet:
host: 10.0.0.4
path: /readyz
port: 6443
scheme: HTTPS
periodSeconds: 1
timeoutSeconds: 15
resources:
requests:
cpu: 250m
startupProbe:
failureThreshold: 24
httpGet:
host: 10.0.0.4
path: /livez
port: 6443
scheme: HTTPS
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 15
volumeMounts:
- mountPath: /etc/ssl/certs
name: ca-certs
readOnly: true
- mountPath: /etc/pki
name: etc-pki
readOnly: true
- mountPath: /etc/kubernetes/pki
name: k8s-certs
readOnly: true
hostNetwork: true
priorityClassName: system-node-critical
securityContext:
seccompProfile:
type: RuntimeDefault
volumes:
- hostPath:
path: /etc/ssl/certs
type: DirectoryOrCreate
name: ca-certs
- hostPath:
path: /etc/pki
type: DirectoryOrCreate
name: etc-pki
- hostPath:
path: /etc/kubernetes/pki
type: DirectoryOrCreate
name: k8s-certs
status: {}

5、删除定时任务工作

[machangwei@mcwk8s-master ~]$ kubectl get job
NAME COMPLETIONS DURATION AGE
mcw-dingshi-hello-27376679 1/1 107s 2m30s
mcw-dingshi-hello-27376680 1/1 47s 90s
mcw-dingshi-hello-27376681 1/1 22s 30s
[machangwei@mcwk8s-master ~]$ kubectl get Cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
mcw-dingshi-hello */1 * * * * False 0 40s 21h
[machangwei@mcwk8s-master ~]$ kubectl delete Cronjob mcw-dingshi-hello
cronjob.batch "mcw-dingshi-hello" deleted
[machangwei@mcwk8s-master ~]$ kubectl get job
No resources found in default namespace.
[machangwei@mcwk8s-master ~]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
mcw-dingshi-hello-27376682-fq7l7 0/1 Terminating 0 11s
[machangwei@mcwk8s-master ~]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
mcw-dingshi-hello-27376682-fq7l7 0/1 Terminating 0 18s
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$
[machangwei@mcwk8s-master ~]$ kubectl get pod
No resources found in default namespace.

kubernetes运行应用Controller3之Job、CronJob详解的更多相关文章

  1. Kubernetes K8S之资源控制器Job和CronJob详解

    Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  2. ASP.NT运行原理和页面生命周期详解及其应用

    ASP.NT运行原理和页面生命周期详解及其应用 1. 下面是我画的一张关于asp.net运行原理和页面生命周期的一张详解图.如果你对具体不太了解,请参照博客园其他帖子.在这里我主要讲解它的实际应用.  ...

  3. [Spark內核] 第41课:Checkpoint彻底解密:Checkpoint的运行原理和源码实现彻底详解

    本课主题 Checkpoint 运行原理图 Checkpoint 源码解析 引言 Checkpoint 到底是什么和需要用 Checkpoint 解决什么问题: Spark 在生产环境下经常会面临 T ...

  4. loadrunner 运行脚本-Run-time Settings-Browser Enmulation设置详解

    运行脚本-Run-time Settings-Browser Enmulation设置详解 by:授客 QQ:1033553122 浏览器模拟 所有Internet Vuser Header包含一个标 ...

  5. Android中Activity运行时屏幕方向与显示方式详解

    现在我们的手机一般都内置有方向感应器,手机屏幕会根据所处位置自动进行横竖屏切换(前提是未锁定屏幕方向).但有时我们的应用程序仅限在横屏或者竖屏状态下才可以运行,此时我们需要锁定该程序Activity运 ...

  6. Java(JVM运行时)各种内存区域详解及扩展

    本文整理于  Java内存与垃圾回收调优 Java 堆内存 从几个sample来学习Java堆,方法区,Java栈和本地方法栈 首先来一张图让我们理清楚java运行时状态: 诚然,如上图所示:java ...

  7. 运行java的class文件方法详解

    一.运行class文件 执行带main方法的class文件,命令行为:java <CLASS文件名>注意:CLASS文件名不要带文件后缀.class 例如: 复制代码代码如下: java ...

  8. Ubuntu 14.10 下运行进程实时监控pidstat命令详解

    简介 pidstat主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存.设备IO.任务切换.线程等.pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上 ...

  9. [Kubernetes]PV,PVC,StorageClass之间的关系详解

    在Kubernetes中,容器化一个应用比较麻烦的地方莫过于对其"状态"的管理,而最常见的"状态",莫过于存储状态. 在[Kubernetes]深入理解Stat ...

  10. Linux 运行进程实时监控pidstat命令详解

    简介 pidstat主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存.设备IO.任务切换.线程等.pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上 ...

随机推荐

  1. 一文弄懂EnumMap和EnumSet

    目录 简介 EnumMap 什么时候使用EnumMap EnumSet 总结 一文弄懂EnumMap和EnumSet 简介 一般来说我们会选择使用HashMap来存储key-value格式的数据,考虑 ...

  2. OpenHarmony 官网文档有哪些上新?上篇:应用开发文档上新

    随着 OpenAtom OpenHarmony(以下简称"OpenHarmony")系统能力持续升级,已具备支撑复杂带屏标准设备和应用开发的基础能力.相较于旧版本,OpenHarm ...

  3. 如何通过OpenHarmony系统中集成的ffmpeg库和NAPI机制,实现更多的多媒体功能?

    简介 OpenAtom OpenHarmony(以下简称"OpenHarmony")作为"开源"世界的"连接器",不断为智能社会的发展提供源 ...

  4. Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--可视化编辑pdf

    Pdfium.Net.Free 支持 .NETFramework 4.0 .NETFramework 4.5 .NETStandard 2.0 .Net8.0 可以和PdfiumViewer.Free ...

  5. 使用yum安装unixODBC时报错怎么办

    使用 yum 安装 unixODBC 时报错怎么办 背景介绍 在使用 yum 安装 unixODBC 时,上报如下错误: [root@mc0-0002 odbc_connection]# yum in ...

  6. ArkUI新能力,助力应用开发更便捷

    原文链接:https://mp.weixin.qq.com/s/TAuq1WC6435ebn6L61rZAA,点击链接查看更多技术内容:    ArkUI是一套构建分布式应用的声明式UI开发框架.它具 ...

  7. 报表如何批量导出成 excel 文件

    需求说明 报表展现后可以通过工具栏中的导出按钮将当前展现的报表导出成 excel 文件,但是在实际使用中通常会要求报表不需要展现,直接通过一些操作将报表导出成 excel 文件,并且往往会要求批量导出 ...

  8. js es6 map weakmap

    前言 这里介绍一些map和weakmap的一些属性和他们不同之处. 正文 map JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键.这 ...

  9. 使用electron的demo时遇到的错误

    使用electron的demo时的错误 Electron | Build cross-platform desktop apps with JavaScript, HTML, and CSS. (el ...

  10. 全链路灰度新功能:MSE上线配置标签推送

    简介: 微服务场景下,全链路灰度作为一种低成本的新功能验证方式,得到了越来越广泛的应用.除了微服务实例和流量的灰度,微服务应用中的配置项也应该具备相应的灰度能力,以应对灰度应用对特殊配置的诉求. 为什 ...