首页 > 其他分享 >Kubernetes CI/CD 实战:5分钟部署你的第一个应用

Kubernetes CI/CD 实战:5分钟部署你的第一个应用

时间:2024-03-21 11:02:07浏览次数:23  
标签:CI Kubernetes 部署 代码 CD 镜像

Kubernetes 是一个流行的容器编排平台,它可以帮助您轻松地部署和管理容器化应用程序。持续集成和持续交付 (CI/CD) 是一组实践,可以帮助您提高开发效率和可靠性。

本教程将介绍如何使用 Kubernetes CI/CD 工具来构建、测试和部署应用程序。

目标

  • 了解 Kubernetes CI/CD 的基本概念

  • 学习如何使用 GitLab CI/CD、Harbor 和 ArgoCD 实现 Kubernetes CI/CD

  • 能够使用 CI/CD 工具自动部署应用程序

1. 持续集成 (CI)

1.1 定义

持续集成是一种软件开发实践,它鼓励开发人员频繁地将代码更改集成到共享代码存储库中。在每次提交后,都会自动触发一系列构建、测试和部署任务,以确保代码质量和快速交付。

1.2 优势

  • 提高代码质量: 通过自动化测试,可以尽早发现并修复代码缺陷,提高代码质量。

  • 缩短发布周期: 通过自动化构建和部署,可以缩短软件发布周期,更快地将新功能和修复程序交付给用户。

  • 提高团队协作: 持续集成可以促进开发人员之间的协作,使团队能够更有效地工作。

1.3 目标

  • 代码变更的快速验证: 确保代码变更不会破坏现有功能。

  • 快速构建和部署: 能够快速地将代码变更发布到生产环境。

  • 提高代码质量: 减少代码缺陷的数量。

  • 提高团队协作: 提高开发人员之间的协作效率。

2. 持续交付 (CD)

2.1 定义

持续交付是一种软件开发实践,它将持续集成与部署过程相结合,以确保代码更改能够快速、可靠地交付到生产环境。

2.2 优势

  • 缩短发布周期: 能够快速地将代码变更发布到生产环境,更快地满足用户需求。

  • 提高可靠性: 通过自动化部署,可以减少人为错误,提高部署的可靠性。

  • 降低风险: 能够快速回滚失败的部署,降低风险。

2.3 目标

  • 快速发布: 能够快速地将代码变更发布到生产环境。

  • 可靠发布: 确保发布过程的可靠性。

  • 降低风险: 降低发布失败的风险。

3. 持续集成和持续交付的联系

持续集成和持续交付是两个相互关联的概念。持续集成是持续交付的基础,它为持续交付提供高质量的代码。持续交付则是持续集成的延伸,它将代码变更快速、可靠地交付到生产环境。

4. 持续集成和持续交付的最佳实践

  • 使用版本控制系统(GIT、SVN)管理代码。

  • 使用自动化测试工具(Junit、Cypress)测试代码。

  • 使用自动化构建工具构建(Maven、Ant、Gradle)代码。

  • 使用自动化部署工具(Jenkins、Gitlab CI、CircleCI)部署代码。

  • 建立持续集成和持续交付流水线(FluxCD、ArgoCD)。

  • 监控持续集成和持续交付过程(Prometheus、Grafana、ELK)。

5. CI/CD流程设计

5.1 CI/CD流程概述

Kubernetes CI/CD流程是指将代码更改从开发环境自动部署到生产环境的过程。该流程通常包括以下步骤:

  • 代码提交: 开发人员将代码提交到版本控制系统。

  • 构建: 构建系统将代码编译、测试和打包成镜像。

  • 推送镜像: 镜像推送到镜像仓库。

  • 部署: 部署系统将镜像部署到 Kubernetes 集群。

5.2. CI/CD流程设计

CI/CD流程的设计需要考虑以下因素:

  • 项目需求: 不同的项目对CI/CD流程的需求不同,例如,一些项目需要频繁发布,而另一些项目则可以发布频率较低。

  • 团队规模: 团队规模会影响CI/CD流程的复杂度。

  • 技术栈: 项目的技术栈会影响CI/CD流程的具体实现。

