Я могу предложить два решения:
Во-первых, присоединить контейнер init к веб-серверам, которые ждут, пока MySQL будет запущен и работает.Развертывание будет выглядеть примерно так:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
selector:
matchLabels:
app: web
replicas: 2
template:
metadata:
labels:
app: web
spec:
initContainers:
- name: init-wait
image: alpine
command: ["sh", "-c", "for i in $(seq 1 300); do nc -zvw1 mysql 3306 && exit 0 || sleep 3; done; exit 1"]
containers:
- name: web
image: web-server
ports:
- containerPort: 80
protocol: TCP
Он использует netcat, чтобы пытаться запускать TCP-соединение со службой mysql через порт 3306 каждые 3 секунды.Как только соединение будет установлено, init-контейнер завершится и веб-сервер запустится нормально.
Второй вариант - использовать Mirantis AppController .Это позволяет вам создавать объекты зависимости по мере необходимости между развертыванием сервера и базы данных.Проверьте их репо для полной документации.