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 配置的 NodePort
为 31001
,所以,这里我们可以通过 Kubernetes 集群的 IP+NodePort
端口对服务进行访问。例如,本人这里 Kubernetes 集群中一个节点 IP
为 192.168.2.11
,可以输入地址 192.168.2.11:31001
访问 Gitlab 主页,打开后可以看到如下:
Gitlla 提供了默认的管理员用户 root
,密码在部署 Gitlab 的 yaml 文件的环境变量中进行了定义:
- 用户名: root
- 密码: admin@mydlq
输入用户名/密码后我们就可与成功进入 Gitlab 界面。
到此 Gitlab 已经部署完毕,那么该组件如何配置调整参数使其性能更优的任务就交给大家自信摸索了~
如果本博文对你有帮助,别忘了 github 给颗星哦~
---END---
!版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。