在K8S中部署Gitea

一、基础信息

因Gitlab对系统资源占用过高,所以采用Gitea,首先将镜像下载到harbor,地址为192.168.2.104/library/gitea@latest

二、环境准备

2.1、数据库

复用192.168.2.105上的Postgresql数据库,使用如下命令创建数据库以及用户

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#登入数据库
docker exec -it postgres_primary psql -U zabbix -d zabbix
#创建用户
CREATE USER gitea WITH ENCRYPTED PASSWORD 'Gitea_Pwd_2026';
#创建数据库
CREATE DATABASE gitea OWNER gitea;
#对用户授权
GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea;
#查看数据库
\l
#有数据库gitea即可

2.2、共享存储准备

共享存储使用NFS,服务器在192.168.2.104上,使用如下命令进行处理

1
2
3
4
5
6
7
8
9
dnf install -y nfs-utils
mkdir -p /data/nfs/gitea sudo chown -R 1000:1000 /data/nfs/gitea 
# Gitea默认用户ID是1000 
echo "/data/nfs/gitea *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports sudo exportfs -ra
#启动服务
systemctl start nfs-server
systemctl enable nfs-server
#在各个k8s主机上安装软件
dnf install -y nfs-utils

配置PV,在headlamp上进行配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
apiVersion: v1
kind: PersistentVolume
metadata:
  name: gitea-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.2.104
    path: /data/nfs/gitea

等待PV状态正常,如果pvc没有创建,状态为Available 创建PVC,在headlamp上创建该PVC

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: gitea-pvc
 namespace: default
spec:
 accessModes:
   - ReadWriteMany
 resources:
   requests:
     storage: 20Gi

等待状态正常

三、部署Gitea

3.1、部署

在headlamp上部署如下Depolyment

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitea
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gitea
  template:
    metadata:
      labels:
        app: gitea
    spec:
      containers:
      - name: gitea
        image: 192.168.2.104/library/gitea:latest 
        ports:
        - containerPort: 3000
          name: http
        - containerPort: 22
          name: ssh
        env:
        - name: GITEA__database__DB_TYPE
          value: "postgres"
        - name: GITEA__database__HOST
          value: "192.168.2.105:5432" 
        - name: GITEA__database__NAME
          value: "gitea"
        - name: GITEA__database__USER
          value: "gitea" 
        - name: GITEA__database__PASSWD
          value: "你的密码"
        volumeMounts:
        - name: gitea-data
          mountPath: /data
      volumes:
      - name: gitea-data
        persistentVolumeClaim:
          claimName: gitea-pvc

等待deployment运行状态正常

3.2、对外映射

在headlamp上部署如下Service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 1. 先给 Gitea 创建一个内部 Service 暴露端口
apiVersion: v1
kind: Service
metadata:
  name: gitea
  namespace: default
spec:
  selector:
    app: gitea  # 绑定刚才部署的 gitea pod
  ports:
  - name: http
    port: 3000
    targetPort: 3000
  - name: ssh
    port: 22
    targetPort: 22
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 创建 Ingress 路由规则
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gitea-ingress
  namespace: default   # 必须和 Service 在同一个命名空间
spec:
  ingressClassName: nginx
  rules:
  - host: gitea.xxx.com   # 你的 Gitea 访问域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: gitea   # 指向上面创建的 Service 名字
            port:
              number: 3000  # 对应 Service 的 3000 端口

查询该Ingress 路由规则绑定的地址,对headlamp不太熟悉,点击Ingress中Gitea,选择View Yaml 查询到该域名解析到的地址 将该地址和域名写入DNS服务器即可

四、配置

初次进入Gitea,需要进行初始化,根据具体情况填写即可,进入系统后即可

comments powered by Disqus