【问题标题】:Check status of batch job in init container检查初始化容器中批处理作业的状态
【发布时间】:2019-12-04 22:32:27
【问题描述】:

我的要求是在完成特定批处理作业时启动一个 pod。

批处理作业 yaml 文件

apiVersion: batch/v1
kind: Job
metadata:
  name: topics
spec:
  ttlSecondsAfterFinished: 100
  template:
    metadata:
      labels:
        app: topics
    spec:
      containers:
      - env:
        name: topics
        image: confluentinc/cp-kafka:5.3.0
        command:
        - sh
        - -c
        - {{.Values.KafkaTopics}}

2 部署yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: opp
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      labels:
        app: opp

      initContainers:
      - name: init
        image: busybox
        command: ['sh', '-c', 'until nc -z someservice:8093; do echo waiting for init; sleep 2; done;']

当我检查某些服务是否启动时,初始化容器很好。无法为批处理作业弄清楚。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    启动一个 pod

    您用Deployment 描述的是服务部署,而不仅仅是启动 pod。

    观察 Kubernetes 对象的状态

    完成特定批处理作业时。

    如果您想观察 Kubernetes 对象并根据特定对象的状态变化执行操作,则需要与 Kubernetes API 服务器进行交互。

    使用 Kubernetes 客户端

    与 Kubernetes API 交互的最简单方法,尤其是对于 watch,是使用预构建的客户端,例如client-gokubernetes-client Java

    使用 Kubernetes REST API

    您也可以直接使用Kubernetes REST API

    API 身份验证和授权

    请注意,您应该使用 服务帐户 进行身份验证并正确设置 RBAC 规则进行授权。

    卡夫卡消费者

    另一种解决方案,因为您的 Job 暗示您正在使用 Kafka。您的 Job 可以在 Kafka 上发布事件,您可以让 Kafka 消费者 订阅 并对这些事件采取行动。但是,如果消费者应该在事件上部署服务,它还需要一个服务帐户来与 Kubernetes API 服务器交互。

    【讨论】:

      猜你喜欢
      • 2017-09-08
      • 1970-01-01
      • 2015-04-01
      • 2014-12-23
      • 2016-10-23
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 2019-08-29
      相关资源
      最近更新 更多