Kubernetes проверяет готовностьProbe на уровне обслуживания / развертывания - PullRequest
0 голосов
/ 15 октября 2019

Есть ли способ запросить статус readinessProbe с помощью имени службы, связанного с развертыванием? Например, в initContainer?

Представьте, что у нас есть развертывание X, использующее readinessProbe, сервис, связанный с ним, поэтому мы можем запросить, например, http://service-X:8080. Теперь мы создаем развертывание Y, в initContainer мы хотим знать, готово ли развертывание X. Есть ли способ задать что-то вроде deployment-X.ready или service-X.ready?

Я знаю, что правильный способ обработки зависимостей - это позволить kubernetes сделать это за нас, но у меня есть контейнер, который не падаети у меня нет на это руки ...

Ответы [ 3 ]

1 голос
/ 17 октября 2019

Вместо readinessProbe Вы можете использовать только InitContainer .

Вы создаете пакет / развертывание X, создаете сервис X и создаете initContainer, который ищет сервис X.

Если он его найдет -> он сделает стручок.

Если он его не найдет -> он будет искать до тех пор, пока не будет создана служба X.

Просто простой пример, мы создаем nginx развертывание , используя 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

Дайте мне знать, если это ответит на ваш вопрос.

1 голос
/ 15 октября 2019

Вы можете добавить прокси-сервер ngnix при развертывании Y. Установите deploymentY.initContainer.readynessProbe для порта на nginx, и этот порт будет прокси deploymentY.readynessProbe

0 голосов
/ 17 октября 2019

Я наконец нашел решение, перейдя по этой ссылке: https://blog.giantswarm.io/wait-for-it-using-readiness-probes-for-service-dependencies-in-kubernetes/

Сначала нам нужно создать ServiceAccount в Кубернетесе, чтобы разрешить вывод конечных точек из initContainer. После этого мы запрашиваем доступные конечные точки, если есть хотя бы одна, зависимость готова (в моем случае).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...