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 二进制文件命令行来生成
- https://docs.gitea.com/administration/command-line#generate
gitea generate secret SECRET_KEYSECRET_KEY可以不管,自己生成随机码gitea generate secret INTERNAL_TOKENgitea generate secret JWT_SECRET- 不想自己生成可以直接使用以下实际生成的配置
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
- https://docs.gitea.com/administration/repo-indexer
- 修改
gitea.config.indexer.ISSUE_INDEXER_TYPE - meilisearch 不支持 repo index
- repo index 会占用大量磁盘空间,大约是存储库大小的 6 倍
- 反代根据实际穿透和局域网网段自行设置
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
- Author:白鸟3
- URL:https://blog.kun2peng.top/operation/k8s_gitea
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
