我的要求是在完成特定批处理作业时启动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;']
在我检查一些服务是否正常时,初始化容器很好。无法解决批处理作业。
答案 0 :(得分:1)
启动广告连播
您用Deployment
描述的是一项服务的部署,而不仅仅是启动一个pod。
完成特定批处理作业时。
如果要观看Kubernetes对象并根据特定对象的状态变化执行操作,则需要与Kubernetes API服务器进行交互。
使用Kubernetes客户端
与Kubernetes API交互的最简单方法(特别是对于 watch 而言)是使用预构建的客户端,例如client-go或kubernetes-client Java。
使用Kubernetes REST API
或者,您可以直接使用Kubernetes REST API。
API身份验证和授权
请注意,您应该使用服务帐户进行身份验证,并正确设置RBAC规则以进行授权。
一种替代解决方案,因为您的Job
暗示您正在使用Kafka。您的Job
可以在Kafka上发布活动,并且您可以让 Kafka消费者进行订阅并采取措施。但是,如果消费者应该在事件中部署服务,则它还需要一个服务帐户才能与Kubernetes API服务器进行交互。