Kubernetes 部署代码仓库 Gitlab

Kubernetes 部署代码仓库 Gitlab

文章目录

  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。


系统环境:

  • Gitlab 版本:13.6.2
  • 系统版本:CentOS 7.9
  • Docker 版本:19.03.13
  • Kubernetes 版本:1.20.1

参考地址:

如果本博文对你有帮助,别忘了 github 给颗星哦~

一、部署组件安排

这里一共需要部署三个组件,提前对所需部署的组件进行部署安排,如下:

组件名称 存储位置 存储分配 资源分配
Redis /nfs/git/redis 5GB 1C & 2G
Postgresql /nfs/git/postgresql 20GB 2C & 2G
Gitlab /nfs/git/gitlab 100GB 4C & 8G

二、部署 Redis

1、创建存储资源

创建 PV、PVC 资源 yaml 文件 redis-storage.yaml

 1## PV
 2apiVersion: v1
 3kind: PersistentVolume
 4metadata:
 5  name: redis
 6  labels:
 7    app: redis
 8spec:
 9  capacity:          
10    storage: 5Gi
11  accessModes:       
12  - ReadWriteOnce
13  persistentVolumeReclaimPolicy: Retain
14  mountOptions:
15  - hard
16  - nfsvers=4.1
17  nfs:               
18    server: 192.168.2.11
19    path: /nfs/gitlab/redis      
20---
21## PVC
22kind: PersistentVolumeClaim
23apiVersion: v1
24metadata:
25  name: redis
26spec:
27  resources:
28    requests:
29      storage: 5Gi      
30  accessModes:
31  - ReadWriteOnce
32  selector:
33    matchLabels:
34      app: redis

执行创建 PV、PVC 命令

  • -n:指定部署应用的 Namespace 命名空间。
1$ kubectl create -f redis-storage.yaml -n devops

2、部署 Redis

创建 Redis 部署文件 redis-deploy.yaml

 1## Service
 2kind: Service
 3apiVersion: v1
 4metadata:
 5  name: gitlab-redis
 6  labels:
 7    name: gitlab-redis
 8spec:
 9  type: ClusterIP
10  ports:
11    - name: redis
12      protocol: TCP
13      port: 6379
14      targetPort: redis
15  selector:
16    name: gitlab-redis
17---
18## Deployment
19kind: Deployment
20apiVersion: apps/v1
21metadata:
22  name: gitlab-redis
23  labels:
24    name: gitlab-redis
25spec:
26  replicas: 1
27  selector:
28    matchLabels:
29      name: gitlab-redis
30  template:
31    metadata:
32      name: gitlab-redis
33      labels:
34        name: gitlab-redis
35    spec:
36      containers:
37      - name: gitlab-redis
38        image: 'sameersbn/redis:4.0.9-3'
39        ports:
40        - name: redis
41          containerPort: 6379
42          protocol: TCP
43        resources:
44          limits:
45            cpu: 1000m
46            memory: 2Gi
47          requests:
48            cpu: 1000m
49            memory: 2Gi
50        volumeMounts:
51          - name: data
52            mountPath: /var/lib/redis
53        livenessProbe:
54          exec:
55            command:
56              - redis-cli
57              - ping
58          initialDelaySeconds: 5
59          timeoutSeconds: 5
60          periodSeconds: 10
61          successThreshold: 1
62          failureThreshold: 3
63        readinessProbe:
64          exec:
65            command:
66              - redis-cli
67              - ping
68          initialDelaySeconds: 5
69          timeoutSeconds: 5
70          periodSeconds: 10
71          successThreshold: 1
72          failureThreshold: 3
73      volumes:
74      - name: data
75        persistentVolumeClaim:
76          claimName: redis

执行命令部署 Redis 组件

1$ kubectl create -f redis-deploy.yaml -n devops

三、部署 PostgraSql

1、创建存储资源

