kubernetes上部署gitlab
官网教程:helm安装gitlab
sameersbn:sameersbn/docker-gitlab
说明
gitlab部署方式有很多种,最传统的方法就是官网Linux系统的安装教程,真的是超级简单。目前发展趋势,自然是少不了docker部署和kubernetes部署。gitlab官方提供的docker和kubernetes部署教程较为繁琐,因此有大神自己就制作了gitlab的镜像和部署教程:https://github.com/sameersbn/docker-gitlab
然后gitlab的组件有:redis,postgresql,gitlab核心三大块,因此只需要将这三个应用起起来就可以运行gitlab 了
redis
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespace: gitlab
labels:
name: redis
spec:
replicas: 1
selector:
matchLabels:
name: redis
template:
metadata:
labels:
name: redis
spec:
containers:
- name: redis
image: redis:6-alpine
ports:
- name: redis
containerPort: 6379
volumeMounts:
- mountPath: /var/lib/redis
name: redis-volume
livenessProbe:
exec:
command:
- redis-cli
- ping
initialDelaySeconds: 30
timeoutSeconds: 5
readinessProbe:
exec:
command:
- redis-cli
- ping
initialDelaySeconds: 5
timeoutSeconds: 1
volumes:
- name: redis-volume
persistentVolumeClaim:
claimName: redis-volume
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-volume
namespace: gitlab
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-client
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: gitlab
labels:
name: redis
spec:
ports:
- name: redis
port: 6379
targetPort: redis
selector:
name: redis
postgresql
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgresql
namespace: gitlab
labels:
name: postgresql
spec:
selector:
matchLabels:
name: postgresql
template:
metadata:
labels:
name: postgresql
spec:
containers:
- name: postgresql
image: sameersbn/postgresql:12-20200524
imagePullPolicy: IfNotPresent
env:
- name: DB_USER
value: gitlab
- name: DB_PASS
value: aRS7EGMKKubxzgPp
- name: DB_NAME
value: gitlab_production
- name: DB_EXTENSION
value: pg_trgm,btree_gist
ports:
- name: postgres
containerPort: 5432
volumeMounts:
- mountPath: /var/lib/postgresql
name: postgresql-volume
livenessProbe:
exec:
command:
- pg_isready
- -h
- localhost
- -U
- postgres
initialDelaySeconds: 30
timeoutSeconds: 5
readinessProbe:
exec:
command:
- pg_isready
- -h
- localhost
- -U
- postgres
initialDelaySeconds: 5
timeoutSeconds: 1
volumes:
- name: postgresql-volume
persistentVolumeClaim:
claimName: postgresql-volume
---
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgresql-volume
namespace: gitlab
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-client
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: postgresql
namespace: gitlab
labels:
name: postgresql
spec:
ports:
- name: postgres
port: 5432
targetPort: postgres
selector:
name: postgresql
gitlab
[root@master cert]# kubectl create secret tls gitlab-cert --namespace gitlab --cert=./tls.crt --key=./tls.key
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitlab
namespace: gitlab
labels:
name: gitlab
spec:
selector:
matchLabels:
name: gitlab
template:
metadata:
name: gitlab
labels:
name: gitlab
spec:
containers:
- name: gitlab
image: sameersbn/gitlab:14.1.3
imagePullPolicy: IfNotPresent
env:
- name: TZ
value: Asia/Shanghai
- name: GITLAB_TIMEZONE
value: Beijing
- name: GITLAB_SECRETS_DB_KEY_BASE
value: AoAwTo80cxCpeCGyHrFhBMUckMt0
- name: GITLAB_SECRETS_SECRET_KEY_BASE
value: 2y3e4ffJ222QOMMluIll9QpOvH9f
- name: GITLAB_SECRETS_OTP_KEY_BASE
value: 6N5NHzM71ohXqnRx5I7slKcptNCP
- name: GITLAB_ROOT_PASSWORD
value: mnKOOsoz
- name: GITLAB_ROOT_EMAIL
value: [email protected]
- name: GITLAB_HOST
value: gitlab.xxxxxx.cn
- name: GITLAB_PORT
value: "80"
- name: GITLAB_SSH_PORT
value: "22"
- name: GITLAB_NOTIFY_ON_BROKEN_BUILDS
value: "true"
- name: GITLAB_NOTIFY_PUSHER
value: "false"
- name: GITLAB_BACKUP_SCHEDULE
value: daily
- name: GITLAB_BACKUP_TIME
value: 01:00
- name: DB_TYPE
value: postgres
- name: DB_HOST
value: postgresql
- name: DB_PORT
value: "5432"
- name: DB_USER
value: gitlab
- name: DB_PASS
value: "aRS7EGMKKubxzgPp"
- name: DB_NAME
value: gitlab_production
- name: REDIS_HOST
value: redis
- name: REDIS_PORT
value: "6379"
ports:
- name: http
containerPort: 80
- name: ssh
containerPort: 22
volumeMounts:
- mountPath: /home/git/data
name: gitlab-volume
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 180
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
timeoutSeconds: 1
volumes:
- name: gitlab-volume
persistentVolumeClaim:
claimName: gitlab-volume
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gitlab-volume
namespace: gitlab
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-client
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
name: gitlab
namespace: gitlab
labels:
name: gitlab
spec:
ports:
- name: http
port: 80
targetPort: http
- name: ssh
port: 22
targetPort: ssh
selector:
name: gitlab
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: gitlab
namespace: gitlab
spec:
ingressClassName: nginx
tls:
- hosts:
- gitlab.xxxxxx.cn
secretName: gitlab-cert
rules:
- host: gitlab.xxxxxx.cn
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: gitlab
port:
number: 80
部署gitlab的时候启动报错
psql:/home/git/gitlab/db/structure.sql:9: ERROR: permission denied to create extension "btree_gist"
HINT: Must be superuser to create this extension.
解决办法:在部署postgresql的时候直接安装这个插件
https://github.com/sameersbn/docker-gitlab/issues/2214
DB_EXTENSION=pg_trgm,btree_gist
创建好ingress后发现分配不到ip,无法访问
原因:k8s1.18对ingress做了一些变更,多了一个ingressclass的字段,因此在创建ingress的时候需要使用ingressClassName来指定使用哪个ingress,具体可以参考:https://kubernetes.io/zh/docs/concepts/services-networking/ingress/#ingress-class
然后就可以访问了,用户名admin,密码上面上面设置的密码
然后可以在设置-->通用--> 可见性与访问控制-->自定义git克隆url,然后重启gitlab就可以愉快地使用了