🚀 Kubernetes 上的 GITLAB:终极部署指南! 🌟 glasskube/glasskube

2025-06-05

🚀 Kubernetes 上的 GITLAB:终极部署指南!🌟

glasskube/glasskube

TL;DR🔍

探索在 Kubernetes 上部署 GitLab 的分步指南,重点介绍 Omnibus 软件包配置。学习如何设置 PostgreSQL、SMTP、容器注册表、Sidekiq、Prometheus 指标和备份。探索 Glasskube GitLab Kubernetes Operator 的替代方案,简化流程并将设置时间缩短至仅需 5 分钟。


我们期待您的反馈!🫶

在下面的评论区分享你的想法!告诉我们你希望我们为你提供哪些主题的更多内容。如果本指南对你有帮助,请点击猫咪图标并留下一颗星,以支持我们创作更多以开发者为中心的内容。你的反馈至关重要!

Glasskube Github


让我们开始吧🏌️

GitLab是一个面向软件工程团队的开源 DevSecOps 平台。

有两种方式可以在 Kubernetes 集群上部署 GitLab:

  1. GitLab 云原生混合
  2. GitLab 软件包(Omnibus)

GitLab 云原生混合

部署 GitLab 云原生混合架构仅在查询特定的用例中才有意义。例如,如GitLab 决策树所示,如果 GitLab 实例需要服务至少 3,000 位用户。对于这种部署,GitLab 组件将分别安装在不同的 Docker 容器中。因此,最低要求是 10 个节点,总共 19 个 vCPU 和 60 GB 内存,每月云成本将高达数千美元。

因此大多数情况下 GitLab Cloud native 是不需要且不太复杂的。

那么,如何在 Kubernetes 上部署 GitLab Omnibus?

Kubernetes 上的 GitLab Omnibus

GitLab 还以“omnibus”为名,发布了以 Docker 镜像形式提供的一体化软件包hub.docker.com/r/gitlab/gitlab-ce,这些软件包可以通过环境变量轻松配置。正确配置后,可以轻松地在 Kubernetes 上部署 GitLab。

为了实现合理的 Kubernetes 设置,应正确配置以下重要组件:

  1. PostgreSQL 数据库
  2. SMTP 配置
  3. Kubernetes 上的 GitLab 容器注册表
  4. Sidekiq、Gitaly 和 Puma 配置
  5. Prometheus 指标
  6. Kubernetes 上的 GitLab 备份

Kubernetes 上的 GitLab:配置外部 PostgreSQL 数据库

您可以使用CloudNativePG PostgreSQL Operator创建 PostgreSQL 数据库。安装该 Operator 后,可以通过应用 Kubernetes CR 来部署新的 Postgres 集群:

kind: Cluster
apiVersion: postgresql.cnpg.io/v1
metadata:
  name: gitlab
spec:
  enableSuperuserAccess: false
  instances: 2
  bootstrap:
    initdb:
      database: gitlabhq_production
      owner: gitlab
  storage:
    size: 20Gi
Enter fullscreen mode Exit fullscreen mode

重要的是,数据库必须被调用,gitlabhq_production并且配置的gitlab数据库用户是数据库的所有者。在本例中,我们创建了一个由两个 PostgreSQL 副本组成的集群,以确保即使运行主副本的节点发生故障,数据库仍然可用。这被称为高可用性 (HA)。
现在,我们已经创建了自己的 PostgreSQL 集群,因此必须在文件中禁用综合镜像中包含的数据库gitlab.rb

postgresql['enable'] = false

gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'unicode'
gitlab_rails['db_host'] = 'gitlab-pg-rw'
gitlab_rails['db_password'] = '<your-password>'
Enter fullscreen mode Exit fullscreen mode

很好,我们已经为 GitLab 安装准备好了云原生数据库。

Kubernetes 上的 GitLab:配置 SMTP 凭据

