K8S Jobs创建

fabric8代码创建
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4
Map<String, String> labels = new LinkedHashMap<>();
labels.put(SPIDER_GROUP_ID, spiderGroupId);
labels.put(APP_NAME, "job-spider-worker");

//TODO 参考buildContainer,构建Deployment的容器参数
Container container = buildContainer(new SpiderGroupPO());
Job job = new JobBuilder()
        .withApiVersion("batch/v1")
        .withNewMetadata()
        .withName(spiderGroupId)
        .withLabels(labels)
        .endMetadata()
        .withNewSpec()
        //是否并行
        .withCompletions(1)
        .withParallelism(1)
        //一旦 Job 运行时间达到 1小时,其所有运行中的 Pod 都会被终止
        .withActiveDeadlineSeconds(60 * 60L)
        //失效重试3次
        .withBackoffLimit(3)
        .withNewTemplate()
        .withNewSpec()
        .withContainers(container)
        //重启策略Never 或 OnFailure
        .withRestartPolicy("Never")
        .endSpec()
        .endTemplate()
        .endSpec()
        .build();
k8sClient.batch().jobs().inNamespace(namespace).createOrReplace(job);

//查看podList
PodList podList = k8sClient.pods().inNamespace(namespace).withLabel(APP_NAME, "job-spider-worker").list();
文档地址

https://kubernetes.io/zh/docs/concepts/workloads/controllers/job/

类型和参数
Job类型
  • 非并行Job:通常创建一个Pod直至其成功结束。
  • 固定结束次数的Job:设置.spec.completions,创建多个Pod,直到.spec.completions个Pod成功结束。
  • 带有工作队列的并行Job:设置.spec.Parallelism但不设置.spec.completions,当所有Pod结束并且至少一个成功时,Job就认为是成功。
  • 固定结束次数的并行Job:同时设置.spec.completions和.spec.Parallelism,多个Pod同时处理工作队列。
    在这里插入图片描述
参数

.spec.completionMode 设置完成模式

  • NonIndexed(默认值):当成功完成的 Pod 个数达到 .spec.completions 所 设值时认为 Job 已经完成。换言之,每个 Job 完成事件都是独立无关且同质的。 要注意的是,当 .spec.completions 取值为 null 时,Job 被隐式处理为 NonIndexed
  • Indexed:Job 的 Pod 会获得对应的完成索引,取值为 0 到 .spec.completions-1

.spec.template.spec.restartPolicy 容器失效重启策略

  • Never
  • OnFailure

.spec.backoffLimit 回退失效策略

在有些情形下,你可能希望 Job 在经历若干次重试之后直接进入失败状态,因为这很 可能意味着遇到了配置错误。 为了实现这点,可以将 .spec.backoffLimit 设置为视 Job 为失败之前的重试次数。 失效回退的限制值默认为 6。 与 Job 相关的失效的 Pod 会被 Job 控制器重建,回退重试时间将会按指数增长 (从 10 秒、20 秒到 40 秒)最多至 6 分钟。 当 Job 的 Pod 被删除时,或者 Pod 成功时没有其它 Pod 处于失败状态,失效回退的次数也会被重置(为 0)

.spec.activeDeadlineSeconds

  • 一旦 Job 运行时间达到 activeDeadlineSeconds 秒,其所有运行中的 Pod 都会被终止,并且 Job 的状态更新为 type: Failed 及 reason: DeadlineExceeded
  • .spec.activeDeadlineSeconds 优先级高于其 .spec.backoffLimit 设置

.spec.ttlSecondsAfterFinished

TTL机制控制器,清理 Job 时,会级联式地删除 Job 对象

.spec.suspend

暂时挂起 Job 执行, 将 Job 的 .spec.suspend 字段更新为 true。 之后,当你希望恢复其执行时,将其更新为 false
Pod 以这种形式终止时,不会被记入 Job 的 completions 计数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Kubernetes(k8s)上创建 MySQL 可以通过以下步骤完成: 1. 创建一个 MySQL 的配置文件,如 `mysql-deployment.yaml`,并添加以下内容: ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi --- apiVersion: v1 kind: Service metadata: name: mysql-service spec: ports: - port: 3306 selector: app: mysql type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: mysql-deployment spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:latest ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: password volumeMounts: - mountPath: /var/lib/mysql name: mysql-volume volumes: - name: mysql-volume persistentVolumeClaim: claimName: mysql-pvc --- apiVersion: v1 kind: Secret metadata: name: mysql-secret type: Opaque data: password: BASE64_ENCODED_PASSWORD ``` 2. 替换 `BASE64_ENCODED_PASSWORD` 为你的 MySQL root 密码的 Base64 编码。 3. 使用 `kubectl apply` 命令应用配置文件: ```bash kubectl apply -f mysql-deployment.yaml ``` 这将创建一个包含 MySQL 的 Deployment、Service 和 PersistentVolumeClaim。 注意:上述配置只是一个基本示例,你可能需要根据你的环境和需求进行适当的修改。另外,建议在生产环境中使用更加安全的方式来管理密码,例如使用 Kubernetes 的 Secrets。 希望这能帮到你!如果你有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值