0

有没有办法通过使用链接到部署的服务名称来请求 readinessProbe 的状态?例如在 initContainer 中?

想象一下,我们有一个部署 X,使用一个 readinessProbe,一个服务链接到它,所以我们可以请求例如http://service-X:8080。现在我们创建一个部署 Y,在 initContainer 中我们想知道部署 X 是否准备好。有没有办法问类似的东西deployment-X.readyor service-X.ready

我知道处理依赖关系的正确方法是让 kubernetes 为我们做这件事,但我有一个不会崩溃的容器,我没有手.​​..

4

3 回答 3

1

您可以在部署 Y 上添加一个 ngnix 代理 sidecar。将 设置为deploymentY.initContainer.readynessProbenginx 上的一个端口,该端口被代理到deploymentY.readynessProbe

于 2019-10-15T09:57:20.330 回答
1

而不是 readinessProbe 您可以只使用InitContainer

您创建一个 pod/deployment X,创建服务 X,并创建一个正在搜索服务 X 的 initContainer。

如果他找到它-> 他将制作吊舱。

如果他找不到 -> 他将继续寻找,直到创建服务 X。

只是一个简单的例子,我们使用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

让我知道这是否回答了您的问题。

于 2019-10-17T08:13:15.013 回答
0

我最终通过以下链接找到了解决方案: https ://blog.giantswarm.io/wait-for-it-using-readiness-probes-for-service-dependencies-in-kubernetes/

我们首先需要在 Kubernetes 中创建一个 ServiceAccount 以允许从 initContainer 中列出端点。在此之后,我们询问可用的端点,如果至少有一个,则依赖关系已准备好(在我的情况下)。

于 2019-10-17T11:58:04.700 回答