创建 PV、PVC 资源 yaml 文件 postgresql-storage.yaml

 1## PV
 2apiVersion: v1
 3kind: PersistentVolume
 4metadata:
 5  name: postgresql
 6  labels:
 7    app: postgresql
 8spec:
 9  capacity:          
10    storage: 20Gi
11  accessModes:       
12  - ReadWriteOnce
13  persistentVolumeReclaimPolicy: Retain
14  mountOptions:
15  - hard
16  - nfsvers=4.1    
17  nfs:
18    server: 192.168.2.11
19    path: /nfs/gitlab/postgresql
20---
21## PVC
22kind: PersistentVolumeClaim
23apiVersion: v1
24metadata:
25  name: postgresql
26spec:
27  resources:
28    requests:
29      storage: 20Gi 
30  accessModes:
31  - ReadWriteOnce
32  selector:
33    matchLabels:
34      app: postgresql

执行创建 PV、PVC 命令

1$ kubectl create -f postgresql-storage.yaml -n devops

2、创建 Postgresql

创建部署文件 postgresql-deploy.yaml

 1## Service
 2kind: Service
 3apiVersion: v1
 4metadata:
 5  name: gitlab-postgresql
 6  labels:
 7    name: gitlab-postgresql
 8spec:
 9  ports:
10    - name: postgres
11      protocol: TCP
12      port: 5432
13      targetPort: postgres
14  selector:
15    name: postgresql
16  type: ClusterIP
17---
18## Deployment
19kind: Deployment
20apiVersion: apps/v1
21metadata:
22  name: postgresql
23  labels:
24    name: postgresql
25spec:
26  replicas: 1
27  selector:
28    matchLabels:
29      name: postgresql
30  template:
31    metadata:
32      name: postgresql
33      labels:
34        name: postgresql
35    spec:
36      containers:
37      - name: postgresql
38        image: sameersbn/postgresql:12-20200524
39        ports:
40        - name: postgres
41          containerPort: 5432
42        env:
43        - name: DB_USER
44          value: gitlab
45        - name: DB_PASS
46          value: admin@mydlq
47        - name: DB_NAME
48          value: gitlabhq_production
49        - name: DB_EXTENSION
50          value: 'pg_trgm,btree_gist'
51        resources: 
52          requests:
53            cpu: 2
54            memory: 2Gi
55          limits:
56            cpu: 2
57            memory: 2Gi
58        livenessProbe:
59          exec:
60            command: ["pg_isready","-h","localhost","-U","postgres"]
61          initialDelaySeconds: 30
62          timeoutSeconds: 5
63          periodSeconds: 10
64          successThreshold: 1
65          failureThreshold: 3
66        readinessProbe:
67          exec:
68            command: ["pg_isready","-h","localhost","-U","postgres"]
69          initialDelaySeconds: 5
70          timeoutSeconds: 1
71          periodSeconds: 10
72          successThreshold: 1
73          failureThreshold: 3
74        volumeMounts:
75        - name: data
76          mountPath: /var/lib/postgresql
77      volumes:
78      - name: data
79        persistentVolumeClaim:
80          claimName: postgresql

变量说明:

参数名称 默认值 描述
DB_USER - 创建一个数据库用户
DB_PASS - 指定创建的用户的密码
DB_NAME - 创建一个数据库并指定库名
DB_EXTENSION - 指定安装的扩展包

详情可查看该镜像的 Github 文档:https://github.com/sameersbn/docker-postgresql

执行命令部署 Postgresql 数据库

1$ kubectl create -f postgresql-deploy.yaml -n devops

四、部署 Gitlab

1、创建存储资源

创建部署文件 gitlab-storage.yaml

 1## PV
 2apiVersion: v1
 3kind: PersistentVolume
 4metadata:
 5  name: gitlab
 6  labels:
 7    app: gitlab
 8spec:
 9  capacity:          