为了确保你的 GitLab 实例能够发送电子邮件,你需要配置一个 SMTP 服务器。这也可以在gitlab.rb文件中完成。

gitlab_rails['smtp_enable'] = ...
gitlab_rails['smtp_address'] = ...
gitlab_rails['smtp_port'] = ...
gitlab_rails['smtp_user_name'] = ...
gitlab_rails['smtp_password'] = ...
gitlab_rails['smtp_tls'] = ...
gitlab_rails['gitlab_email_from'] = ...
Enter fullscreen mode Exit fullscreen mode

例如,可以在 Brevo 平台上创建用于交易电子邮件的免费 smtp 服务器。

Kubernetes 上的 GitLab:容器注册表

GitLab 拥有众多功能,其中之一就是支持作为容器注册表。这是通过捆绑 Docker 容器注册表的参考实现来实现的,但由于设置起来比较麻烦,默认情况下此功能处于禁用状态。

重要
重要的是要理解,GitLab omnibus 容器中的所有请求将首先由内部 nginx 服务器处理,然后分发到组件。

容器注册表仅适用于 TLS 加密连接,因此我们需要通过入口负载均衡器禁用 TLS 终止,并将加密流量直接发送到 GitLab 容器。如果使用 NGINX 入口控制器,则可以通过在入口中添加以下注释来实现:nginx.ingress.kubernetes.io/ssl-passthrough: true

此后,gitlab.rb必须应用以下配置:

registry['enable'] = true
gitlab_rails['registry_enabled'] = true
registry['token_realm'] = "https://" + ENV['GITLAB_HOST']
gitlab_rails['registry_enabled'] = true
gitlab_rails['registry_host'] = ENV['GITLAB_REGISTRY_HOST']
gitlab_rails['registry_api_url'] = "http://localhost:5000"

registry_external_url 'https://' + ENV['GITLAB_REGISTRY_HOST']
registry_nginx['redirect_http_to_https'] = true
registry_nginx['listen_port'] = 5443
registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/tls.crt"
registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/tls.key"
registry_nginx['real_ip_trusted_addresses'] = ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']
registry_nginx['server_names_hash_bucket_size'] = 128
Enter fullscreen mode Exit fullscreen mode

此外,可以配置 S3 存储桶(或兼容的云存储端点),以便所有图像层不会存储在卷内,而是存储在可扩展的 S3 中

Kubernetes 上的 GitLab:Sidekiq、Gitaly 和 Puma 配置

Puma(Ruby 的 HTTP 服务器)、Sidekiq(作业调度程序)和 Gitaly(GitLabs 的 Git 桥接器)都可以自定义工作线程数/线程数。最佳配置很大程度上取决于您的用例和需要支持的用户数量。合理的最小配置如下:

puma['worker_processes'] = 2
sidekiq['max_concurrency'] = 9
Enter fullscreen mode Exit fullscreen mode

Kubernetes 上的 GitLab:Prometheus 指标

GitLab omnibus 软件包在镜像中自带了 prometheus 实例。由于大多数 Kubernetes 集群中已经存在 prometheus 实例,因此可以安全地禁用自带的 prometheus。

prometheus_monitoring['enable'] = false
Enter fullscreen mode Exit fullscreen mode

AServiceMonitor可用于告诉正在运行的 Prometheus 实例在以下端口上监视 GitLabs 组件的公开指标端点:

  • 8082(sidekiq)
  • 9168(gitlab)
  • 9236(意大利)

Kubernetes 上的 GitLab:备份

好吧,在 Kubernetes 上备份 GitLab 本身就可以算是一个技术指南。最简单的方法是使用像Velero这样的备份解决方案备份整个命名空间

Glasskube GitLab Kubernetes 操作员

