写点什么

使用 gitlab+gitlab runner+k8s 完成 devops

作者:了了
  • 2024-03-22
  • 本文字数:1774 字

    阅读完需:约 6 分钟

一.实验背景:

服务器 A 上安装了虚拟机,虚拟机的操作系统是 centos7,在虚拟机的 centos7 中安装了 gitlab 和 gitlab runner,项目代码由 gitlab 托管,项目是 springboot 的。现在有另外一个服务器 B,B 服务器上安装了虚拟机 vm1,vm2,vm3,这三台虚拟机上部署了 k8s.

二.实验目标:

通过 gitlab runner 实现自动化部署 springboot 项目到 k8s 中,

三.详细步骤:

第一步:为 GitLab Runner 配置 Kubernetes 集群访问

  1. 获取 Kubernetes 访问凭据

  2. 你需要在服务器 B(托管 Kubernetes 集群的服务器)上获取访问凭据。通常,这些信息可以在 ~/.kube/config 文件中找到。

  3. 创建 Kubernetes 服务账户(可选)

  4. 为了安全起见,你应该为 GitLab Runner 创建一个具有限制权限的 Kubernetes 服务账户,而不是使用默认的管理员账户。在你的 Kubernetes 集群中执行以下命令来创建服务账户和相关角色绑定:


   kubectl create serviceaccount gitlab-runner   kubectl create clusterrolebinding gitlab-runner --clusterrole=cluster-admin --serviceaccount=default:gitlab-runner
复制代码


获取该服务账户的访问凭据:


   kubectl get secrets
复制代码


找到 gitlab-runner 的 token 并复制它。


  1. 将 Kubernetes 配置添加到 GitLab 项目

  2. 在 GitLab 项目中,转到 Settings > CI/CD > Variables,添加一个新的变量,例如 KUBECONFIG,并将服务账户的访问凭据(通常是 Base64 编码的 .kube/config 文件内容)作为值。

第二步:编写 GitLab CI/CD 配置文件

  1. 创建 .gitlab-ci.yml 文件

  2. 在你的 Spring Boot 应用的根目录下创建 .gitlab-ci.yml 文件,该文件将指导 GitLab Runner 如何构建和部署你的应用。

  3. 配置构建和部署阶段

  4. 配置 .gitlab-ci.yml 文件以构建 Docker 镜像,然后将其推送到容器注册表,并使用 kubectl 部署到 Kubernetes。这里是一个基本的配置示例:


   stages:     - build     - deploy
variables: IMAGE_TAG: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG:$CI_COMMIT_SHA
build: stage: build script: - docker build -t $IMAGE_TAG . - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker push $IMAGE_TAG
deploy: stage: deploy script: - echo $KUBECONFIG | base64 --decode > /tmp/kubeconfig - export KUBECONFIG=/tmp/kubeconfig - kubectl set image deployment/my-deployment my-container=$IMAGE_TAG --record environment: name: production only: - master
复制代码


这个配置做了以下操作:


  • 构建阶段使用 Docker 构建镜像并将其推送到 GitLab 的容器注册表中。

  • 部署阶段将会更新 Kubernetes 部署的容器镜像。

第三步:配置 Kubernetes 部署文件

  1. 编写部署脚本

  2. 你需要为你的 Spring Boot 应用编写一个 Kubernetes 部署文件(通常是 YAML 格式)。这个文件描述了你的应用应该如何运行在 Kubernetes 上,包括使用的 Docker 镜像、副本数量、端口配置等。

  3. 例如,你可以创建一个名为 deployment.yaml 的文件,内容如下:


   apiVersion: apps/v1   kind: Deployment   metadata:     name: my-springboot-app   spec:     replicas: 3     selector:       matchLabels:         app: my-springboot-app     template:       metadata:         labels:           app: my-springboot-app       spec:         containers:         - name: my-springboot-app           image: registry.example.com/my-springboot-app:latest           ports:           - containerPort: 8080
复制代码


注意: 你需要将 image 值更改为实际的镜像路径。


  1. 将 Kubernetes 部署脚本添加到仓库

  2. deployment.yaml 文件提交到你的 GitLab 仓库。这样 GitLab Runner 就可以在部署阶段访问到它。

第四步:触发构建和部署流程

提交 .gitlab-ci.ymldeployment.yaml 文件到你的 GitLab 仓库后,每当你推送代码到仓库中,GitLab CI/CD 将自动触发构建和部署流程。


每次代码推送到 master 分支时,GitLab Runner 将自动执行上述配置的 builddeploy 阶段,从而构建新的 Docker 镜像,并更新 Kubernetes 集群中的部署。


这是自动化部署的一个基本示例。根据你的具体需求,你可能需要进一步定制构建和部署脚本,例如设置更详细的健康检查、资源限制和日志配置等。

发布于: 刚刚阅读数: 6
用户头像

了了

关注

还未添加个人签名 2018-01-25 加入

还未添加个人简介

评论

发布
暂无评论
使用gitlab+gitlab runner+k8s完成devops_了了_InfoQ写作社区