使用 Gogs 服务实现代码仓库管理

互联网常用的 git 代码仓库管理软件有 gitlab, gogs, gitea(gogs 的克隆版) 等,本例为了简单点使用 gogs 作为 git 仓库管理工作部署在 kubernetes 集群中

提示: gitea 部署过和 gogs 基本一致

准备 gogs 资源部署清单,由于 git 代码仓库需要使用持久化存储,因此我们需要为 gogs 创建一个 pvc, gitops 资源统一放在 devops 名称空间下。

1
kubectl create namespace devops

pvc.yaml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: gogs-data
  namespace: devops
spec:
  storageClassName: managed-nfs-storage
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 10Gi

deployment.yaml

 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gogs
  namespace: devops
spec:
  selector:
    matchLabels:
      app: gogs
  template:
    metadata:
      labels:
        app: gogs
    spec:
      terminationGracePeriodSeconds: 10
     # nodeSelector:
     #   workrole: cicd
      securityContext:
        runAsUser: 0
      containers:
      - name: gogs
        image: gogs/gogs:0.12.3
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3000
          name: web
          protocol: TCP
        - containerPort: 22
          name: ssh
          protocol: TCP
        volumeMounts:
        - name: data
          mountPath: /data
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: gogs-data
---

apiVersion: v1
kind: Service
metadata:
  labels:
    app: gogs
  name: gogs
  namespace: devops
spec:
  ports:
  - name: "web"
    port: 3000
    protocol: TCP
    targetPort: 3000
  - name: "ssh"
    port: 22
    protocol: TCP
    targetPort: 22
  selector:
    app: gogs
  type: ClusterIP

ingress-route.yaml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: gogs
  namespace: devops
spec:
  entryPoints:
    - web
  routes:
  - match: Host(`git.host.com`)
    kind: Rule
    services:
    - name: gogs
      port: 3000

应用资源清单

1
2
3
kubectl apply -f pvc.yaml
kubectl apply -f deployment.yaml
kubectl apply -f ingress-route.yaml

浏览器打开 http://git.host.com 进入 gogs 配置页面

/images/gogs-config1.png

/images/gogs-config2.png

点击 “立即安装” ,安装完成后,进入管理界面

/images/gogs-login.png

在集群内可以使用 gogs 的集群内部名称来进行访问: http://gogs.devops.svc.cluster.local:3000

在集群外直接使用域名访问即可

如需要使用 ssh 连接 git 仓库需要配置 traefikingressroutetcp 规则