Уникальные сервисные имена для gitlab auto devops
При использовании gitlab auto devops я замечаю, что каждый проект создается в своем собственном пространстве имен, определяя имя службы как production-auto-deploy
,
$kubectl get services --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
app-13094854 production-auto-deploy ClusterIP 10.245.23.224 <none> 5000/TCP 11h
app-13094854 production-postgres ClusterIP 10.245.202.205 <none> 5432/TCP 11h
config-server-13051179 production-auto-deploy ClusterIP 10.245.138.49 <none> 5000/TCP 40m
default kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 11h
gitlab-managed-apps ingress-nginx-ingress-controller LoadBalancer 10.245.200.23 206.189.243.26 80:30888/TCP,443:30962/TCP 11h
gitlab-managed-apps ingress-nginx-ingress-controller-stats ClusterIP 10.245.104.211 <none> 18080/TCP 11h
gitlab-managed-apps ingress-nginx-ingress-default-backend ClusterIP 10.245.202.171 <none> 80/TCP 11h
gitlab-managed-apps tiller-deploy ClusterIP 10.245.31.107 <none> 44134/TCP 11h
kube-system kube-dns ClusterIP 10.245.0.10 <none> 53/UDP,53/TCP,9153/TCP 11h
some-microservice-13093883 production-auto-deploy ClusterIP 10.245.97.62 <none> 5000/TCP 11h
some-microservice-13093883 production-postgres ClusterIP 10.245.245.253 <none> 5432/TCP 11h
Можно ли настроить это название сервиса? Например, я хочу, чтобы оно включало название проекта, таким образом, отображая production-auto-deploy
-> app-production-auto-deploy
а также some-microservice-production-auto-deploy
,
Причина, по которой я хочу, чтобы эти имена служб были уникальными, заключается в том, что я оцениваю spring-cloud-kubernetes и мне нужны уникальные имена служб для обнаружения ленты с использованием симулированных клиентов.
Кроме того, мне интересно, почему каждому проекту присваивается свое пространство имен, это своего рода передовая практика? Можно ли настроить auto devops для развертывания всех проектов в одном пространстве имен?
2 ответа
Можно ли настроить это название сервиса?
Да, это может быть, используя пользовательскую схему рулевого управления.
Упрощенно, имя службы генерируется из двух переменных (имя выпуска + имя диаграммы)
printf "%s-%s" .Release.Name $name | trimSuffix "-app" ...
По умолчанию Auto DevOps использует собственную таблицу рулевого управления, исходный код которой доступен здесь.
И, изменяя имя в файле Chart.yaml (который содержит метаданные диаграммы), вы можете влиять на окончательное имя службы.
Существует также другой способ настройки имени службы: использование значений переопределений для команды 'helm upgrade' внутри шаблона Deploy.gitlab-ci.yml с '--set nameOverride=<CUSTOM_SVC_NAME>'
Кроме того, мне интересно, почему каждому проекту присваивается свое пространство имен, это своего рода передовая практика? Можно ли настроить auto devops для развертывания всех проектов в одном пространстве имен?
По умолчанию Auto Deploy использует эту технику и соглашение об именах для пространств имен K8S во время развертывания приложений (как описано здесь), и нет никакой возможности изменить его в соответствии с официальной документацией.
Вы можете попробовать на свой страх и риск переопределить его с помощью пользовательской переменной проекта: KUBE_NAMESPACE
Искал повсюду, в итоге очень глубоко погрузился в документацию. Все, что вам нужно, это переопределить шаблон Autodevops. Вот как я изменил имя пространства имен для каждого проекта, а также само имя проекта, чтобы оно использовало имя проекта, а не слаг проекта. Откройте ваш .gitlab-ci.yml и добавьте это:
include:
- template: Auto-DevOps.gitlab-ci.yml
production:
environment:
url: http://$CI_PROJECT_NAME.$KUBE_INGRESS_BASE_DOMAIN
kubernetes:
namespace: $CI_PROJECT_NAME
Если вы просто хотите использовать среды как пространства имен, вы можете сделать это в конфигурации вкладки gitlab "Kubernetes". Для такой опции есть флажок.