是否有方法通过使用链接到部署的服务名称来请求readinessProbe的状态?例如,在initContainer中?
假设我们有一个部署X,使用一个readinessProbe,一个链接到它的服务,这样我们就可以请求例如http://service-X:8080。现在我们创建一个部署Y,在initContainer中我们想知道部署X是否准备好了。有办法问像deployment-X.ready或service-X.ready这样的问题吗?
我知道处理依赖关系的正确方法是让kubernetes为我们做这件事,但是我有一个不会崩溃的容器,而且我也没有参与.
发布于 2019-10-17 11:58:04
我最终通过以下链接找到了一个解决方案:https://blog.giantswarm.io/wait-for-it-using-readiness-probes-for-service-dependencies-in-kubernetes/
我们首先需要在Kubernetes中创建一个ServiceAccount,以允许从initContainer中列出端点。在此之后,我们要求提供可用的端点,如果至少有一个端点,则依赖关系已经准备好(在我的例子中)。
发布于 2019-10-15 09:57:20
您可以在部署Y上添加ngnix代理侧加器。将deploymentY.initContainer.readynessProbe设置为nginx上的端口,并且该端口被代理为deploymentY.readynessProbe。
发布于 2019-10-17 08:13:15
而不是readinessProbe,您可以只使用InitContainer。
您创建了一个pod/deployment,创建了服务X,并创建了一个搜索服务X的initContainer。
如果他找到它,->,他会做豆荚。 如果他找不到它,->,他将继续寻找,直到服务X将被创建。
只是一个简单的例子,我们使用nginx部署创建kubectl apply -f nginx.yaml。
nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80然后我们创建initContainer
initContainer.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', 'until nslookup my-nginx; do echo waiting for myapp-pod2; sleep 2; done;']initContainer将查找服务my-nginx,在创建它之前,它将处于Init:0/1状态。
NAME READY STATUS RESTARTS AGE
myapp-pod 0/1 Init:0/1 0 15m例如,在通过使用kubectl expose deployment/my-nginx添加服务之后,initContainer将找到my-nginx服务,他将被创建。
NAME READY STATUS RESTARTS AGE
myapp-pod 1/1 Running 0 35m结果:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned default/myapp-pod to kubeadm2
Normal Pulled 20s kubelet, kubeadm2 Container image "busybox:1.28" already present on machine
Normal Created 20s kubelet, kubeadm2 Created container init-myservice
Normal Started 20s kubelet, kubeadm2 Started container init-myservice
Normal Pulled 20s kubelet, kubeadm2 Container image "busybox:1.28" already present on machine
Normal Created 20s kubelet, kubeadm2 Created container myapp-container
Normal Started 20s kubelet, kubeadm2 Started container myapp-container如果这回答了你的问题请告诉我。
https://stackoverflow.com/questions/58391521
复制相似问题