利用Kubernetes创造N个就业岗位

2ic8powd  于 2023-01-20  发布在  Kubernetes
关注(0)|答案(2)|浏览(164)

我在job.yaml中定义了以下Kubernetes作业

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-$count
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

我使用下面的bash脚本来应用此功能:

for i in {1..3}
do
    kubectl apply -f job.yaml
done

是否有办法在此处创建3个作业并使用环境变量pi-$count,以便创建pi-1pi-2pi-3

v6ylcynt

v6ylcynt1#

您可以使用sed替换$count,为每个作业创建一个清单文件并应用它。
例如创建一个名为pi-job.yaml的文件(我以您的代码为例)

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-$count
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

创建一个名为job的文件夹来存储清单文件(此目录完全是可选的),您可以使用类似下面的内容

mkdir job
    for i in {1..3}
    do
       cat pi-job.yaml | sed "s/\$count/$i/" > ./jobs/job-$i.yaml;
       kubectl apply -f ./jobs/job-$i.yaml
    done

通过执行此代码,将以pi-1pi-2pi-3的名称创建3个作业。但是清单文件将驻留在作业文件夹中。您需要清理它。否则,您可以向脚本中再添加一行来删除文件,如下所示

mkdir job
 for i in {1..3}
 do
   cat pi-job.yaml | sed "s/\$count/$i/" > ./jobs/job-$i.yaml;
   kubectl apply -f ./jobs/job-$i.yaml
   rm -rf ./jobs/job-$i.yaml
 done

有关更多详细信息,请参阅官方k8的工作文档

ugmeyewa

ugmeyewa2#

使用sed命令替换作业计数器(COUNT)并为每个作业示例创建临时文件。您可以在部署后删除所有临时作业yaml。这样您就可以保持原始作业yaml文件的完整性以供重用。假设我正在使用名为'job.yaml'的kubernetes作业yaml。

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-COUNT
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

像下面这样修改bash脚本,我将它命名为jobrunner.sh

#!/usr/bin/bash
for i in {1..3}
do
    sed 's|COUNT|'${i}'|g' job.yaml > job-$i.yaml
    kubectl apply -f job-$i.yaml
done
rm job-*.yaml

运行此bash脚本,将在您的Kubernetes中创建3个作业,分别为pi-1pi-2pi-3。如果您希望保留临时作业文件,可以使用rm job-*.yaml命令注解掉删除临时作业文件的最后部分。

相关问题