Я планирую создать специальное развертывание «развертыватель» на k8s (по одному «развертывателю» на кластер). Его роль будет заключаться в том, чтобы извлекать спецификации из центра, создавать манифесты k8s и применять их. Конечным результатом должно быть несколько развертываний, каждое в своем собственном пространстве имен с сервисом и входом, а также секрет, содержащий учетные данные БД.
Я не хочу напрямую передавать данные БД и управлять ими. Вместо этого я думал о создании CustomResourceDefinition 'dbservice', который среди прочего содержал бы имя службы БД. Затем настройте оператор k8s, который:
- Возьмите (контролируйте) такой ресурс dbservice.
- Обратитесь в службу хостинга БД, если такая служба уже существует. В противном случае он создал бы его с некоторыми спецификациями из настраиваемого ресурса.
- Получите имя хоста, пароль, пользователя, имя базы данных и порт и сохраните их в секрете, который будет использоваться при развертывании (envvar).
Сюда:
- Каждое развертывание будет ждать своего секрета БД и не запускаться, пока секрет не существует, что означает, что БД готова.
- Мне бы не пришлось вручную управлять службами БД.
- Мне бы не пришлось передавать пароли по проводам.
Что должно произойти, чтобы это сработало (по моему плану):
- Оператору потребуется разрешение на общение с провайдером хостинга БД (возможно, он получит доступ к другому секретному ключу k8s с ключом API).
- Оператору потребуется разрешение на создание секретов во всех пространствах имен.
Поскольку я новичок в k8s и DevOps в целом, я хотел убедиться, что этот подход является разумным, а не антипаттерном.