5.3. CI/CD流程实现

以下是一个简单的Kubernetes CI/CD流程示例:

  1. 开发人员将代码提交到 GitLab 代码仓库。

  2. GitLab CI/CD Runner 触发构建任务。

  3. 构建任务使用 Docker 构建镜像。

  4. 镜像推送到 Harbor 镜像仓库。

  5. ArgoCD 监视镜像仓库,并自动将镜像部署到 Kubernetes 集群。

该流程可以使用以下工具实现:

  • 版本控制系统: GitLab

  • CI/CD工具: GitLab CI/CD

  • 镜像仓库: Harbor

  • 部署工具: ArgoCD

5.4. CI/CD流程最佳实践

  • 使用版本控制系统: 版本控制系统可以帮助管理代码变更,并提供回滚机制。

  • 自动化测试: 自动化测试可以确保代码质量。

  • 使用镜像: 镜像可以提高部署效率。

  • 使用持续部署工具: 持续部署工具可以自动将代码变更部署到生产环境。

  • 监控: 监控可以帮助发现和解决问题。

6. Kubernetes CI/CD示例代码

该示例使用以下工具:

  • 版本控制系统: GitLab

  • CI/CD工具: GitLab CI/CD

  • 镜像仓库: Harbor

  • 部署工具: ArgoCD

步骤流程:

  1. 开发人员将代码提交到 GitLab 代码仓库。

  2. GitLab CI/CD Runner 触发构建任务。

  3. 构建任务使用 Docker 构建镜像。

  4. 镜像推送到 Harbor 镜像仓库。

  5. ArgoCD 监视镜像仓库,并自动将镜像部署到 Kubernetes 集群。

代码:

1. GitLab 代码仓库:

.gitlab-ci.yml
image: node:latest
stages:  - build  - test  - deploy
build:  script:    - npm install    - npm run build
test:  script:    - npm run test
deploy:  script:    - docker login harbor.example.com    - docker push harbor.example.com/my-app:latest    - kubectl apply -f deployment.yml

2. Dockerfile:

FROM node:latest
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN npm run build
CMD ["npm", "start"]

3. deployment.yml:​​​​​​​

apiVersion: apps/v1kind: Deploymentmetadata:  name: my-appspec:  replicas: 1  selector:    matchLabels:      app: my-app  template:    metadata:      labels:        app: my-app    spec:      containers:      - name: my-app        image: harbor.example.com/my-app:latest        ports:        - containerPort: 80

4. Harbor 镜像仓库:

  • 创建项目 my-app

  • 创建镜像 harbor.example.com/my-app:latest

5. ArgoCD:

  • 创建应用 my-app

  • 指向镜像 harbor.example.com/my-app:latest

运行示例:

  • 克隆代码仓库:

git clone https://gitlab.com/example/my-app.git
  • 进入代码仓库目录:

cd my-app
  • 修改代码:

// 修改 index.js 文件
  • 提交代码:

git add .git commit -m "修改代码"git push
  • 查看构建日志:

gitlab-ci-lint .gitlab-ci.yml
  • 查看镜像:

docker images
  • 查看部署:

kubectl get pods

今天这篇文章介绍了 Kubernetes CI/CD 的基本概念和实现方法。

通过本次学习,您应该能够:

  • 理解 Kubernetes CI/CD 的基本概念

  • 使用 GitLab CI/CD、Harbor 和 ArgoCD 实现 Kubernetes CI/CD

  • 使用 CI/CD 工具自动部署应用程序

如果您还有任何问题,请随时在评论中提问。

希望本教程能够帮助您提高开发效率和可靠性。

想要了解更多技术文章请关注公众号“职谷智享”,关注后回复关键字【秒杀】可以领取秒杀系统学习资料

在这里插入图片描述

在这里插入图片描述

标签:CI,Kubernetes,部署,代码,CD,镜像
From: https://blog.csdn.net/u013533380/article/details/136885041

