您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
29.资源控制器 - Daemonset、Job、CronJob
发布时间:2022-12-19 00:01:00编辑:雪饮阅读()
Step1
首先清除下上篇中建立的pi的pod,因为建立时候镜像手动过程太久,pod早已超过重启次数,所以不会再次因为你手动加载了镜像就自动完成的。
我们需要删除之前的pod并重新创建
[root@k8s-master01 ~]# kubectl delete pod --all
pod "deamonset-example-k7rrx" deleted
pod "deamonset-example-zr2dj" deleted
pod "nginx-deployment-5df65767f-28v7g" deleted
pod "nginx-deployment-5df65767f-c74cg" deleted
pod "nginx-deployment-5df65767f-n4gl9" deleted
pod "pi-258sj" deleted
pod "pi-2x6wj" deleted
pod "pi-7nmxt" deleted
pod "pi-dcg6d" deleted
pod "pi-hkbzv" deleted
pod "pi-r7chg" deleted
也不知道为什么出现了这么多pi的pod,可能是之前那个建立pi的pod的模板上面有很多副本数的设定吧。
以及对应的job
[root@k8s-master01 ~]# kubectl delete job pi
job.batch "pi" deleted
然后重新创建
[root@k8s-master01 ~]# kubectl create -f job.yaml
job.batch/pi created
实际上这样还是打脸的。。。
会出现大概是3个pod都是pi开头的,然后都是错误的,不是正常状态。
这里经过本人直觉并经过验证应该是perl镜像虽然是本地手动创建,但是也用的是latest。所以我根据老师视频文件的第一次创建时间应该是在2019年,我在docker-hub上找到
perl:5.26.3-threaded这个版本的tag应该是比较接近的。
于是变更job.yaml模板
[root@k8s-master01 ~]# cat job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
name: pi
spec:
containers:
- name: pi
image: perl:5.26.3-threaded
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
然后再次创建
kubectl create -f job.yaml
稍等比较长的时间后
可以看到已经有了
[root@k8s-master01 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
deamonset-example-6xk4s 1/1 Running 0 9m42s 10.224.1.90 k8s-node01 <none> <none>
deamonset-example-zp95l 1/1 Running 0 9m40s 10.224.2.75 k8s-node02 <none> <none>
nginx-deployment-5df65767f-2wc5l 1/1 Running 0 9m44s 10.224.2.73 k8s-node02 <none> <none>
nginx-deployment-5df65767f-sthvk 1/1 Running 0 9m44s 10.224.1.89 k8s-node01 <none> <none>
nginx-deployment-5df65767f-x9qjt 1/1 Running 0 9m44s 10.224.2.74 k8s-node02 <none> <none>
pi-tdkwn 0/1 Completed 0 8m36s 10.224.2.76 k8s-node02 <none> <none>
虽然ready是0/1,但是status是completed,和老师视频上是一样的
Step2
查看这个pod的日志,是pi的2000位计算
[root@k8s-master01 ~]# kubectl log -f pi-tdkwn
log is DEPRECATED and will be removed in a future version. Use logs instead.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275898
然后查看job,完成度是1/1
[root@k8s-master01 ~]# kubectl get job
NAME COMPLETIONS DURATION AGE
pi 1/1 4m26s 15m
Step3
创建cronjob的模板
[root@k8s-master01 ~]# cat cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/ sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
然后创建cron job
[root@k8s-master01 ~]# kubectl apply -f cronjob.yaml
cronjob.batch/hello created
接下来我们同样也先做下清理工作(与这里应也是没有关系,只是看起来更没有心智负担)
[root@k8s-master01 ~]# kubectl delete job pi
job.batch "pi" deleted
[root@k8s-master01 ~]# kubectl delete deployment --all
deployment.extensions "nginx-deployment" deleted
[root@k8s-master01 ~]# kubectl delete daemonset --all
daemonset.extensions "deamonset-example" deleted
当然这个错误仍旧在,未见到老师处理
[root@k8s-master01 ~]# kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 3 44s 3m28s
这里应该也是有如下错误的
[root@k8s-master01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-1671376440-68qq7 0/1 CrashLoopBackOff 4 3m27s
hello-1671376500-h6lgv 0/1 CrashLoopBackOff 4 2m27s
hello-1671376560-5xp2f 0/1 CrashLoopBackOff 3 87s
hello-1671376620-25cr7 0/1 RunContainerError 1 27s
只是老师也没有处理,好像这两项都不太重要,对于这个cronjob吧
按理来说接下来这个一分钟后应该是至少有一个的ready应该是1/1,但是?
[root@k8s-master01 ~]# kubectl get job
NAME COMPLETIONS DURATION AGE
hello-1671376440 0/1 5m5s 5m5s
hello-1671376500 0/1 4m5s 4m5s
hello-1671376560 0/1 3m5s 3m5s
hello-1671376620 0/1 2m5s 2m5s
hello-1671376680 0/1 65s 65s
hello-1671376740 0/1 5s 5s
[root@k8s-master01 ~]# kubectl get job -w
NAME COMPLETIONS DURATION AGE
hello-1671376440 0/1 5m14s 5m14s
hello-1671376500 0/1 4m14s 4m14s
hello-1671376560 0/1 3m14s 3m14s
hello-1671376620 0/1 2m14s 2m14s
hello-1671376680 0/1 74s 74s
hello-1671376740 0/1 14s 14s
hello-1671376800 0/1 0s
hello-1671376800 0/1 0s 0s
那么经过哥这边发现到问题的症结,首先我们先将刚才创建的cronjob删除
[root@k8s-master01 ~]# kubectl delete cronjob hello
cronjob.batch "hello" deleted
对应的pod,那一大堆等下会自动删除掉的。
可能又是busybox的问题,版本也弄到1.28.3
[root@k8s-master01 ~]# cat cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox:1.28.3
args:
- /bin/ sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
再次创建
[root@k8s-master01 ~]# kubectl apply -f cronjob.yaml
cronjob.batch/hello created
虽然还有错
等等
实际上这里的错是我个人认为是也不仅仅是1.28.3,因为刚尝试了,自己检查,昂args哪里。。。
[root@k8s-master01 ~]# cat cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox:1.28.3
args:
- /bin/sh
- "-c"
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
实际上sh之前有个空格。。。
再次删除cronjob并查看pod就没有问题了
[root@k8s-master01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-1671378300-pzv7m 0/1 Completed 0 47s
这个地方不算是报错,别被误导
[root@k8s-master01 ~]# kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 0 44s 2m30s
suspend下面的false而已。。。
查看对应job,如果你太慢,这里就已经执行好几次了都
[root@k8s-master01 ~]# kubectl get job
NAME COMPLETIONS DURATION AGE
hello-1671378300 1/1 1s 3m2s
hello-1671378360 1/1 1s 2m2s
hello-1671378420 1/1 1s 62s
hello-1671378480 1/1 1s 2s
当然这个根据执行的时间间隔以及与我操作的前后时间差,我这里正好是全部目前这几个都是1/1的完成度,实际可能未必都是这样。
一分钟后再来看一次,可以看到这个列表是不断的执行不断的产生新的任务哈
[root@k8s-master01 ~]# kubectl get job
NAME COMPLETIONS DURATION AGE
hello-1671378300 1/1 1s 3m2s
hello-1671378360 1/1 1s 2m2s
hello-1671378420 1/1 1s 62s
hello-1671378480 1/1 1s 2s
[root@k8s-master01 ~]#
[root@k8s-master01 ~]# kubectl get job -w
NAME COMPLETIONS DURATION AGE
hello-1671378420 1/1 1s 2m37s
hello-1671378480 1/1 1s 97s
hello-1671378540 1/1 2s 37s
hello-1671378600 0/1 0s
hello-1671378600 0/1 0s 0s
hello-1671378600 1/1 1s 1s
hello-1671378420 1/1 1s 3m10s
如果不加-w,发现这个列表有时候多,有时候少,可能是只显示最近的这个job吧,太多的就不显示了吧。
也或许默认副本数是3?
[root@k8s-master01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-1671378660-jll2d 0/1 Completed 0 2m36s
hello-1671378720-7qw5r 0/1 Completed 0 96s
hello-1671378780-4tdpl 0/1 Completed 0 36s
[root@k8s-master01 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
hello-1671378720-7qw5r 0/1 Completed 0 2m21s 10.224.1.110 k8s-node01 <none> <none>
hello-1671378780-4tdpl 0/1 Completed 0 81s 10.224.2.99 k8s-node02 <none> <none>
hello-1671378840-tbrkr 0/1 Completed 0 21s 10.224.1.112 k8s-node01 <none> <none>
可以看到他运行在不同节点上,节点1运行了两个,节点2运行了一个。
那么我要查看这个cronjob的运行日志我貌似只能查看某个单节点的
[root@k8s-master01 ~]# kubectl log hello-1671378780-4tdpl
log is DEPRECATED and will be removed in a future version. Use logs instead.
Sun Dec 18 15:53:01 UTC 2022
Hello from the Kubernetes cluster
可能是多个相同节点以最后运行的那个cronjob的pod为准
不,也不对,这是因为这个pod列表里面都是动态的随机的,所以你这样查看有时候会出现这个错误
[root@k8s-master01 ~]# kubectl log hello-1671378840-tbrkr
log is DEPRECATED and will be removed in a future version. Use logs instead.
Error from server (NotFound): pods "hello-1671378840-tbrkr" not found
因为pod一直在变,要看你正在看的时候,是否pod正好又变了。
Step4
最后再删除下cronjob,不然他会一直创建的
[root@k8s-master01 ~]# kubectl delete cronjob --all
cronjob.batch "hello" deleted
这里是删除所有cronjob哦
因为目前我这里正好就一个cronjob,所以影响不大的。
关键字词:资源控制器,Daemonset,Job,CronJob