kubernetes-CI/CD 小鱼儿 2023-06-18 11:52 4阅读 0赞 # 目录 # \[TOC\] -------------------- # 1.安装gitlib # 运行: sudo docker run --detach \ --hostname gitlab.glj-site.com \ --publish 4443:443 --publish 8880:80 --publish 23:22 \ --name gitlab \ --restart always \ --volume /srv/gitlab/config:/etc/gitlab \ --volume /srv/gitlab/logs:/var/log/gitlab \ --volume /srv/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest **注意:**如果这里修改了80端口可能出现如下错误: ![fed276a8-6726-478c-8527-c8f24d3eb88d.png][] 原因就是运行`git remote add origin http://45.77.**.**/root/webmaven.git`是默认是80端口,由于你修改了80端口,所以就会报错,如果修改为88端口,则应该运行:`git remote add origin http://45.77.**.**:88/root/webmaven.git`来指明端口。貌似修改了22端口会影响https。 # 2.安装Gitlab-Runner # ## 基于docker运行Gitlab-Runner ## 运行: sudo docker run -d --name gitlab-runner --restart always \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest ### Gitlab-Runner注册 ### 注册时需要提供一个Url和token,获取地址如下图: ![90b1b065-9184-4b96-ba1b-99dc11356851.png][] 运行进行`sudo docker exec -it gitlab-runner gitlab-ci-multi-runner register`容器 具体注册如下图: ![5d08246a-84eb-4d32-8e1f-9c7fdf803b46.png][] 1. 什么情况下需要注册Shared Runner? 比如,GitLab上面所有的工程都有可能需要在公司的服务器上进行编译、测试、部署等工作,这个时候注册一个Shared Runner供所有工程使用就很合适。 1. 什么情况下需要注册Specific Runner? 比如,我可能需要在我个人的电脑或者服务器上自动构建我参与的某个工程,这个时候注册一个Specific Runner就很合适。 1. 什么情况下需要在同一台机器上注册多个Runner? 比如,我是GitLab的普通用户,没有管理员权限,我同时参与多个项目,那我就需要为我的所有项目都注册一个Specific Runner,这个时候就需要在同一台机器上注册多个Runner。 ## 基于Kubernetes运行Gitlab-Runner ## 基于kubernetes运行runner还是需要先通过docker启动一个临时runner注册一个runner token(参考基于docker运行Gitlab-Runner) 1. 获取配置参数 运行:`docker exec -it 31238d7cbe9d vi /etc/gitlab-runner/config.toml` 1. 创建configMap 编写k8s-cicd-runner-cm.yaml文件,内容如下: apiVersion: v1 kind: ConfigMap metadata: name: gitlab-runner data: config.toml: | #通过临时runner里获取而来 :docker exec -it 31238d7cbe9d vi /etc/gitlab-runner/config.toml concurrent = 1 check_interval = 0 [session_server] session_timeout = 1800 [[runners]] name = "devops-k8s-runner-1" url = "http://8.6.*.*/" token = "0c98472b0c23592e915cfc1dad60" executor = "docker" [runners.docker] tls_verify = false image = "ruby:2.1" privileged = false disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache"] shm_size = 0 [runners.cache] [runners.cache.s3] [runners.cache.gcs] 运行:`kubectl apply -f k8s-cicd-runner-cm.yaml` 1. 编写runner的deployment.yaml文件 编写k8s-cicd-runner.yaml文件,内容如下: apiVersion: extensions/v1beta1 kind: Deployment metadata: name: gitlab-runner spec: replicas: 1 selector: matchLabels: name: gitlab-runner template: metadata: labels: name: gitlab-runner spec: imagePullSecrets: - name: docker-secret containers: - args: - run image: gitlab/gitlab-runner:latest imagePullPolicy: IfNotPresent name: gitlab-runner volumeMounts: - mountPath: /etc/gitlab-runner name: config readOnly: true restartPolicy: Always volumes: - configMap: name: gitlab-runner name: config 运行:`kubectl apply -f k8s-cicd-runner.yaml` # 使用Harbor搭建镜像私有仓 # 搭建参考:*使用harbor搭建镜像仓库* # 配置kubernetes集群 # ![d686ce1d-95d2-42dd-962f-7061a9b250ff.png][] ## API URL ## API URL是GitLab用于和你的集群中那些用于部署工作负载的Kubernetes API进行通信的URL。根据Kubernetes集群运行的位置,你需要确保端口是打开的状态,这样才能让gitlab.com和Kubernetes集群进行通信。(默认是https://ip:6443) 具体如何获取,可通过kubeconfig获取。运行`cat ~/.kube/config | grep server`获取。 **提示:**kubeconfig文件来组织关于集群,用户,名称空间和身份验证机制的信息。 kubectl命令行工具使用kubeconfig文件来查找选择群集并与群集的API服务器进行通信所需的信息。默认情况下 kubectl使用的配置文件名称是在$HOME/.kube目录下 config文件,可以通过设置环境变量KUBECONFIG或者–kubeconfig指定其他的配置文件 ## CA证书 ## CA证书是需要的,因为这些证书通常是自定义证书,它们不在GitLab服务器的证书存储区中,它们可以让连接受到保护。 **获取方式一:** 1. 运行:`cat ~/.kube/config | grep certificate-authority-data`这会提供给你一个base64编码的证书字符串,但是GitLab中的CA证书需要PEM格式 1. 把编码的字符串存到一个文件中,比如cert.base64 1. 运行base64 -d cert.base64 > cert.pem 1. 返回一个pem格式的证书,你可以把它拷贝到GitLab中的CA证书字段里 **获取方式二:** kubernetes会把生成的证书文件放在master节点的/etc/kubernetes/pki/目录下,这里ca.crt即我们需要的ca证书。 ## Token ## 为了让gitlab.com实例能够与集群通信,我们将为它创建一个服务账号。 1. 创建k8s-cicd-svc.yaml文件,内容如下: apiVersion: v1 kind: Namespace metadata: name: gitlab-managed-apps --- apiVersion: v1 kind: ServiceAccount metadata: name: gitlab-sa namespace: gitlab-managed-apps --- kind: Role apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: gitlab-role namespace: gitlab-managed-apps rules: - apiGroups: - "" - extensions resources: - '*' verbs: - '*' --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: gitlab-rb namespace: gitlab-managed-apps subjects: - kind: ServiceAccount name: gitlab-sa namespace: gitlab-managed-apps roleRef: kind: Role name: gitlab-role apiGroup: rbac.authorization.k8s.io --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: gitlab-cluster namespace: gitlab-managed-apps subjects: - kind: ServiceAccount name: default namespace: gitlab-managed-apps roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io --- apiVersion: v1 kind: Secret metadata: name: gitlab-secret namespace: gitlab-managed-apps annotations: kubernetes.io/service-account.name: gitlab-sa type: kubernetes.io/service-account-token 1. 创建出一个服务账号 运行:`kubectl apply -f k8s-cicd-svc.yaml` ![bbdcad0e-d3f9-4d23-bcb7-b21c29b068c7.png][] 2. 获取生成的taken 运行:`kubectl describe secrets/gitlab-secret -n gitlab-managed-apps | grep token` ![e6ca4639-17d2-4f59-84aa-8c32342b1e02.png][] 出现以下页面,则说明成功了。 ![5c88852d-1eb6-428a-a489-4a68e9edcd8b.png][] ## 安装Helm Tiller、Ingress、Prometheus和GitLab Runner ## ![bdec82f9-f333-41c7-8f5c-06bfd62daa0b.png][] 页面直接点击安装即可。 # 有用的参考 # [GitLab CI/CD Variables 中文文档][GitLab CI_CD Variables] [1][] [fed276a8-6726-478c-8527-c8f24d3eb88d.png]: https://jessica-1259671334.cos.ap-chengdu.myqcloud.com/k8s-cicd/fed276a8-6726-478c-8527-c8f24d3eb88d.png [90b1b065-9184-4b96-ba1b-99dc11356851.png]: https://jessica-1259671334.cos.ap-chengdu.myqcloud.com/k8s-cicd/90b1b065-9184-4b96-ba1b-99dc11356851.png [5d08246a-84eb-4d32-8e1f-9c7fdf803b46.png]: https://jessica-1259671334.cos.ap-chengdu.myqcloud.com/k8s-cicd/5d08246a-84eb-4d32-8e1f-9c7fdf803b46.png [d686ce1d-95d2-42dd-962f-7061a9b250ff.png]: https://jessica-1259671334.cos.ap-chengdu.myqcloud.com/k8s-cicd/d686ce1d-95d2-42dd-962f-7061a9b250ff.png [bbdcad0e-d3f9-4d23-bcb7-b21c29b068c7.png]: https://jessica-1259671334.cos.ap-chengdu.myqcloud.com/k8s-cicd/bbdcad0e-d3f9-4d23-bcb7-b21c29b068c7.png [e6ca4639-17d2-4f59-84aa-8c32342b1e02.png]: https://jessica-1259671334.cos.ap-chengdu.myqcloud.com/k8s-cicd/e6ca4639-17d2-4f59-84aa-8c32342b1e02.png [5c88852d-1eb6-428a-a489-4a68e9edcd8b.png]: https://jessica-1259671334.cos.ap-chengdu.myqcloud.com/k8s-cicd/5c88852d-1eb6-428a-a489-4a68e9edcd8b.png [bdec82f9-f333-41c7-8f5c-06bfd62daa0b.png]: https://jessica-1259671334.cos.ap-chengdu.myqcloud.com/k8s-cicd/bdec82f9-f333-41c7-8f5c-06bfd62daa0b.png [GitLab CI_CD Variables]: http://www.ttlsa.com/auto/gitlab-cicd-variables-zh-document/ [1]: http://blog.51cto.com/5404542/1851887
还没有评论,来说两句吧...