美文网首页
k8s通过API创建Job

k8s通过API创建Job

作者: jaymz明 | 来源:发表于2021-09-24 13:47 被阅读0次

最近接到一个任务,需要通过页面,根据用户的输入创建k8s的Job资源。虽然只是创建job,但是基本上其他资源也是通用的。看了网上的资料,基本上是使用https://github.com/fabric8io/kubernetes-client
第一步,先要获取集群的证书,需要通过集群认证才能进行操作。主要使用ca.crt,kubectl-kube-api-client.crt,kubectl-kube-api-client.key

      config = new ConfigBuilder().withMasterUrl(master).withTrustCerts(true).build();
      config.setCaCertFile(caCertFile);
      config.setClientCertFile(clientCertFile);
      config.setClientKeyFile(clientKeyFile);
      config.setConnectionTimeout(timeout);
      config.setRequestTimeout(timeout);

第二步,使用api来创建job,首先KubernetesClient client = new DefaultKubernetesClient(kubernetesConfig.buildConfig()),获取操作client。然后组装job的yaml,最后使用 Job newJob = client.batch().jobs().createOrReplace(job);

job yaml构建如下:

           final Job job = new JobBuilder()
                    .withApiVersion("batch/v1")
                    .withNewMetadata()
                    .withNamespace("default")
                    .withName("data-population-"+jobBean.getTenantId())
                    .endMetadata()
                    .withNewSpec()
                    .withCompletions(Integer.valueOf(jobBean.getCount()))
                    .withParallelism(1)
                    .withNewTemplate()
                    .withNewSpec()
                    .addNewInitContainer()
                    .withName("pre-data")
                    .withImage("xxxx/pre-data:v2.4")
                    .withArgs("sh","-c"," "xxx"; ./replace_env_properties.sh ")
                    .addNewEnv()
                            .withNewName("authUrl")
                            .withNewValue(authUrl)
                    .endEnv()
                    .addNewEnv()
                            .withNewName("authBody")
                            .withNewValue(authBody)
                    .endEnv()
                    .addNewEnv()
                            .withNewName("metaDataUrl")
                            .withNewValue(metaDataUrl)
                    .endEnv()
                    .addNewEnv()
                            .withNewName("bulkUrl")
                            .withNewValue(bulkUrl)
                    .endEnv()
                    .addNewEnv()
                            .withNewName("emsFilterUrl")
                            .withNewValue(emsFilterUrl)
                    .endEnv()
                    .addNewEnv()
                            .withNewName("deploySingleSLTUrl")
                            .withNewValue(deploySingleSLTUrl)
                    .endEnv()
                    .addNewEnv()
                            .withNewName("applySLT")
                            .withNewValue(applySLT)
                            .endEnv()

                    .withVolumeMounts(new VolumeMountBuilder()
                            .withName("datahelix-biz")
                            .withMountPath("/root/")
                            .build())
                    .endInitContainer()
                    .addNewInitContainer()
                    .withName("datahelix")
                    .withImage("xxxx/datahelix:v1.2")
                    .withArgs("sh","-c","xxx; ./generate_csv_data.sh")
                    .withEnv(new EnvVarBuilder()
                            .withNewName("profile")
                            .withNewValue(customProfile)
                            .build())
                    .withVolumeMounts(new VolumeMountBuilder()
                            .withName("datahelix-biz")
                            .withMountPath("/root/")
                            .build())
                    .endInitContainer()
                    .addNewContainer()
                    .withName("pdi-ce")
                    .withImage("xxx/pentaho_kettle:v1.1")
                    .withCommand("sh","-c","./kitchen.sh -file xxx/data_population_e2e_job.kjb; exit 0")

                    .withVolumeMounts(new VolumeMountBuilder()
                            .withName("datahelix-biz")
                            .withMountPath("/home/pentaho/")
                            .build())
                    .endContainer()
                    .withRestartPolicy("Never")
                    .withVolumes(new VolumeBuilder()
                            .withName("datahelix-biz")
                            .withNewEmptyDir()
                            .endEmptyDir()
                            .build())
                    .endSpec()
                    .endTemplate()
                    .endSpec()
                    .build();

这部分yaml文件包含了2个initContainers,一个真正干活的container。里面涉及env的创建,command的使用,已经volume的使用。
k8s job的使用对于一次性的任务来说,效果不错。目前使用它来抛数据。通过读取制定的profile,多线程抛数据。

相关文章

  • k8s通过API创建Job

    最近接到一个任务,需要通过页面,根据用户的输入创建k8s的Job资源。虽然只是创建job,但是基本上其他资源也是通...

  • Job System

    Job System 什么是Job System? Job System通过创建一个Job而不是线程来管理多线程代...

  • 创建兼职

    API: 创建兼职 URL: /create_part_time_job/ 请求方式: POST 参数 返回示例...

  • Sqoop1.99.7 Java客户端api异常解决备忘

    Sqoop1.99.7通过Java客户端api创建MySQL导入到HDFS文件系统。 Job调用时报如下错误: o...

  • volcano Job初探

    valcano 参考: job-api Error Handling 通过LifecyclePolicy对不同Jo...

  • K8S创建对象Yaml文件详解

    K8S创建对象Yaml文件详解 创建RC apiVersion: v1 #指定api版本,此值必须在kubectl...

  • k8s搭建xxl-job测试环境

    背景 搭建本地k8s环境和xxl-job测试环境,在k8s环境中跑通xxl-job调度器和执行器 搭建k8s 注:...

  • 如何利用API构建Cube更新Kylin数据

    思路:kylin提供了api来创建job,详情可以参考:http://kylin.apache.org/cn/do...

  • GitLab 流水线常见问题集锦

    Job 无法访问特定域名 如果Gitlab Runner 通过Helm chart 部署到K8S 中,但出现无法访...

  • 四、Pod进阶

    1、通过yaml文件创建pod apiVersion:api的版本,可以通过kubectl api-version...

网友评论

      本文标题:k8s通过API创建Job

      本文链接:https://www.haomeiwen.com/subject/nqpogltx.html