如何创建kubernetes作业配置规范来运行perl脚本?一旦脚本完成执行,作业创建的pod应该进入完成状态。
我们可以在Kubernetes作业文档中找到-当达到指定数量的成功完成时,作业就完成了:
Job创建一个或多个pod,并将继续重试执行这些pod,直到指定数量的pod成功终止。当吊舱成功完井时,作业将跟踪成功完井的情况。当达到指定数量的成功完成时,任务(即Job)完成。
我猜你想使用非并行作业:
- 正常情况下,只有一个Pod启动,除非该Pod出现故障。
- 作业完成,只要它的Pod成功终止。
Pod中的容器可能由于多种原因而失败,例如其中的进程(例如perl脚本)以非零退出代码退出。例如,当perl脚本失败时就会发生这种情况:
注意:我输入的是prin
而不是print
。
$ cat test-perl.pl
#!/usr/bin/perl
use warnings;
use strict;
prin("Hello Worldn");
$ ./test-perl.pl
Undefined subroutine &main::prin called at ./test-perl.pl line 5.
$ echo $?
255 ### non-zero exit code
我已经创建了一个示例来说明如何创建一个运行perl脚本并成功完成的Job。
首先,我创建了一个简单的perl脚本:
$ cat perl-script.pl
#!/usr/bin/perl
use warnings;
use strict;
my @i = (1..9);
for(@i){
print("$_: Hello, World!n");
$ ./perl-script.pl
1: Hello, World!
2: Hello, World!
3: Hello, World!
4: Hello, World!
5: Hello, World!
6: Hello, World!
7: Hello, World!
8: Hello, World!
9: Hello, World!
$ echo $?
0
然后我用上面的脚本创建了一个Docker映像,并将它推送到我的DockerHub存储库:
注意:我使用了perl图像。
$ ls
Dockerfile perl-script.pl
$ cat Dockerfile
FROM perl:5.20
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "perl", "./perl-script.pl" ]
$ docker build . --tag mattjcontainerregistry/perl-script
Sending build context to Docker daemon 3.072kB
...
Successfully tagged mattjcontainerregistry/perl-script:latest
$ docker push mattjcontainerregistry/perl-script:latest
The push refers to repository [docker.io/mattjcontainerregistry/perl-script]
...
latest: digest: sha256:2f8789af7f61cfb021337810963a9a19f133d78e9ad77159fbc1d425cfb1d7db size: 3237
最后,我创建了一个perl-script
作业,它运行我之前创建的perl脚本:
$ cat perl-job.yml
apiVersion: batch/v1
kind: Job
metadata:
name: perl-script
spec:
template:
spec:
containers:
- name: perl-script
image: mattjcontainerregistry/perl-script:latest
restartPolicy: Never
$ kubectl apply -f perl-job.yml
job.batch/perl-script created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
perl-script-gspzz 0/1 Completed 0 10s
$ kubectl get job
NAME COMPLETIONS DURATION AGE
perl-script 1/1 1s 18s
$ kubectl logs -f perl-script-gspzz
1: Hello, World!
2: Hello, World!
3: Hello, World!
4: Hello, World!
5: Hello, World!
6: Hello, World!
7: Hello, World!
8: Hello, World!
9: Hello, World!
您可以看到,perl-script
作业已经完成,因此它按预期工作。