我正在运行Kubernetes服务,并且我们有一个依赖于此服务的外部API。
如果有任何服务重启,我们希望收到通知。每次重新启动服务时都有可能击中API端点吗?
答案 0 :(得分:1)
嗨,欢迎来到社区!
有多种方法可以实现这一目标。一个非常简单的容器(如Thomas所指出的)是一个Init容器。有关如何使它们运行的更多信息,请参考Kubernetes docs!一旦Pod启动,此init容器就不会向外部API发送HTTP请求,然后立即终止。
另一种方式要复杂得多,需要您自己编写一些代码。您要做的就是编写自己的控制器,该控制器通过Kubernetes API监视实体,并在重新安排Pod的时间,杀死它们或使其死亡时通知您的外部服务。 (不过,您可以使用外部服务来确定为什么直接访问kube-api ...)
答案 1 :(得分:0)
在enzian's comment上扩展有关使用initContainers的知识。这是一个使用基于Curl的initContainer并安装元数据作为环境变量在调用中传递的示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: some-service
namespace: the-project
labels:
app: some-service
spec:
replicas: 1
selector:
matchLabels:
app: some-service
template:
metadata:
labels:
app: some-service
spec:
initContainers:
- name: service-name-init
image: txn2/curl:v3.0.0
- name: SOME_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
command: [
"/bin/sh",
"-c",
"/usr/bin/curl -sX GET example.com/notify/$(SOME_NAME)"
]
containers:
- name: ok
image: txn2/ok
imagePullPolicy: Always
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: SERVICE_ACCOUNT
valueFrom:
fieldRef:
fieldPath: spec.serviceAccountName
ports:
- name: ok-port
containerPort: 8080