首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes在服务/部署级别检查readinessProbe

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

Stack Overflow用户
提问于 2019-10-15 09:31:11
回答 3查看 286关注 0票数 0

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-17 11:58:04

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

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

票数 0
EN

Stack Overflow用户

发布于 2019-10-15 09:57:20

您可以在部署Y上添加ngnix代理侧加器。将deploymentY.initContainer.readynessProbe设置为nginx上的端口,并且该端口被代理为deploymentY.readynessProbe

票数 1
EN

Stack Overflow用户

发布于 2019-10-17 08:13:15

而不是readinessProbe,您可以只使用InitContainer

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

如果他找到它,->,他会做豆荚。 如果他找不到它,->,他将继续寻找,直到服务X将被创建。

只是一个简单的例子,我们使用nginx部署创建kubectl apply -f nginx.yaml

nginx.yaml

代码语言:javascript
复制
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

代码语言:javascript
复制
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状态。

代码语言:javascript
复制
NAME                        READY   STATUS     RESTARTS   AGE
myapp-pod                   0/1     Init:0/1   0          15m

例如,在通过使用kubectl expose deployment/my-nginx添加服务之后,initContainer将找到my-nginx服务,他将被创建。

代码语言:javascript
复制
NAME                        READY   STATUS     RESTARTS   AGE
myapp-pod                   1/1     Running    0          35m

结果:

代码语言:javascript
复制
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

如果这回答了你的问题请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58391521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档