本文将介绍如何在容器服务 TKE 上部署 Gitlab 作为私有的代码托管平台。
已创建 TKE 集群 并能够通过 Kubectl 连接集群。
使用 Helm 安装 Gitlab,并传入本文推荐的 values.yaml 配置(镜像同步 + TKE 适配)。本文提供以下两种方法在 TKE 上部署 Helm 应用:
说明:
- 使用控制台部署时,无需安装 Helm 命令。
- 使用 Helm 命令部署时,适用于 CI/CD 流程。
安装 Gitlab 后,默认会创建一个 CLB 并使用4层监听器作为 Gitlab 的访问入口,通过以下步骤可在控制台找到对应的 CLB 及其外网 IP:
gitlab-initial-root-password
的 secret 中获取。values.yaml 推荐配置中的参数可以根据自身环境和需求进行自定义,详细介绍如下:
Gitlab 的 Chart 包中包含许多其他依赖的可选应用,在多数场景下并不需要安装。不同环境配置不同,若安装全部应用反而可能带来更多不确定性,加大维护难度,建议根据实际环境安装所需的依赖。推荐配置中许多依赖应用已禁用,YAML 示例文件如下:
certmanager:
install: false
nginx-ingress:
enabled: false
prometheus:
install: false
gitlab-runner:
install: false
registry:
enabled: false
ingress:
enabled: false
在测试环境中,可以同时安装依赖的 Redis 与 PostgreSQL,在生产环境则建议您使用相应的专业云产品。本文推荐配置 values.yaml 中默认安装 Redis 与 PostgreSQL,由于 TKE 默认的 StorageClass 为创建云硬盘,且最低容量为10Gi,因此 Redis 与 PostgreSQL 默认申请10Gi的容量用以持久化数据。YAML 示例文件如下:
redis:
install: true
usePassword: true
password: "123456"
cluster:
enabled: false
master:
persistence:
size: 10Gi
postgresql:
install: true
postgresqlUsername: gitlab
postgresqlPostgresPassword: "123456"
persistence:
size: 10Gi
Gitlab 安装后默认会创建一个 CLB 并使用4层监听器(8181端口)作为 Gitlab 的访问入口。YAML 文件如下:
gitlab:
webservice:
service:
type: LoadBalancer # 使用四层 LB 暴露
workhorseExternalPort: 8181 # gitlab 界面对外端口号
说明:可在浏览器输入
http://<外网IP>:8181
进行访问。
在生产环境中建议使用 Ingress 来暴露流量,如需使用 HTTPS,将证书配置在 Ingress 上即可。在 TKE 上推荐使用 Nginx-ingress,需要额外安装组件,详情请参见 Nginx-ingress 介绍。
如需使用 Nginx-ingress 对外暴露 Gitlab 服务,只需 ClusterIP 即可,Gitlab 本身的 Service 则无需为 LoadBalancer。YAML 示例文件如下:
gitlab:
webservice:
service:
type: ClusterIP # 不为 gitlab 自动创建 CLB
创建 Ingress。您可以通过 TKE 控制台或 YAML 创建 Ingress:
参考控制台 创建 Ingress 步骤创建 Ingress。其中:
创建 Ingress 后,流量入口 IP 地址为所选 Nginx Ingress 实例的外网 IP。如下图所示:
Nginx Ingress 实例默认 HTTP 端口为80、HTTPS 端口为443。若 Nginx Ingress 部署在国内地域,使用这两个标准端口进行访问,则需要先为其备案。在测试时,如需使用非标准端口访问,可通过执行以下命令,修改 Nginx Ingress 实例的 service,将80或443改为其他端口。
kubectl -n kube-system edit svc nginx-ingress-nginx-controller # svc 名称带 ingressClass 名称前缀
如需暴露 Gitlab 的 SSH 协议,可修改 Nginx Ingress 实例配置以开放22端口。执行以下命令,修改暴露 TCP 的 configmap。示例如下:
$ kubectl -n kube-system get cm | grep nginx-ingress
nginx-ingress-nginx-controller 6 8d
nginx-ingress-nginx-tcp 0 8d
nginx-ingress-nginx-udp 0 8d
qcloud-tke-nginx-ingress-controller 0 14d
$ kubectl -n kube-system edit cm nginx-ingress-nginx-tcp
将 Gitlab shell 的22端口暴露在 nginx ingress controller 的22端口上。YAML 文件示例如下:
data:
22: "devops/gitlab-gitlab-shell:22"
执行以下命令,修改 nginx ingress controller 的 service。示例如下:
$ kubectl -n kube-system get svc
nginx-ingress-nginx-controller LoadBalancer 172.21.252.133 49.233.238.230 8888:30443/TCP,8443:32345/TCP 8d
$ kubectl -n kube-system edit svc nginx-ingress-nginx-controller
将 controller 的22端口暴露到 CLB 上。YAML 文件示例如下:
- name: git-ssh
port: 22
protocol: TCP
targetPort: 22
至此,您在通过 git clone 命令克隆代码时,即可使用 git@
开头的地址(SSH 协议)。
Gitlab 的域名配置主要用于信息展示,例如 git clone 代码时显示的 URL 地址,可以通过以下 YAML 配置进行设置:
global:
hosts:
gitlab:
name: gitlab.example.com # 页面展示的域名
https: true # 展示的 URL 中是否用 https。如果为 ingress 配了证书,这里就置为 true
针对不同操作系统,OBS Browser+下载地址如 表1 所示。 表1 下载列表 支持平台 ...
Packer是一款轻量级的镜像定义工具,能够运行在常用的主流操作系统(如Windows、...
CDN加速范围与源站服务器位置 CDN域名的加速范围对源站服务器所在位置没有特殊要...
正值“十四五”开局之年,金融行业立足新发展阶段、贯彻新发展理念,守正创新,...
背景信息 最新内容,请参见 查看和提升实例配额 。...
免费云服务器 试用一年?一年太长了。市面上的确有一些服务器是支持免费试用的,...
文科生的困境和突破 我的外公是名高中校长 小时候他经常给我们表兄妹讲《东游记...
您默认可以创建10个弹性伸缩组,100个弹性伸缩配置。每个弹性伸缩组同一时刻支持...
来源 | 飞天CIO学堂微信公众号 编者按: 中华文明上下五千年,其国家治理的核心...
域名抢注 哪个网站好?未被注册的 域名 和已被注册但到期未续费即将删除的域名,...