Skip to content

GitLab CE 19.2.2 高可用部署(RKE2 / NFS / Harbor)

在 RKE2 集群(API 192.168.122.31:6443)上用官方 Helm Chart 10.2.2 部署 GitLab CE 19.2.2 高可用实例。

架构

浏览器/ Git 客户端
  ├─ 公网: https://ai-ear.cn:9020  →  8.153.84.140 Traefik(ep9020) → frps:19020
  │     → 宿主机 frpc → NodePort 30080 → gitlab-web-nodeport svc → webservice×2 (workhorse:8181)
  ├─ 公网 SSH: ssh://git@ai-ear.cn:19022 → frps:19022 → frpc → NodePort 30022 → gitlab-shell×2
  └─ 内网: http://<任一节点>:30080 / ssh -p 30022 git@<节点>

namespace gitlab:
  webservice×2 ──┐
  sidekiq×2 ─────┼─→ PostgreSQL 17 (单副本, NFS)  库: gitlabhq_production / _ci / praefect
  toolbox    ────┤   Redis 7 (单副本, NFS)
                 │   MinIO (单副本, NFS) buckets: gitlab / gitlab-backups / tmp
  praefect×2 ────┴─→ gitaly×3 (StatefulSet, 各 100Gi NFS PVC, Praefect 三副本复制)
  • HA 范围:入口层(webservice/sidekiq/shell/praefect 多副本)+ Git 数据层(Praefect + Gitaly×3 同步复制,单节点宕机不丢数据不停写)
  • 已知单点:PostgreSQL / Redis / MinIO 为单副本(数据落 NFS,pod 重建即恢复);详见 docs/05-运维手册.md

资源约定

镜像仓库192.168.122.156:30000/gitlab/*(HTTP Harbor,chart 在 charts/gitlab:10.2.2 OCI)
镜像源registry.gitlab.com 直连;docker.io 走 docker.m.daocloud.io
存储SC nfs-gitlab192.168.122.1:/mnt/xfs/rancher/gitlab(专用 provisioner)
NodePortWeb 30080、SSH 30022
公网https://ai-ear.cn:9020ssh://git@ai-ear.cn:19022(frp 惯例同 Jenkins)

目录

charts/gitlab-10.2.2.tgz        # 官方 chart(来源 https://charts.gitlab.io/)
deploy/nfs-provisioner-values.yaml
deploy/deps/00-secrets.yaml     # 所有密钥(pg/redis/minio/root/praefect-db/对象存储/备份)
deploy/deps/10-postgres.yaml    # PG 17 + 初始化 gitlabhq_production{,_ci}/praefect
deploy/deps/20-redis.yaml       # Redis 7(AOF)
deploy/deps/30-minio.yaml       # MinIO 对象存储
deploy/deps/31-minio-buckets-job.yaml
deploy/gitlab/values.yaml       # chart values(HA 拓扑、镜像指向 Harbor、NodePort 等)
deploy/gitlab/30-gitlab-yml-override-cm.yaml  # gitlab.yml.erb 覆盖(外部端口 9020)
deploy/gitlab/40-nodeport-svc.yaml            # webservice 固定 NodePort 30080
scripts/sync-images.sh          # skopeo 镜像同步
scripts/post-render.sh          # Helm 后渲染:注入 port: 9020 到 webservice CM
scripts/post-render.py          # 后渲染 Python 脚本(被 post-render.sh 调用)
scripts/deploy.sh               # 一键部署
docs/                           # 01 环境准备 / 02 镜像同步 / 03 高可用部署 / 04 公网接入 / 05 运维手册 / 06 故障修复记录

快速开始

bash
export KUBECONFIG=~/.kube/config-122.31
bash scripts/sync-images.sh    # 首次或升级时
bash scripts/deploy.sh

详见 docs/ 下各篇。