在K8s平台部署项目流程
在K8s平台部署Java网站项目
制作镜像流程
第一步:制作镜像
第二步:使用控制器部署镜像
模板
Pod主要配置启动容器属性:
• 变量
• 资源配额
• 健康检查
• 卷挂载点
案例:
第三步:部署数据库
1、使用deployment部署一个mysql实例, service暴露访
2、测试mysql实例是否可以访问
3、导入项目sql文件
第四步:对外暴露应用
第五步:增加公网负载均衡器
Jenkins自动化发布项目(CI/CD)
发布流程设计
使用 Gitlab 作为代码仓库 & 使用 Harbor 作为镜像仓库
Harbor 镜像仓库
部署步骤:
Gitlab代码仓库
Jenkins发布系统部署
Jenkins是一款开源 CI&CD 系统,用于自动化各种任务,包括构建、测试和部署。
Jenkins官方提供了镜像: Docker 使用Deployment来部署这个镜像,会暴露两个端口: 8080 Web访问端口, 50000 Slave通 信端口,容器启动后Jenkins数据存储在/var/jenkins_home目录,所以需要将该目录使用 PV持久化存储。
先安装后面所需的插件:
Jenkins下载插件默认服务器在国外,会比较慢,建议修改国内源:
# 进入到nfs共享目录
# 重建Jenkins
管理Jenkins->系统配置-->管理插件-->分别搜索Git Parameter/Git/Pipeline/kubernetes/Config File Provider, 选中点击安装。
• Git:拉取代码
• Git Parameter: Git参数化构建
• Pipeline:流水线
• kubernetes:连接Kubernetes动态创建Slave代理
• Config File Provider: 存储配置文件
• Extended Choice Parameter:扩展选择框参数,支持多选
Jenkins主从架构
当触发Jenkins任务时, Jenkins会调用Kubernetes API创建 Slave Pod, Pod启动后会连接Jenkins,接受任务并处理。
Kubernetes插件配置
Kubernetes插件: 用于Jenkins在Kubernetes集群中运行动态代理
插件介绍: https://github.com/jenkinsci/kubernetes-plugin
配置插件: 管理Jenkins->管理Nodes和云->管理云->添加Kubernetes
自定义Jenkins-Slave镜像
构建Slave镜像Dockerfile(结合项目环境)
测试主从架构是否正常
Jenkins Pipeline(流水线)
Jenkins Pipeline是一套运行工作流框架,将原本独立运行单个或者多个节点 的任务链接起来,实现单个任务难以完成的复杂流程编排和可视化。
• Jenkins Pipeline是一套插件,支持在Jenkins中实现持续集成和持续交付;
• Pipeline通过特定语法对简单到复杂的传输管道进行建模;
• Jenkins Pipeline的定义被写入一个文本文件,称为Jenkinsfile。
Jenkins Pipeline 语法
Stages 是 Pipeline 中最主要的组成部分, Jenkins 将会按照 Stages 中描述的顺序 从上往下的执行。
• Stage:阶段,一个 Pipeline 可以划分为若干个 Stage,每个 Stage 代表一组操作,
比如: Build、 Test、 Deploy
。
Jenkins 流水线自动发布项目
思路-项目部署流程
在实际工作中,会维护多个项目,如果每个服务都创建一个item,势必给运维维护成 本增加很大, 因此需要编写一个通用Pipeline脚本,将这些项目部署差异化部分使用 Jenkins参数化,人工交互确认发布的分支、副本数、命名空间等。
部署到K8s平台-思路
将部署项目yaml文件提交到项目代码仓库里,在Slave容器里使用kubectl apply部署。
由于kubectl使用kubeconfig配置文件连接k8s集群,还需要通过Config File Provider插件将kubeconfig配置文件存储到Jenkins,然后再挂载到Slave容器中, 这样就有权限部署了(kubectl apply deploy.yaml --kubeconfig=config)
注:为提高安全性, kubeconfig文件应分配权限
除了上述方式,还可以使用Kubernetes Continuous Deploy插件, 将资源配置(YAML) 部署到Kubernetes,这种不
是很灵活性
流水线脚本与源代码一起版本管理
Jenkinsfile文件建议与源代码一起版本管理,实现流水线即代码 (Pipeline as Code)。
这样做的好处:
• 自动为所有分支创建流水线脚本
• 方便流水线代码复查、追踪、迭代
• 可被项目成员查看和编辑
Jenkins从Git仓库中读取Jenkinsfile
k8s容器云平台架构