gitlab auto devops 的唯一服务名称
Posted
技术标签:
【中文标题】gitlab auto devops 的唯一服务名称【英文标题】:Unique service names for gitlab auto devops 【发布时间】:2019-11-11 09:46:14 【问题描述】:在使用 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,并且我需要使用 feign 客户端进行功能区发现的唯一服务名称。
另外我想知道为什么每个项目都有自己的命名空间,这是某种最佳实践吗?是否可以将 auto devops 配置为将所有项目部署在同一个命名空间中?
【问题讨论】:
【参考方案1】:四处寻找,最终深入研究文档。您只需要覆盖 Autodevops 模板。以下是我如何将每个项目的命名空间名称也更改为项目名称本身,因此它将使用项目名称而不是项目 slug。打开你的 .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”选项卡配置中做到这一点。那里有一个用于此类选项的复选框。
【讨论】:
【参考方案2】:这个服务名称可以自定义吗?
是的,可以,通过使用custom helm 图表。
简单来说,服务名是由两个变量生成的(Release name + Chart name)
printf "%s-%s" .Release.Name $name | trimSuffix "-app" ...
默认情况下,Auto DevOps 使用自己的掌舵图,源代码可用here。
通过更改Chart.yaml 文件(包含图表的元数据)中的“名称”,您可以影响最终的服务名称。
还有另一种自定义服务名称的方法:在“Deploy.gitlab-ci.yml”模板中使用“helm upgrade”命令的覆盖值和'--set nameOverride=<CUSTOM_SVC_NAME>'
另外我想知道为什么每个项目都有自己的 命名空间,这是某种最佳实践吗?可以自动开发吗 配置为将所有项目部署在同一个命名空间中?
默认情况下,Auto Deploy 在应用程序部署期间使用此技术和 K8S 命名空间的命名约定(如 here 所述),并且无法根据官方文档进行更改。
您可以尝试使用 custom project 变量覆盖它,风险自负:KUBE_NAMESPACE
【讨论】:
以上是关于gitlab auto devops 的唯一服务名称的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Gitlab 的 Auto DevOps 用于多容器应用程序?
Kubernetes 上的 GitLab Auto DevOps 挂起,网络超时,无法执行 yj