认识一下 Glasskube GitLab Kubernetes Operator——我们的开发团队在 GitLab 部署过程中,一直饱受繁琐的配置流程、耗时的设置以及持续不断的故障排除困扰,而 Glasskube GitLab Kubernetes Operator 正是为此而生。为了应对这些挑战,我们精心设计了一个简化整个部署体验的解决方案。Glasskube GitLab Kubernetes Operator 可以部署一个完全配置的 GitLab 实例,并通过自定义资源定义 (CRD) 将所有功能巧妙地抽象出来。有了它,您再也不需要花费大量时间进行设置和更新了。现在,您只需 5 分钟即可轻松启动新的 GitLab 实例。快来试用并分享您的反馈吧!

安装 Glasskube 操作员

第一步是通过 Helm Chart 安装 Glasskube:

helm repo add glasskube https://charts.glasskube.eu/
helm repo update
helm install my-glasskube-operator glasskube/glasskube-operator
Enter fullscreen mode Exit fullscreen mode

完整文档可以在我们的入门文档中找到

部署 GitLab

重要必须在或 上
设置 DNS 条目。如果配置了 ,则 SSL 证书由 自动生成LoadBalancerIngress Host
LoadBalancercert-managerClusterIssuer

gitlab.yaml

apiVersion: "v1"
kind: "Secret"
metadata:
  name: "gitlab-smtp"
stringData:
  username: "..."
  password: "..."
---
apiVersion: v1
kind: Secret
metadata:
  name: gitlab-registry-secret
stringData:
  accessKey: "..."
  secretKey: "..."
---
apiVersion: "glasskube.eu/v1alpha1"
kind: "Gitlab"
metadata:
  name: "gitlab"
spec:
  host: "gitlab.mycompany.eu"
  sshEnabled: true
  sshHost: "ssh.gitlab.mycompany.eu"
  smtp:
    host: "..."
    port: 465
    fromAddress: "noreply+gitlab@mycompany.eu"
    authSecret:
      name: "gitlab-smtp"
    tlsEnabled: true
  registry:
    host: "registry.gitlab.mycompany.eu"
    storage:
      s3:
        bucket: gitlab-registry
        accessKeySecret:
          name: gitlab-registry-secret
          key: accessKey
        secretKeySecret:
          name: gitlab-registry-secret
          key: secretKey
        region: ...
Enter fullscreen mode Exit fullscreen mode
kubectl apply -f gitlab.yaml
Enter fullscreen mode Exit fullscreen mode


就是这样!完整的自定义资源文档可以在 Glasskube的 GitLab 文档
中找到。

在 Kubernetes 上部署 GitLab Runner

GitLab 上的运行器是支持持续集成和持续交付 (CI/CD) 流水线的执行代理。
它们负责运行作业,即流水线中的各个步骤或任务。

Glasskube Gitlab Kubernetes Operator 让向 Gitlab 添加 Runner 变得非常简单。首先,需要通过 创建一个新的 Runner https://{{host}}/admin/runners/new。之后,只需将这些 Runner 令牌添加到gitlab.yaml规范中,Glasskube Kubernetes Operator 就会自动生成这些 Runner 并将其连接到 Gitlab 实例。

  runners:
    - token: glrt-xxxxXX-xxxxxXXXXX # can be generated at https://{{host}}/admin/runners/new
Enter fullscreen mode Exit fullscreen mode

完整的自定义资源文档可以在 Glasskube 文档中关于GitLab runner 的文档中找到

现在安装已完成。对 Kubernetes Operator 的更新将自动更新 GitLab。

结论

在 Kubernetes 上为不到一千名用户部署 GitLab 实例,不应使用 GitLabs 云原生混合 helm chart,而应使用专门安装的 GitLab Omnibus 软件包并结合云原生基础设施。Glasskube Kubernetes 操作员会负责这项工作。


Glasskube Github


星形玻璃杯:

glasskube/glasskube

文章来源:https://dev.to/glasskube/gitlab-on-kubernetes-the-ultimate-deployment-guide-188b
PREV
Glasskube v0.10.0 现已推出!
NEXT
DevOps 工程师的 20 个生活小窍门