如何创建kubernetes作业规范来运行perl脚本?



如何创建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作业已经完成,因此它按预期工作。

最新更新