前言

在前面的文章中,演示了如何用 Docker 镜像和 Windows 二进制包来装置运转 Gitea。今天是玩转 Gitea 系列的运用 Helm 在 K3s 上装置 Gitea。

关于 Gitea 的其他装置和运用方法,能够检查大众号文章:Gitea 装置装备系列教程。

关于 K3s

K3s 是 Rancher 发布的一款 Kubernetes 轻量级发行版,拥有完整特性的一起装置和运用也十分方便。

K3s 的装置

K3s 的装置有多种方法,详细内容能够检查K3s 中文文档。本文搭建的 Kubernetes 运转环境如下:

  • 服务器:运用 K3s 装置脚本装置 Kubernetes 发行版环境
  • 管理员客户端:装置 kubectl 和 helm 指令行工具

运用如下指令装置 K3s

# 方案一:会从 K8s 的 GitHub 库房下载装置包
$ curl -sfL https://get.k3s.io | sh -
# 方案二:中国大陆用户,运用 Rancher 提供的阿里云 CDN 加速下载
$ curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
# 以下是装置过程输出的信息
[INFO]  Finding release for channel stable
[INFO]  Using v1.24.6+k3s1 as release
[INFO]  Downloading hash rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/v1.24.6-k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/v1.24.6-k3s1/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Skipping installation of SELinux RPM
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Skipping /usr/local/bin/ctr symlink to k3s, command exists in PATH at /usr/bin/ctr
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s

能够用 kubectl 来检查装置是否成功:

$ kubectl get nodes
NAME     STATUS   ROLES                  AGE     VERSION
debian   Ready    control-plane,master   5m42s   v1.24.6+k3s1

能够看到有一个单节点的 K3s 集群正在运转了。接下来就用 K3s 来运转 Gitea。

从外部拜访 k3s

1.获得拜访集群所需的装备文件 /etc/rancher/k3s/k3s.yaml,将其复制到个人工作目录~/.kube/config,或者其他能够拜访到集群网络的客户机。

mkdir ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER ~/.kube/config
sudo chmod 600 ~/.kube/config
# 将 KUBECONFIG 增加到个人工作环境变量,便于 Helm、kubectl 读取
echo "export KUBECONFIG=~/.kube/config" >> ~/.bashrc

2.将装备文件 ~/.kube/config 中的 server: https://127.0.0.1:6443 更改为客户机可拜访的服务器地址。

装置 kubectl

阅读:装置 kubectl

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

装置 Helm

阅读:装置 Helm

  1. 下载 Helm github.com/helm/helm/r…

  2. 解压装置

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

增加 Helm 库房

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

运用 Helm 装置 Gitea

前提条件

在 K3s 上装置 Gitea 需求保证提早装置了 Helm,v2 或 v3 版别均可,但是建议用 v3,本文的 Helm 版别信息如下:

$ helm version
version.BuildInfo{Version:"v3.10.0", GitCommit:"ce66412a723e4d89555dc67217607c6579ffcb21", GitTreeState:"clean", GoVersion:"go1.18.6"}

增加 Gitea Helm Chart 库房:

$ helm repo add gitea https://dl.gitea.io/charts
"gitea" has been added to your repositories

更新 Helm Chart 本地缓存

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "gitea" chart repository
Update Complete. ⎈Happy Helming!⎈

Gitea Helm Chart 定制

K3s 上装置 Gitea,是经过 Helm 实现的。首先将 Gitea Helm chart 的 values.yaml 装备文件拉取到本地:

helm show values gitea/gitea > gitea.yaml

由于 Gitea Helm Chart 包含多个组件,包含核心组件 Gitea、可选依靠组件(比如 MySQL、MariaDB、PostgreSQL、Memcached 等)、可选功能集成(Ingress、Service、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@example.com"
# 设置 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:用于数据缓存。一旦启用这项装备,会主动在 app.ini 中生成下面的装备:
[cache]
ADAPTER = memcache
ENABLED = true
HOST = RELEASE-NAME-memcached.default.svc.cluster.local:11211
  • postgresql:敞开 PostgreSQL 作为外部数据库

上述装备参数只做演示用,实践布置时需求根据自己的需求来决议装置哪些组件以及 PVC 的类型和容量。 更多装备参数请阅读:gitea.com/gitea/helm-…

用 Helm 装置 Gitea

先创立一个 namespace:

kubectl create ns gitea

执行 helm install 指令,装置 Gitea:

$ helm install gitea --namespace gitea -f gitea.yaml gitea/gitea
NAME: gitea
LAST DEPLOYED: Wed Oct 12 13:19:29 2022
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-77fc54d6fb-sft9q   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.
2022/10/12 05:21:02 cmd/web.go:106:runWeb() [I] Starting Gitea on PID: 17
2022/10/12 05:21:02 cmd/web.go:157:runWeb() [I] Global init

检查 Ingress 状况:

$ kubectl -n gitea get ingress
NAME    CLASS    HOSTS             ADDRESS         PORTS   AGE
gitea   <none>   git.example.com   192.168.3.102   80      11m

将域名解析到 Ingress 之后能够运用 http://git.example.com 登录 Gitea 实例。

手把手教你玩转 Gitea|使用 Helm 在 K3s 上安装 Gitea

至此,在 Kubernetes 上成功装置了 Gitea 实例,接下来就能够敞开 Gitea 之旅了。

正如最初所说,如果是生产级别的运用,需求根据每个公司的详细场景需求来做一些额外的装备,比如 PVC、LDAP、OAuth2、SMTP 等,这些也只需求修正 values.yaml 文件进行装置即可。