使用官方 Helm Chart 安装 Gitea

Helm Chart

Helm 使用的包格式称为 chart。 chart 就是一个描述 Kubernetes 相关资源的文件集合。单个 chart 可以用来部署一些简单的应用, 类似 memcache pod,或者某些复杂的 HTTP 服务器以及 Web 全栈应用、数据库、缓存等等。

如果你想下载和查看 Gitea 官方发布的 Helm chart,但不安装它,你可以用这个命令:

helm repo add gitea https://dl.gitea.io/charts/
helm pull gitea/gitea --untar

这里使用 --untar 指令解压 gitea-*.tgz 压缩包。

Helm Chart 文件结构

Chart 是一个通过文件和目录组织的配置集合。目录名称就是 chart 名称(没有版本信息)。因而描述 Gitea 的chart 可以存储在 gitea/ 目录中。

在这个目录中,Gitea 的 Helm Chart 有以下内容:

$ tree -L 1 gitea

gitea
├── Chart.lock
├── charts/         # 包含 chart 依赖的其他 chart
├── Chart.yaml      # 包含了 chart 信息的 YAML 文件
├── CONTRIBUTING.md
├── LICENSE         # 可选: 包含 chart 许可证的纯文本文件
├── Makefile
├── README.md       # 可选: 可读的 README 文件
├── templates/      # 模板目录,当和 values 结合时,可生成有效的 Kubernetes manifest 文件
└── values.yaml     # chart 默认的配置值

安装 Helm

阅读:安装 Helm

  1. 下载 Helm https://github.com/helm/helm/releases

  2. 解压安装

tar -xvzf helm-*-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm

添加 Helm 仓库

# Gitea 官方仓库
helm repo add gitea https://dl.gitea.io/charts/

# 其他 chart 仓库,包含 mariadb, memcached, mysql, postgresql
helm repo add bitnami https://charts.bitnami.com/bitnami

基于 Helm Chart 安装 Gitea

前提条件

  • Kubernetes 1.12+
  • Helm 3.0+
  • 持久数据 PV

准备 Kubernets 环境的步骤可以参考前面的文章:安装 K3s

自定义 values

首先将 Helm Chart 的配置文件 values.yaml 拉取到本地:

helm show values gitea/gitea > gitea.yaml

Gitea Chart 包括 Gitea 核心软件,可选依赖 MySQL、MariaDB、PostgreSQL、Memcached,支持自定义 app.ini、基于集群的SSH、持久数据存储、管理员、GPG签名、LDAP、OAuth2、Metrics 功能。完整的 values.yaml 文件内容较长,可以通过 Gitea Helm Chart 项目仓库查看。

自定义 Gitea Helm Chart 参数:

# 启用 Ingress
ingress:
  enabled: true
  hosts:
    - host: git.example.com # 修改为你的域名
      paths:
        - path: /           # 起始路径
          pathType: Prefix

# 启用持久存储
persistence:
  enabled: true
  existingClaim:
  size: 10Gi
  accessModes:
    - ReadWriteOnce
  labels: {}
  annotations: {}
  storageClass:
  subPath:

# 设置管理员账号和密码
gitea:
  admin:
    username: gitea_admin
    password: r8sA8CPHD9!bt6d
    email: "gitea@local.domain"

# 设置 Gitea 的配置,配置选项等同于 app.ini 文件中的定义
  config:
    APP_NAME: "My Git Repository"

# 启用 memcached
memcached:
  enabled: true
  service:
    port: 11211

# 启用 postgresql
postgresql:
  enabled: true
  global:
    postgresql:
      postgresqlDatabase: gitea
      postgresqlUsername: gitea
      postgresqlPassword: gitea
      servicePort: 5432
  persistence:
    size: 10Gi

参数说明:

  • ingress:集成负载均衡和域名绑定;
  • persistence:数据持久化存储。请注意,persistence 中留空的 storageClass 将导致 Kubernetes 使用默认 storageClass;
  • gitea:是 Gitea 的配置内容,包括 admin、metrics、oauth 和 config 等。其中 config 映射了 app.ini 配置参数,这些内容最后都会有 app.ini 文件的形式呈现;
  • memcached:用于数据缓存;
  • postgresql:开启 PostgreSQL 作为外部数据库;

上述配置参数只做演示用,实际部署时需要根据自己的需求来决定安装哪些组件以及 PVC 的类型和容量。
更多配置参数请阅读:https://gitea.com/gitea/helm-chart

使用 Helm 安装 Gitea

在 Kubernetes 上创建一个 namespace:

kubectl create ns gitea

基于自定义的 gitea.yaml 安装 Gitea:

$ helm install gitea --namespace gitea -f gitea.yaml gitea/gitea

NAME: gitea
LAST DEPLOYED: Thu Jan  5 19:10:55 2023
NAMESPACE: gitea
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  http://git.example.com/

在 gitea namespace 下面会有 3 个 pod 生成:

$ kubectl -n gitea get pods

NAME                               READY   STATUS    RESTARTS   AGE
gitea-memcached-c97bf6cf9-fjrcn    1/1     Running   0          3m20s
gitea-postgresql-0                 1/1     Running   0          3m20s
gitea-0                            1/1     Running   0          3m20s

整个过程会完成 Gitea 的初始化,可以在 pod 的 log 中进行查看:

$ kubectl -n gitea logs -f gitea-0

Defaulted container "gitea" out of: gitea, init-directories (init), init-app-ini (init), configure-gitea (init)
Generating /data/ssh/ssh_host_ed25519_key...
Generating /data/ssh/ssh_host_rsa_key...
Generating /data/ssh/ssh_host_dsa_key...
Generating /data/ssh/ssh_host_ecdsa_key...
Server listening on :: port 22.
Server listening on 0.0.0.0 port 22.
2023/01/05 11:14:48 cmd/web.go:106:runWeb() [I] Starting Gitea on PID: 17

查看 Ingress 状态:

$ kubectl -n gitea get ingress

NAME    CLASS     HOSTS             ADDRESS         PORTS   AGE
gitea   traefik   git.example.com   192.168.3.127   80      10m

将域名解析到 IP 地址 <ADDRESS> 之后可以使用 http://git.example.com 登录 Gitea 实例。

至此,我们使用官方 Helm Chart 在 Kubernetes 上成功安装了 Gitea 实例,接下来就可以开启 Gitea 之旅了。

posted @ 2023-01-13 17:26  Gitea  阅读(464)  评论(0编辑  收藏  举报