Вместо 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
Дайте мне знать, если это ответит на ваш вопрос.