1. 部署GitLab
[root@master ~]# tar -zxvf Gitlab-CI.tar.gz
[root@master ~]# ctr -n k8s.io image import gitlab-ci/images/images.tar
[root@master ~]# docker load < gitlab-ci/images/images.tar
(2)部署GitLab服务
新建命名空间gitlab-ci:
[root@master ~]# kubectl create ns gitlab-ci
namespace/gitlab-ci created
在gitlab-ci命名空间下部署GitLab,将80端口以NodePort方式对外暴露为30880,YAML资源文件如下:
[root@master ~]# cd gitlab-ci
[root@master gitlab-ci]# vi gitlab-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitlab
namespace: gitlab-ci
labels:
name: gitlab
spec:
selector:
matchLabels:
name: gitlab
template:
metadata:
name: gitlab
labels:
name: gitlab
spec:
containers:
– name: gitlab
image: gitlab/gitlab-ce:latest
imagePullPolicy: IfNotPresent
env:
– name: GITLAB_ROOT_PASSWORD
value: Abc@1234
– name: GITLAB_ROOT_EMAIL
value: 123456@qq.com
ports:
– name: http
containerPort: 80
volumeMounts:
– name: gitlab-config
mountPath: /etc/gitlab
– name: gitlab-logs
mountPath: /var/log/gitlab
– name: gitlab-data
mountPath: /var/opt/gitlab
volumes:
– name: gitlab-config
hostPath:
path: /home/gitlab/conf
– name: gitlab-logs
hostPath:
path: /home/gitlab/logs
– name: gitlab-data
hostPath:
path: /home/gitlab/data
创建service服务释放端口
[root@master gitlab-ci]# vi gitlab-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: gitlab
namespace: gitlab-ci
labels:
name: gitlab
spec:
type: NodePort
ports:
– name: http
port: 80
targetPort: http
nodePort: 30880
selector:
name: gitlab
创建资源:
[root@master gitlab-ci]# kubectl apply -f gitlab-deploy.yaml
deployment.apps/gitlab created
[root@master gitlab-ci]# kubectl apply -f gitlab-svc.yaml
service/gitlab created
查看Pod:
[root@master gitlab-ci]# kubectl -n gitlab-ci get pods
NAME READY STATUS RESTARTS AGE
gitlab-7b54df755-6ljtp 1/1 Running 0 45s
(3)自定义hosts
查看GitLab Pod的IP地址:
[root@master gitlab-ci]# kubectl -n gitlab-ci get pods -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
gitlab-7b54df755-6ljtp 1/1 Running 0 50s 10.244.1.43 k8s-worker-node1 <none> <none>
在集群中自定义hosts添加gitlab Pod的解析:
[root@master gitlab-ci]# kubectl edit configmap coredns -n kube-system
……..
apiVersion: v1
data:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
## 添加以下字段
hosts {
10.244.1.43 gitlab-7b54df755-6ljtp
fallthrough
}
prometheus :9153
##删除以下三行字段
forward . /etc/resolv.conf {
max_concurrent 1000
}
cache 30
loop
reload
loadbalance
}
……..
[root@master gitlab-ci]# kubectl -n kube-system rollout restart deploy coredns
deployment.apps/coredns restarted
进入gitlab pod中
[root@master gitlab-ci]# kubectl exec -ti -n gitlab-ci gitlab-7b54df755-6ljtp bash
root@gitlab-7b54df755-6ljtp:/# vi /etc/gitlab/gitlab.rb
在首行添加(ip为pod IP地址)
external_url ‘http://10.244.1.43:80’
root@gitlab-7b54df755-6ljtp:/# reboot
root@gitlab-7b54df755-6ljtp:/# exit
(4)访问GitLab
查看Service:
[root@master gitlab-ci]# kubectl -n gitlab-ci get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gitlab NodePort 10.96.108.3 <none> 80:30880/TCP 3m33s
通过http://10.24.2.14:30880访问GitLab,用户名123456@qq.com,密码Abc@1234,如图2所示:
点击“Create a project”按钮
http://tuchuang.hzhazha.top/image/2.png
点击“Create blank project”创建项目demo-2048,可见等级选择“Public”,如图所示
http://tuchuang.hzhazha.top/image/1.png
点击“Create project”,进入项目,如图3所示
http://tuchuang.hzhazha.top/image/4.png
将源代码推送到项目中:
[root@master gitlab-ci]# cd /root/gitlab-ci/demo-2048
[root@master demo-2048]# git config –global user.name “administrator”
[root@master demo-2048]# git config –global user.email “admin@example.com”
[root@master demo-2048]# git remote remove origin
[root@master demo-2048]# git remote add origin http://10.24.2.14:30880/root/demo-2048.git
[root@master demo-2048]# git add .
[root@master demo-2048]# git commit -m “initial commit”
[master (root-commit) 105c032] initial commit
[root@master demo-2048]# git push -u origin drone
Username for ‘http://10.24.2.14:30880’: root
Password for ‘http://root@10.24.2.14:30880’: #输入密码Abc@1234
Counting objects: 189, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (137/137), done.
Writing objects: 100% (189/189), 43.35 KiB | 0 bytes/s, done.
Total 189 (delta 40), reused 0 (delta 0)
remote: Resolving deltas: 100% (40/40), done.
To http://10.24.2.14:30880/root/cloud-manager.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
将源代码推送到项目后,如图五所示
部署GitLab CI Runner
操作过程
我们在gitlab的web界面里,点击”Settings”→”CI/CD”,找到Runners,点击右边”Expend”展开,查看注册的Token并复制,如图六所示
http://tuchuang.hzhazha.top/image/6.png#
回到gitlab-ci目录
[root@k8s-master-node1 demo-2048]# cd ../
#解压gitlab-runner压缩包
[root@k8s-master-node1 gitlab-ci]# tar -zxf gitlab-runner-0.43.0.tgz
[root@k8s-master-node1 gitlab-ci]# ls gitlab-runner/
CHANGELOG.md Chart.yaml CONTRIBUTING.md LICENSE Makefile NOTICE EADME.md templates values.yaml
#修改values.yaml文件
[root@master gitlab-ci]# vi gitlab-runner/values.yaml
#修改的配置项:
#添加gitlab的地址和注册的token
# gitlabUrl: http://gitlab.your-domain.com/ 修改为:
gitlabUrl: “http://192.168.200.15:30880/”
# runnerRegistrationToken: “” 修改为:
runnerRegistrationToken: “GR1348941X_zjBBFn4JzPtDPwdR-8”
# unregisterRunners: true 修改为:
unregisterRunners: true
#启用RBAC,这样才有权限
rbac:
create: false #修改为:
create: true
#启用metrics,监控GitLab Runner的性能
metrics:
enabled: false #修改为
enabled: true
#根据题目要求,设置缓存目录
runners: #添加配置:
cachePath: “/home/gitlab-runner/ci-build-cache”
#这里使用helm部署,需要安装docker-compose,在我们先前搭建容器云平台时,添加Harbor仓库的步骤中就有安装了
[root@master gitlab-ci]# helm install gitlab-runner gitlab-runner/ -n gitlab-ci
#检查是否部署成功
[root@k8s-master-node1 gitlab-cicd]# helm ls -A
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
gitlab-runner gitlab-ci 2 2024-06-25 16:32:45.061864768 +0800 CST deployed gitlab-runner-0.1.37
#查看是否运行
[root@k8s-master-node1 gitlab-cicd]# kubectl get -n gitlab-ci all
NAME READY STATUS RESTARTS AGE
pod/gitlab-59dc9fc7b4-sl4vt 1/1 Running 1 (55m ago) 77m
pod/gitlab-runner-gitlab-runner-6f846767bf-69rxc 1/1 Running 0 3m11s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/gitlab NodePort 10.96.125.173 <none> 80:30880/TCP 76m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/gitlab 1/1 1 1 77m
deployment.apps/gitlab-runner-gitlab-runner 1/1 1 1 8m49s
NAME DESIRED CURRENT READY AGE
replicaset.apps/gitlab-59dc9fc7b4 1 1 1 77m
replicaset.apps/gitlab-runner-gitlab-runner-6f846767bf 1 1 1 3m11s
3、集群部署GitLab Agent
http://tuchuang.hzhazha.top/image/8.png
输入题目要求的名称kubernetes-agent,点击“Create agent”创建代理,然后点击”Register”注册
http://tuchuang.hzhazha.top/image/9.png
接下来跳出的界面里,会提示我们使用helm安装的示例命令
http://tuchuang.hzhazha.top/image/10.png
[root@k8s-master-node1 gitlab-ci]# tar -zxf gitlab-agent-1.1.0.tgz
[root@k8s-master-node1 gitlab-ci]# ls gitlab-agent
Chart.yaml CONTRIBUTING.md LICENSE README.md templates values.yaml
#题目要求部署在gitlab-ci命名空间,我们使用-n指定。
[root@k8s-master-node1 gitlab-ci]# helm install kubernetes-agent gitlab-agent/ \
-n gitlab-ci –set image.tag=v16.2.0 \
–set config.token=JSwAyX3yu1SJQyxwHej9-ysWdX6nV12RDAv2thDwyGQVm2YtEw \
> –set config.kasAddress=ws://192.168.200.15:30880/-/kubernetes-agent/
#查看一下是否正在运行
[root@k8s-master-node1 gitlab-ci]# kubectl get pods -n gitlab-ci -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
gitlab-5664855986-5wdv2 1/1 Running 1 (49m ago) 54m 10.244.0.12 k8s-master-node1 <none> <none>
gitlab-runner-gitlab-runner-58c889dc5c-rf4zg 1/1 Running 0 14m 10.244.0.30 k8s-master-node1 <none> <none>
kubernetes-agent-gitlab-agent-877f6456f-t6949 1/1 Running 0 64s 10.244.0.35 k8s-master-node1 <none> <none>
回到Web界面,也可以看到我们创建的代理的连接状态是已连接
http://tuchuang.hzhazha.top/image/11.png