kubernetes运行应用Controller3之Job、CronJob详解
成功启动一个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详解的更多相关文章
- Kubernetes K8S之资源控制器Job和CronJob详解
Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...
- ASP.NT运行原理和页面生命周期详解及其应用
ASP.NT运行原理和页面生命周期详解及其应用 1. 下面是我画的一张关于asp.net运行原理和页面生命周期的一张详解图.如果你对具体不太了解,请参照博客园其他帖子.在这里我主要讲解它的实际应用. ...
- [Spark內核] 第41课:Checkpoint彻底解密:Checkpoint的运行原理和源码实现彻底详解
本课主题 Checkpoint 运行原理图 Checkpoint 源码解析 引言 Checkpoint 到底是什么和需要用 Checkpoint 解决什么问题: Spark 在生产环境下经常会面临 T ...
- loadrunner 运行脚本-Run-time Settings-Browser Enmulation设置详解
运行脚本-Run-time Settings-Browser Enmulation设置详解 by:授客 QQ:1033553122 浏览器模拟 所有Internet Vuser Header包含一个标 ...
- Android中Activity运行时屏幕方向与显示方式详解
现在我们的手机一般都内置有方向感应器,手机屏幕会根据所处位置自动进行横竖屏切换(前提是未锁定屏幕方向).但有时我们的应用程序仅限在横屏或者竖屏状态下才可以运行,此时我们需要锁定该程序Activity运 ...
- Java(JVM运行时)各种内存区域详解及扩展
本文整理于 Java内存与垃圾回收调优 Java 堆内存 从几个sample来学习Java堆,方法区,Java栈和本地方法栈 首先来一张图让我们理清楚java运行时状态: 诚然,如上图所示:java ...
- 运行java的class文件方法详解
一.运行class文件 执行带main方法的class文件,命令行为:java <CLASS文件名>注意:CLASS文件名不要带文件后缀.class 例如: 复制代码代码如下: java ...
- Ubuntu 14.10 下运行进程实时监控pidstat命令详解
简介 pidstat主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存.设备IO.任务切换.线程等.pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上 ...
- [Kubernetes]PV,PVC,StorageClass之间的关系详解
在Kubernetes中,容器化一个应用比较麻烦的地方莫过于对其"状态"的管理,而最常见的"状态",莫过于存储状态. 在[Kubernetes]深入理解Stat ...
- Linux 运行进程实时监控pidstat命令详解
简介 pidstat主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存.设备IO.任务切换.线程等.pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上 ...
随机推荐
- C++ 用户输入与数据类型详解:建立基本计算器及变量类型
C++ 用户输入 你已经学习了 cout 用于输出(打印)值.现在我们将使用 cin 来获取用户输入. cin 是一个预定义变量,它使用提取运算符(>>)从键盘读取数据. 在下面的示例中, ...
- SQL 中的运算符与别名:使用示例和语法详解
SQL中的IN运算符 IN运算符允许您在WHERE子句中指定多个值,它是多个OR条件的简写. 示例:获取您自己的SQL Server 返回所有来自'Germany'.'France'或'UK'的客户: ...
- Matplotlib绘图设置---颜色条设置
设置颜色条 对于图形中由彩色的点.线.面构成的连续标签,用颜色条来表示的效果比较好,在Matplotlib中,颜色条是一个独立的坐标轴. 可视图形的颜色选择可参考matplotlib配色方案. Cho ...
- Numpy随机数组(random)
numpy.random()模块补充了Python内置random模块的一些功能,用于高效/高速生成一些概率分布的样本数组数据. In [1]: import numpy as np In [2]: ...
- 格式化字符串走过的坑 pwn109
格式化字符串走过的坑 pwn109 今天做的一道题有一个坑我调试半天终于打通了,格式化字符串的坑,确实不少,东西也比较多容易忘记,怎么说呢,功夫在平时,经验少了 老规矩先看一下保护 Full RELR ...
- IDEA社区版,真香!
IDEA(IntelliJ IDEA)是众多 Java 开发者的首选. 商业版的昂贵 IDEA 商业版(IntelliJ IDEA Ultimate)功能非常强大,能够满足 Java 开发的所有需求, ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(2)
1.问题描述: 开发服务端推送,客户端能收到离线推送,但是推送收到的通知只能从手机顶部下拉看到,无法收到一个顶部的弹框.请问是什么原因? 解决方案: 可能原因一: 消息提醒的方式与消息类别有关,比如: ...
- 前端与 HTML
0x1 前端 什么是前端 解决图形用户界面(GUI)人机交互的问题 跨终端 PC/移动浏览器 客户端/小程序 VR/AR 等 Web 技术栈 一句话总结前端工程师的工作:使用 Web 技术栈解决多端 ...
- 简述Linux磁盘IO
1.什么是磁盘 在讲解磁盘IO前,先简单说下什么是磁盘.磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘. 1.1 机械磁盘 第一类,机械磁盘,也称为硬盘驱动器 ...
- 剑指offer11(Java)-旋转数组中的最小值(简单)
题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转.请返回旋转数 ...