Kubernetes检查准备情况服务/部署级别的探针

时间:2019-10-15 09:31:11

标签: kubernetes kubernetes-service kubernetes-deployment

是否有一种方法可以通过使用链接到部署的服务名称来请求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为我们做这件事,但是我有一个不会崩溃的容器,对此我也没有任何帮助...

3 个答案:

答案 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中列出端点。此后,我们请求可用的端点(如果有至少一个),依赖关系已准备就绪(在我的情况下)。