原创:佛布朗斯基 程序员技术笔记
Gitea 是一个开源社区驱动的轻量级代码托管解决方案,周末抽空在Kubernetes部署代码仓库Gitea,过程虽然有些坑,但是最后还是成功在Kubernetes上部署运行,今天将这个过程分享给大家,有需要可以参考。
设置持久卷
我们先创建一个持久卷配置,空间大小给5个G,持久卷名字为gitea-pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gitea-pvc
spec:
storageClassName: openebs-hostpath
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
部署容器
我们设置容器名为gitea-deployment,期望副本为1,同时gitea默认监听端口3000以及需要ssh端口22,我们这里容器监听3000、22端口,设置持久卷目录为/home/storageVolume/gitea。
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitea-deployment
labels:
app: gitea
spec:
replicas: 1
selector:
matchLabels:
app: gitea
template:
metadata:
labels:
app: gitea
spec:
containers:
- name: gitea
image: gitea/gitea
ports:
- containerPort: 3000
name: gitea-http
- containerPort: 22
name: gitea-ssh
volumeMounts:
- mountPath: /home/storageVolume/gitea
name: gitea-data
volumes:
- name: gitea-data
persistentVolumeClaim:
claimName: gitea-pvc
部署服务
我们部署gitea服务,设置服务名为gitea-service,端口监听方式为LoadBalancer,方便IP流量转发到服务上。
LoadBalancer 服务是暴露服务到 internet 的标准方式。在 GKE 上,这种方式会启动一个 Network Load Balancer,它将给你一个单独的 IP 地址,转发所有流量到你的服务。
kind: Service
apiVersion: v1
metadata:
name: gitea-service
annotations:
metallb.universe.tf/address-pool: default
spec:
selector:
app: gitea
type: LoadBalancer
ports:
- name: gitea-http
port: 3000
targetPort: gitea-http
- name: gitea-ssh
port: 22
targetPort: gitea-ssh
Ingress设置访问域名
为了避免使用ip+port的形式访问gitea,我们利用Ingress设置域名来访问我们的服务,为了防止在初始化安装的时候超时,我们需要设置超时限制,避免安装过程中因为超市失败。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: gitea-ingress
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "100m"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/load-balance: "ip_hash"
nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri"
spec:
rules:
- host: gitea.test.cn
http:
paths:
- path: /
backend:
serviceName: gitea-service
servicePort: 3000
整合配置
为了方便配置的管理跟部署,我们将上面全部配置整合在一起,命名一个文件为gitea-deployment.yaml,配置如下
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gitea-pvc
spec:
storageClassName: openebs-hostpath
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitea-deployment
labels:
app: gitea
spec:
replicas: 1
selector:
matchLabels:
app: gitea
template:
metadata:
labels:
app: gitea
spec:
containers:
- name: gitea
image: gitea/gitea
ports:
- containerPort: 3000
name: gitea-http
- containerPort: 22
name: gitea-ssh
volumeMounts:
- mountPath: /home/storageVolume/gitea
name: gitea-data
volumes:
- name: gitea-data
persistentVolumeClaim:
claimName: gitea-pvc
---
kind: Service
apiVersion: v1
metadata:
name: gitea-service
annotations:
metallb.universe.tf/address-pool: default
spec:
selector:
app: gitea
type: LoadBalancer
ports:
- name: gitea-http
port: 3000
targetPort: gitea-http
- name: gitea-ssh
port: 22
targetPort: gitea-ssh
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: gitea-ingress
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "100m"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/load-balance: "ip_hash"
nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri"
spec:
rules:
- host: gitea.test.cn
http:
paths:
- path: /
backend:
serviceName: gitea-service
servicePort: 3000
我们输入以下命令行来部署服务
kubectl apply -f gitea-deployment.yaml
等待部署完成后我们直接访问设置的域名,配置参数按照自己的实际情况填就可以。
这样我们就成功完成gitea部署运行。