10    storage: 100Gi
11  accessModes:       
12  - ReadWriteOnce
13  persistentVolumeReclaimPolicy: Retain
14  mountOptions:
15  - hard
16  - nfsvers=4.1    
17  nfs:
18    server: 192.168.2.11
19    path: /nfs/gitlab/git
20---
21## PVC
22kind: PersistentVolumeClaim
23apiVersion: v1
24metadata:
25  name: gitlab
26spec:
27  resources:
28    requests:
29      storage: 100Gi
30  accessModes:
31  - ReadWriteOnce
32  selector:
33    matchLabels:
34      app: gitlab

执行创建 PV、PVC 命令

1$ kubectl create -f redis-storage.yaml -n devops

2、创建 Gitlab 部署文件

创建部署文件 gitlab-deploy.yaml

  1## Service
  2kind: Service
  3apiVersion: v1
  4metadata:
  5  name: gitlab
  6  labels:
  7    name: gitlab
  8spec:
  9  ports:
 10    - name: http
 11      protocol: TCP
 12      port: 80
 13      targetPort: http
 14      nodePort: 31001
 15    - name: ssh
 16      protocol: TCP
 17      port: 22
 18      targetPort: ssh
 19      nodePort: 31002
 20  selector:
 21    name: gitlab
 22  type: NodePort
 23---
 24## Deployment
 25kind: Deployment
 26apiVersion: apps/v1
 27metadata:
 28  name: gitlab
 29  labels:
 30    name: gitlab
 31spec:
 32  replicas: 1
 33  selector:
 34    matchLabels:
 35      name: gitlab
 36  template:
 37    metadata:
 38      name: gitlab
 39      labels:
 40        name: gitlab
 41    spec:
 42      containers:
 43      - name: gitlab
 44        image: 'sameersbn/gitlab:13.6.2'
 45        ports:
 46        - name: ssh
 47          containerPort: 22
 48        - name: http
 49          containerPort: 80
 50        - name: https
 51          containerPort: 443
 52        env:
 53        - name: TZ
 54          value: Asia/Shanghai
 55        - name: GITLAB_TIMEZONE
 56          value: Beijing
 57        - name: GITLAB_SECRETS_DB_KEY_BASE
 58          value: long-and-random-alpha-numeric-string
 59        - name: GITLAB_SECRETS_SECRET_KEY_BASE
 60          value: long-and-random-alpha-numeric-string
 61        - name: GITLAB_SECRETS_OTP_KEY_BASE
 62          value: long-and-random-alpha-numeric-string
 63        - name: GITLAB_ROOT_PASSWORD
 64          value: admin@mydlq
 65        - name: GITLAB_ROOT_EMAIL 
 66          value: mynamedlq@163.com     
 67        - name: GITLAB_HOST           
 68          value: '192.168.2.11'
 69        - name: GITLAB_PORT        
 70          value: '31001' 
 71        - name: GITLAB_PORT        
 72          value: '80'                   
 73        - name: GITLAB_SSH_PORT   
 74          value: '22'
 75        - name: GITLAB_NOTIFY_ON_BROKEN_BUILDS
 76          value: 'true'
 77        - name: GITLAB_NOTIFY_PUSHER
 78          value: 'false'
 79        - name: DB_TYPE             
 80          value: postgres
 81        - name: DB_HOST         
 82          value: gitlab-postgresql           
 83        - name: DB_PORT          
 84          value: '5432'
 85        - name: DB_USER        
 86          value: gitlab
 87        - name: DB_PASS         
 88          value: admin@mydlq
 89        - name: DB_NAME          
 90          value: gitlabhq_production
 91        - name: REDIS_HOST
 92          value: gitlab-redis              
 93        - name: REDIS_PORT      
 94          value: '6379'
 95        resources: 
 96          requests:
 97            cpu: 4
 98            memory: 8Gi
 99          limits:
100            cpu: 4
101            memory: 8Gi
102        livenessProbe:
103          httpGet:
104            path: /
105            port: 80
106            scheme: HTTP
107          initialDelaySeconds: 300
108          timeoutSeconds: 5
109          periodSeconds: 10
110          successThreshold: 1
111          failureThreshold: 3
112        readinessProbe:
113          httpGet:
114            path: /
115            port: 80
116            scheme: HTTP
117          initialDelaySeconds: 5
118          timeoutSeconds: 30
119          periodSeconds: 10
120          successThreshold: 1
121          failureThreshold: 3
122        volumeMounts:
123        - name: data
124          mountPath: /home/git/data
125        - name: localtime
126          mountPath: /etc/localtime
127      volumes:
128      - name: data
129        persistentVolumeClaim:
130          claimName: gitlab
131      - name: localtime
132        hostPath:
133          path: /etc/localtime

参数说明:

参数名称 默认值 描述
GITLAB_TIMEZONE UTC 指定时区
GITLAB_SECRETS_DB_KEY_BASE - 用于加密数据库中的CI机密变量以及导入凭据。如果丢失或旋转了此机密,则将无法使用现有的CI机密。
GITLAB_SECRETS_SECRET_KEY_BASE - 用于密码重置链接和其他“标准”身份验证功能。如果丢失或旋转了此机密,电子邮件中的密码重置令牌将重置。
GITLAB_SECRETS_OTP_KEY_BASE - 用于加密数据库中的2FA机密。如果您丢失或旋转了此机密,则您的所有用户都将无法使用 2FA 登录。
GITLAB_ROOT_PASSWORD 5iveL!fe 指定 root 用户在首次运行时的密码。(注意:GitLab 要求长度至少为8个字符)。
GITLAB_ROOT_EMAIL admin@example.com!fe 指定 root 用户在首次运行时的电子邮件。
GITLAB_HOST localhost 指定 GitLab 服务器的主机名,默认为 localhost,修改此参数可用配置 Gitlab 库中的克隆地址。
GITLAB_PORT 80 指定 GitLab 服务器的端口号,修改此参数可用配置 Gitlab 库中的克隆地址的端口号。
GITLAB_SSH_PORT $GITLAB_SSH_LISTEN_PORT 指定 ssh 端口号。
GITLAB_NOTIFY_ON_BROKEN_BUILDS true 启用或禁用通知的电子邮件。
GITLAB_NOTIFY_PUSHER true 将推送程序添加到构建通知电子邮件的收件人列表中。
GITLAB_NOTIFY_PUSHER false 将推送程序添加到构建通知电子邮件的收件人列表中。
DB_TYPE postgres 指定数据库类型。
DB_HOST localhost 指定数据库主机地址(k8s service地址)。
DB_PORT 5432 指定数据库服务器端口。
DB_USER root 指定数据库用户名。
DB_PASS - 指定数据库密码。
DB_NAME gitlabhq_production 指定数据库名。
REDIS_HOST localhost 指定 Redis 的主机地址。
REDIS_PORT 6379 指定 Redis 端口。

详情可查看该镜像的 Github 文档:https://github.com/sameersbn/docker-gitlab

执行命令部署 Gitlab 组件

1$ kubectl create -f gitlab-deploy.yaml -n devops

五、访问 Gitlab

上面已经成功配置了 Gitlab,其中 Servcie 配置的 NodePort31001,所以,这里我们可以通过 Kubernetes 集群的 IP+NodePort 端口对服务进行访问。例如,本人这里 Kubernetes 集群中一个节点 IP192.168.2.11,可以输入地址 192.168.2.11:31001 访问 Gitlab 主页,打开后可以看到如下:

Gitlla 提供了默认的管理员用户 root,密码在部署 Gitlab 的 yaml 文件的环境变量中进行了定义:

  • 用户名: root
  • 密码: admin@mydlq

输入用户名/密码后我们就可与成功进入 Gitlab 界面。

到此 Gitlab 已经部署完毕,那么该组件如何配置调整参数使其性能更优的任务就交给大家自信摸索了~

如果本博文对你有帮助,别忘了 github 给颗星哦~

---END---


  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。