这篇笔记是转载的我们组长写的 K8s 相关文章、仅用于个人学习。
# 新建命名空间
在你的集群下面新建一个命名空间: gitlab,下面所有的操作都在这个命名空间下
在gitlab
命名空间下,使用镜像 gitlab/gitlab-runner:latest 启动一个 pod, Deployment
的名字可以叫 gitlab-runner,副本数填 1 个就可以了
# 注册 runner
启动 pod 之后,进入 pod 对应的终端,我们需要在里面完成 runner register 操作.
进入 pod 终端之后,输入命令:
gitlab-runner register
然后根据提示,一步一步输入内容,其中让你填写 gitlab-ci token 的时候,需要到 https://gitlab.timetask.cn/admin/runners (opens new window) 这个页面去找,而不是在你的 gitlab 仓库里找。最后一步 executor 的类型填 kubernetes 就可以了。
完成之后,到 https://gitlab.timetask.cn/admin/runners (opens new window) 就能看到你刚刚注册的 runner 了
# 创建 service account
gitlab-runner 这个 pod,需要拥有开启新 pod,结束 pod 等更高权限的操作,所以我们必须创建一个 k8s 的 service account,给这个账号分配更高的权限,让 gitlab-runner 能利用这个账号完成它的操作.
进入集群管理器,随意在一个地方新建一个文件, service-account.yml
apiVersion: v1
kind: ServiceAccount
metadata:
name: gitlab-runner
namespace: gitlab
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: gitlab-runner
namespace: gitlab
rules:
- apiGroups: [""]
resources: ["*"]
verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: gitlab-runner
namespace: gitlab
subjects:
- kind: ServiceAccount
name: gitlab-runner
namespace: gitlab
roleRef:
kind: Role
name: gitlab-runner
apiGroup: rbac.authorization.k8s.io
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
然后使用命令行: kubectl apply -f service-account.yml
让配置生效
这个配置就是在 gitlab 命名空间下,新建一个名为 gitlab-runner
的 ServiceAccount,和一个名为 gitlab-runner
的角色,然后给这个角色分配所有权限,最后把这个角色和 ServiceAccount 绑定起来,让这个 ServiceAccount 拥有 Role 所对应的权限
# 新建配置项,重启 gitlab-runner pod
在注册完 runner 和生成了 service account 之后,需要给刚刚新建的 gitlab-runner Deployment 配置一些额外参数,让他能顺利工作
配置项名称: gitlab-runner-config
添加一个子配置项:config.toml
子配置项的内容是:
concurrent = 4
[[runners]]
name = "暗访者三号"
url = "https://gitlab.timetask.cn/"
token = "xxxxxxx"
executor = "kubernetes"
builds_dir = "/home/runner-build"
cache_dir = "/home/runner-cache"
[runners.kubernetes]
namespace = "gitlab"
privileged = true
image = "docker:stable"
service_account = "gitlab-runner"
2
3
4
5
6
7
8
9
10
11
12
13
配置项解释:
token 是你在最开始注册 runner 成功之后,gitlab 给你生成的 token,而不是你最开始注册 runner 的时候填的那个 token,注意不要搞错了
builds_dir 和 cache_dir 是用来缓存构建相关的文件的,这个地方,如果不挂载 NAS 之类的网盘,那么每次构建都会完全重 0 开始克隆代码,没有任何缓存可用,所以后面可以自己新建一个 NAS,然后把这个 NAS 给挂载到这两个文件夹下
然后重新修改 gitlab-runner 这个 Deployment 的配置文件:
把刚刚的配置项挂载到 /etc/gitlab-runner
文件夹下
然后把 spec.template.spec.serviceAccountName
的值设置为 gitlab-runner
(这一步别忽略了)
然后重启 Deployment
一个完整的 gitlab-runner Deployment 的配置项类似下面:
apiVersion: apps/v1beta2
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "2"
creationTimestamp: "2019-07-11T03:51:41Z"
generation: 2
labels:
app: gitlab-runner
name: gitlab-runner
namespace: gitlab
resourceVersion: "32793356"
selfLink: /apis/apps/v1beta2/namespaces/gitlab/deployments/gitlab-runner
uid: 3110b6d9-a38f-11e9-a804-00163e13ab0b
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: gitlab-runner
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: gitlab-runner
spec:
containers:
- image: "gitlab/gitlab-runner:latest"
imagePullPolicy: Always
name: gitlab-runner
resources:
requests:
cpu: 250m
memory: 512Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /etc/gitlab-runner
name: volume-1562819980384
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccountName: gitlab-runner
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 420
name: gitlab-runner-config
name: volume-1562819980384
status:
availableReplicas: 1
conditions:
- lastTransitionTime: "2019-07-11T03:52:10Z"
lastUpdateTime: "2019-07-11T03:52:10Z"
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
- lastTransitionTime: "2019-07-11T03:51:41Z"
lastUpdateTime: "2019-07-11T04:39:58Z"
message: ReplicaSet "gitlab-runner-6746755594" has successfully progressed.
reason: NewReplicaSetAvailable
status: "True"
type: Progressing
observedGeneration: 2
readyReplicas: 1
replicas: 1
updatedReplicas: 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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
至此,整个 runner 就在 k8s 里建好了
# 在 gitlab 里试一下
新建一个仓库,然后在 runner 管理中心,把这个仓库加到刚刚新建的 runner 里,这样这个仓库就能使用这个 runner 进行构建了
clone 这个仓库到本地,然后添加 .gitlab-ci.yml
文件,内容为:
image: node:10.15.0
before_script:
- echo hello_world
stages:
- test
job test:
stage: test
script:
- echo test
2
3
4
5
6
7
8
9
10
11
12
提交之后,在这个仓库的 ci 里就能开始构建了