首页 > 解决方案 > 检查初始化容器中批处理作业的状态

问题描述

我的要求是在完成特定批处理作业时启动一个 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

解决方案


启动一个 pod

您用 a 描述的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 Consumer订阅这些事件并对其采取行动。但是如果消费者要在事件上部署服务,它还需要一个服务帐户来与 Kubernetes API 服务器进行交互。


推荐阅读