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将显示自上 ...
随机推荐
- SQL 数据库语句- 创建和管理数据库
SQL CREATE DATABASE 语句 SQL CREATE DATABASE 语句用于创建一个新的 SQL 数据库. 语法 CREATE DATABASE 数据库名称; 示例 以下 SQL 语 ...
- HDD与你相约深圳,一起探讨创新开发与运营增长
12月14日,HUAWEI Developer Day(以下简称HDD)将在深圳与广大开发者见面.本次HDD共设有主论坛.两个分论坛及两个闭门会议,期待各位开发者前来参加. 精彩预告 01·主论坛 在 ...
- 报名开启 | HarmonyOS第一课“营”在暑期系列直播
<HarmonyOS第一课>2023年再次启航! 特邀HarmonyOS布道师云集华为开发者联盟直播间 聚焦HarmonyOS 4版本新特性 邀您一同学习赢好礼! 你准备好了吗? ↓↓↓预 ...
- ArkUI,更高效的框架设计
原文:https://mp.weixin.qq.com/s/uSIzuBby7Z92drNDmejKXw,点击链接查看更多技术内容. 上期文章我们讲到了ArkUI的三大特性,同时提到了Ark ...
- Blocks(单调栈)
题干中说每次选择一个大于k的数,还要选他左右两个数其中之一加上一,最后问你最长的每个数不小于K的子序列. 这些都是障眼法,其实就是问你最长的平均值大于或等于K的最长子序列,这样就明朗了. 接下来就是找 ...
- 抓包整理外篇——————https 抓包 [ 五]
前言 简单介绍一下https 抓包. 正文 可能有人一开始的时候发现抓包都抓不到,原因也很简单,那是因为https 需要解密. 那么为什么https 不解密呢? 那是因为证书信任问题. 下面先介绍,上 ...
- 实用的SpringBoot生成License方案
前言 License指的是版权许可证,当我们开发完系统后,如果不想让用户一直白嫖使用,比如说按时间续费,License的作用就有了. 我们可以给系统指定License的有效期,控制系统的可用时间. 那 ...
- java 后台获取文件上传的真实扩展名
package common.util; import java.io.File; import org.apache.commons.io.FileUtils; import org.apache. ...
- 国内首家!百度智能云宣布支持Llama3全系列训练推理
继18日Llama3的8B.70B大模型发布后,百度智能云千帆大模型平台19日宣布在国内首家推出针对Llama3全系列版本的训练推理方案,便于开发者进行再训练,搭建专属大模型,现已开放邀约测试. 目前 ...
- 力扣619(MySQL)-只出现一次的最大数字(简单)
题目: MyNumbers 表: 单一数字 是在 MyNumbers 表中只出现一次的数字. 请你编写一个 SQL 查询来报告最大的 单一数字 .如果不存在 单一数字 ,查询需报告 null . 查询 ...