是否有一种方法可以通过使用链接到部署的服务名称来请求ReadinessProbe的状态?例如在initContainer中?
想象一下,我们有一个部署X,它使用一个与它链接的服务ReadinessProbe,因此我们可以请求例如A
B
A
C
D
X
。
现在我们创建一个部署Y,在initContainer中,我们想知道部署X是否准备就绪。有没有办法问类似OUTER;john;A;doe;A;jane;D
OUTER;john;A;doe;A;jane;X
OUTER;john;A;doe;c;jane;D
OUTER;john;A;doe;C;jane;X
OUTER;john;B;doe;A;jane;D
OUTER;john;B;doe;A;jane;X
OUTER;john;B;doe;C;jane;D
OUTER;john;B;doe;C;jane;X
或http://service-X:8080
的问题?
我知道处理依赖关系的正确方法是让kubernetes为我们做这件事,但是我有一个不会崩溃的容器,对此我也没有任何帮助...
答案 0 :(得分:1)
您可以在部署Y上添加ngnix代理sidecar。
将deploymentY.initContainer.readynessProbe
设置为nginx上的端口,并将该端口代理到deploymentY.readynessProbe
答案 1 :(得分:1)
您只能使用InitContainer,而不是readinessProbe。
您创建一个pod /部署X,制作服务X,然后创建一个initContainer,以搜索服务X。
如果他找到它->他会做豆荚。
如果找不到它->他将一直寻找直到创建服务X。
举一个简单的例子,我们使用kubectl apply -f nginx.yaml
创建nginx deployment。
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
让我知道这是否回答了您的问题。
答案 2 :(得分:0)
我最终通过以下链接找到了解决方案: https://blog.giantswarm.io/wait-for-it-using-readiness-probes-for-service-dependencies-in-kubernetes/
我们首先需要在Kubernetes中创建一个ServiceAccount,以允许从initContainer中列出端点。此后,我们请求可用的端点(如果有至少一个),依赖关系已准备就绪(在我的情况下)。