kubernetes - 检查初始化容器中批处理作业的状态
问题描述
我的要求是在完成特定批处理作业时启动一个 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;']
当我检查某些服务是否启动时,初始化容器很好。无法为批处理作业弄清楚。
解决方案
启动一个 pod
您用 a 描述的Deployment
是服务的部署,而不仅仅是启动pod。
观察 Kubernetes 对象的状态
当特定的批处理作业完成时。
如果您想观察 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 Consumer订阅这些事件并对其采取行动。但是如果消费者要在事件上部署服务,它还需要一个服务帐户来与 Kubernetes API 服务器进行交互。
推荐阅读
- ruby - Ruby 强参数:Integer 的 NoMethodError 未定义方法允许
- python-3.x - 使用 BeautifulSoup 进行网页抓取
- android - Xamarin.Forms Android 应用程序上未显示启动屏幕,其中 VPN 和工作配置文件上的托管设备
- django - 如何在 Django Url 中添加可选的 slug
- excel - 需要从 SSIS 包中为 excel 中的标题着色
- angular - 如何限制 NgSelect 下拉面板中显示的项目数量?
- oracle11g - 出现此错误状态:失败 - 测试失败:IO 错误:网络适配器无法建立连接
- azure - Azure Kubernetes - Istio 从外部访问 grafana、prometheus、jaeger、kiali 和 envoy?
- arrays - 在 Ruby on Rails 应用程序中,我试图在数组中的哈希中循环遍历数组。为什么我会收到“语法错误”消息?
- python - 狮身人面像没有找到任何来源