Lazy loaded image
k8s 部署高可用 gitea 集群
Words 1120Read Time 3 min
2025-10-21
2025-11-10
date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Nov 10, 2025 10:03 PM
是否已更新
orginal_page
是否推荐
  • 注意,gitea 核心的实现目前并没有完全实现高可用
gitea 高可用集群具体要求
  • 需要一个 RWX 文件系统
    • 由 longhorn 提供
  • 除此之外还需要
    • A HA-ready issue (and optionally code) indexer
      • elasticsearch 或 meilisearch
    • A HA-ready external object/asset storage
      • s3 存储
    • A HA-ready cache
      • redis or valkey
    • A HA-ready db
      • postgresql 等关系型数据库
采用外部 postgresql, redis-sentinel 集群和外部 garage s3 存储
  • 也可以使用内建 chart
  • redis 为 Session,缓存和队列提供高可用内存
    • 目前官方已经改用 valkey 来替换 redis chart
  • 外部 redis 用 sentinel 或者 cluster 都可以,支持的 uri.Scheme 详见
  • redis acl 参考
    • user gitea on ><giteapass> ~* &* +set +get +del +hset +hdel +hexists +hkeys +exists +incr +decr +flushdb +lpush +rpush +lpop +llen +sadd +srem +sismember +dbsize +ping
  • 添加官方 repo
    • helm repo add gitea https://dl.gitea.com/charts
配置 gitea 安装选项
  • helm show values gitea/gitea > ~/.config/helm/value/gitea.yaml
创建管理员凭据 Secret gitea-admin-secret
  • echo -n "admin passwd: " && read -s GITEA_ADMIN; echo
  • kubectl create secret generic gitea-admin-secret \ -n svn \ --from-literal=username=admin \ --from-literal=password=$GITEA_ADMIN
    • key 为 users
  • kubectl get secret -n svn gitea-admin-secret -o yaml
  • kubectl get secret -n svn gitea-admin-secret -o jsonpath='{.data.password}' | base64 --decode
    • 查看解码后的情况
  • unset GITEA_ADMIN
创建配置 Secret
vim /tmp/gitea.config.secret.yaml
  • redis 其他连接参数见
  • token 和密钥可以通过 gitea 二进制文件命令行来生成
  • kubectl create secret generic gitea-config-secret \ -n svn \ --from-file=/tmp/gitea.config.secret.yaml
  • kubectl get secret -n svn gitea-config-secret -o yaml
  • kubectl get secret -n svn gitea-config-secret -o jsonpath='{.data.database}' | base64 --decode
    • 查看解码后的情况
  • rm /tmp/gitea.config.secret.yaml
创建 RWX 存储 PVC
vim ~/.config/k3s/pvc.gitea.yaml
  • kubectl apply -f ~/.config/k3s/pvc.gitea.yaml
  • kubectl describe -n svn pvc/longhorn-gitea-pvc
  • kubectl -n longhorn-system get volumes
  • kubectl -n longhorn-system get nodes.longhorn.io
vim ~/.config/helm/value/gitea.yaml
  • rootless 模式运行
  • 外部数据库需要配置在 gitea.config 里
  • 还可以采用 meilisearch 作为 issue indexer
  • 反代根据实际穿透和局域网网段自行设置
helm 安装 gitea
  • helm upgrade --install gitea gitea/gitea \ -n svn --create-namespace \ -f ~/.config/helm/value/gitea.yaml
查看运行情况
  • kubectl get -n svn deploy
  • kubectl logs --since 1h -n svn deploy/gitea
  • kubectl get -n svn svc
    • 前端 gitea-http 端口在 3000
    • gitea-ssh 端口在 2222
  • kubectl describe -n svn svc/gitea-ssh
  • kubectl get -n svn endpoints gitea-ssh -o wide
  • kubectl -n svn exec -it $(kubectl get -n svn pods -l app.kubernetes.io/name=gitea -o jsonpath="{.items[0].metadata.name}") -- bash
    • 进入 gitea 容器内部查看
    • cat /data/gitea/conf/app.ini
创建到 gitea-svc 和 gitea-ssh 的路由
配置 k3s traefik 路由和 DNS 记录
k3s traefik 新增 2222 ssh 端口用于 gitea-ssh 连接
  • vim /var/lib/rancher/k3s/server/manifests/traefik-config.yaml
  • 注意,,expose 改过语法,很多老教程还是 expose: true
  • 参考 k3s 配置内置 AddOn
vim ~/.config/k3s/IngressRoute.gitea.yaml
  • 这里的 Host 要和 gitea 设置的 root_url 一致,不然会有警告
  • kubectl apply -f ~/.config/k3s/IngressRoute.gitea.yaml
添加对应域名的 DNS 记录到 /etc/hosts
  • kubectl -n kube-system get svc -l app.kubernetes.io/name=traefik -o wide
    • 获取 external-ip
  • kubectl logs -n kube-system -l app.kubernetes.io/name=traefik --since=1h --tail=100
  • kubectl -n kube-system describe deploy traefik | grep namespaces
    • 检查是否仅代理特定 namespace
curl 测试
  • curl -vk https://gitea.traefik.cluster.local/
ssh 测试
  • ssh -t -v -p 2222 -i ~/.ssh/gitea.admin.key git@gitea.traefik.cluster.local
    • 假设已经添加了 SSH 私钥对应公钥到最初创建的管理员账户 admin
 
上一篇
Openwrt 系统交叉编译
下一篇
redis oss 迁移到 valkey 并同步数据

Comments
Loading...