相关文章

  • 将自己写的组件封装成类似element-ui一样的库,可以cdn引入
    在写好自己的组件之后第一步修改目录结构在根目录下创建package文件夹,用于存放你要封装的组件第二步在webpack配置中加入pages与publicpath同级pages:{index:{entry:'src/main.js',template:'public/index.html',......
  • CDLF立式不锈钢多级泵
    在现代工业生产过程中,流体的输送是一个至关重要的环节。无论是化工、石油、制药还是水处理行业,都需要依赖高效的泵设备来确保工艺流程的顺畅进行。在众多泵设备中,CDLF立式不锈钢多级泵以其卓越的性能和可靠的质量,成为了工业生产中不可或缺的一部分。一、CDLF立式不锈钢多级泵......
  • The 14th Jilin Provincial Collegiate Programming Contest
    The14thJilinProvincialCollegiateProgrammingContest-Codeforces队友太猛了,我整场就只写了D,其他题给队友开完了,预计补一下M,FProblemD.Trie(AC自动机+树状数组)大概就是给定一颗Trie树操作一是给Trie树的fail树上一个集合中的点的所有子节点打上一个......
  • openwrt上使用emmylua + emmyluadebugger + clion调试luci
    lua-emmyluadebuggerAOpenWrtpackageofEmmyLuaDebuggerIntelliJ-EmmyLuaEmmyLuaDebuggerIntelliJ-EmmyLua是一个给JetBrains全家桶用的lua插件,也有VSCode版本VSCode-EmmyLua插件。EmmyLuaDebugger是配合IntelliJ-EmmyLua使用的remotedebugger,C++编写供lua调用的动态......
  • P2742 [USACO5.1] 圈奶牛Fencing the Cows /【模板】二维凸包
    原题链接题解这么优质的文章我写什么题解好难解释必然性感觉像模拟??code#include<bits/stdc++.h>usingnamespacestd;intq[100005]={0};structnode{doublex,y;}a[100005];doubledis(intb,intc){nodei=a[b],j=a[c];returnsqrt((i.x-j.x)*(i.x-......
  • 【云原生 • Kubernetes】认识 k8s、k8s 架构、核心实战
    文章目录Kubernetes基础概念1.是什么2.架构2.1工作方式2.2组件架构3.k8s组件创建集群步骤一基础环境步骤二安装kubelet、kubeadm、kubectl步骤三主节点使用kubeadm引导集群步骤四副节点加入主节点步骤五部署dashboardKubernetes核心实战1.资源创建方式2.N......
  • linux系统kubernetes的资源对象secret
    资源对象-secretSecret实现场景解释內建的Secrets创建自己的Secretsecret使用使用Secret加密流程创建secret加密数据挂载到pod容器以变量形式挂载以Volume数据卷形式挂载案例Secret实现作用:加密数据,存储在etcd中,让pod容器,以挂载Volume方式进行访问场景凭证......
  • linux系统kubernetes容器检查和恢复机制
    容器检查和恢复机制容器检查和恢复机制命令模式探针httpget方式探针POD的恢复策略容器检查和恢复机制在kubernetes中,可以为容器定义一个健康探针,kubelet就会根据这个Probe的返回值决定这个容器的状态,而不是直接以容器是否运行(来自Docker返回的信息)作为依据......
  • 340_依赖循环引用Relying upon circular references is discouraged and they are pro
    报错信息15:21:53.398[main]ERRORo.s.b.d.LoggingFailureAnalysisReporter-[report,40]-***************************APPLICATIONFAILEDTOSTART***************************Description:Thedependenciesofsomeofthebeansintheapplicationcontextf......
  • CF1945 H GCD is Greater
    CF1945HGCDisGreater什么鬼啊div3Hdiff:2775。纯属码力题。首先发现\(\gcd\)肯定数字越多越小。然后与值数字越多越小。所以结论就是选择两个数字取\(\gcd\),剩下的数字分到另一个集合。那么问题就变成了找出一对数字,它们的\(\gcd\)和剩下的数字的与做差值最大......