我有一个Kubernetes服务正在运行,我们有一个外部API依赖于此服务。
如果有任何服务重启,我们希望收到通知。是否有可能在每次重启服务时都打到API端点?
嗨,欢迎来到社区!
有多种方法可以实现这一目标。一个非常简单的(正如托马斯所指出的)是一个Init容器。有关如何运行的更多信息,请参阅Kubernetes docs!这个init容器只会在pod启动后向外部API发送一个HTTP请求,然后立即终止。
另一种方式要复杂得多,需要你自己编写一些代码。您需要做的是编写自己的控制器,通过Kubernetes API监视实体,并在重新安排,杀死,死亡等时通知您的外部服务。(但是,您可以使用外部服务来完全访问kube-api直接...)
扩大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