Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes在服务/部署级别检查readinessProbe_Kubernetes_Kubernetes Service_Kubernetes Deployment - Fatal编程技术网

Kubernetes在服务/部署级别检查readinessProbe

Kubernetes在服务/部署级别检查readinessProbe,kubernetes,kubernetes-service,kubernetes-deployment,Kubernetes,Kubernetes Service,Kubernetes Deployment,是否有方法通过使用链接到部署的服务名称来请求readinessProbe的状态?例如在initContainer中 假设我们有一个部署X,使用readinessProbe,一个链接到它的服务,以便我们可以请求例如http://service-X:8080。 现在我们创建一个部署Y,在initContainer中我们想知道部署X是否准备就绪。有没有办法询问像deployment-X.ready或service-X.ready这样的问题 我知道处理依赖关系的正确方法是让kubernetes为我们做这

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

假设我们有一个部署X,使用readinessProbe,一个链接到它的服务,以便我们可以请求例如
http://service-X:8080
。 现在我们创建一个部署Y,在initContainer中我们想知道部署X是否准备就绪。有没有办法询问像
deployment-X.ready
service-X.ready
这样的问题


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

您可以在部署Y上添加ngnix代理侧车。
deploymentY.initContainer.readynesprobe
设置为nginx上的一个端口,该端口被代理为
deploymentY.readynesprobe

您可以在部署Y上添加一个ngnix代理侧车。
deploymentY.initContainer.readynesprobe
设置为nginx上的一个端口,该端口被代理为
deploymentY.readynesprobe

而不是您可以使用的readinessProbe

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

如果他找到了->他会做豆荚

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

NAME                        READY   STATUS     RESTARTS   AGE
myapp-pod                   1/1     Running    0          35m
只是一个简单的例子,我们使用
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将查找服务mynginx,直到您创建它,它将处于
Init:0/1
状态

NAME                        READY   STATUS     RESTARTS   AGE
myapp-pod                   0/1     Init:0/1   0          15m
例如,在使用
kubectl expose deployment/my nginx
添加服务后,initContainer将找到我的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
事件:
从消息中键入原因年龄
----    ------     ----       ----               -------
正常计划的默认计划程序已成功将默认/myapp pod分配给kubeadm2
正常拉动20秒kubelet,kubeadm2容器映像“busybox:1.28”已出现在机器上
正常创建20s kubelet,kubeadm2创建容器init myservice
正常启动20s kubelet,kubeadm2启动容器初始化myservice
正常拉动20秒kubelet,kubeadm2容器映像“busybox:1.28”已出现在机器上
正常创建20s kubelet,kubeadm2创建容器myapp容器
正常启动20s kubelet,kubeadm2启动容器myapp容器

如果这能回答您的问题,请告诉我。

您可以用它代替ReadinesProbe

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

如果他找到了->他会做豆荚

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

NAME                        READY   STATUS     RESTARTS   AGE
myapp-pod                   1/1     Running    0          35m
只是一个简单的例子,我们使用
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将查找服务mynginx,直到您创建它,它将处于
Init:0/1
状态

NAME                        READY   STATUS     RESTARTS   AGE
myapp-pod                   0/1     Init:0/1   0          15m
例如,在使用
kubectl expose deployment/my nginx
添加服务后,initContainer将找到我的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
事件:
从消息中键入原因年龄
----    ------     ----       ----               -------
正常计划的默认计划程序已成功将默认/myapp pod分配给kubeadm2
正常拉动20秒kubelet,kubeadm2容器映像“busybox:1.28”已出现在机器上
正常创建20s kubelet,kubeadm2创建容器init myservice
正常启动20s kubelet,kubeadm2启动容器初始化myservice
正常拉动20秒kubelet,kubeadm2容器映像“busybox:1.28”已出现在机器上
正常创建20s kubelet,kubeadm2创建容器myapp容器
正常启动20s kubelet,kubeadm2启动容器myapp容器

如果这能回答您的问题,请告诉我。

我最终通过以下链接找到了解决方案:


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

我最终通过以下链接找到了解决方案:


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

感谢回答,我已经在google上找到类似的内容,但我搜索了另一个没有sidecar的解决方案…感谢回答,我已经在google上找到类似的内容,但是我正在寻找另一个没有sidecar的解决方案……嗨,我想你的答案没有考虑到服务至少有一个pod就绪,这就是为什么我需要使用readinessProbe。如果我错了,请告诉我,我在Kubernetes上没有这样的经验。但我找到了一个解决方案:嗨@Borhink,我不知道我是否理解正确,你的意思是如果服务在这里,它会工作吗,但不会有任何吊舱?如果你找到了一个解决方案,你能不能把它添加为一个答案,这样社区就可以看到它,如果有人有相同的想法?我添加了一个答案,我们可以检查一个服务是否已创建,并有一个或多个pod准备好。谢谢你抽出时间。对不起,英语不是我的母语,有些地方很难解释……嗨,我想你的回答没有考虑到服务至少有一个pod准备好了,这就是为什么我需要使用readinessProbe。乐