Devops 之 k8s+Docker解决方案应用总结

综述:回顾前端发版方式,总结目前最优的发版方法,提高开发中的发版效率

DevOps简介

DevOps 是一个完整的面向IT运维的工作流,以 IT 自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节。

DevOps的概念

DevOps一词的来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。

DevOps是为了填补开发端和运维端之间的信息鸿沟,改善团队之间的协作关系。不过需要澄清的一点是,从开发到运维,中间还有测试环节。DevOps其实包含了三个部分:开发、测试和运维。

1.传统发版本方式总结

初级版: 前后端一起开发,发版前前端本地构建项目,后端将其一起打包为1个war包进行发布

升级版: 前后端分离,前端独立构建部署,本地运行 npm run build,把dist文件夹通过FTP软件上传到Nginx服务器

高级版: 代码提交到git服务器 配置好Jenkins自动化构建任务,手动或者配置git hooks 触发构建任务,Jenkins自动把dist文件夹上传到Nginx服务器

最新版: 通过CICD流水线创建特性分支(feature),前端开发人员提交代码到该分支 CICD流水线拉取分支代码、跑构建任务、构建镜像、滚动重启部署单元

2.传统构建方式问题和k8s+CICD解决方案优势说明

传统构建存在以下问题:

构建、部署流程没有统一标准

部署无法做到不中断业务

扩容、缩容、升级服务器配置需要间断业务

无规范的回滚机制

3.针对传统方案提出新的解决方案K8S+CICD,该解决方案的优势?

K8S+CICD优势:

一站式获取git代码、构建工具、镜像、Nginx-K8S容器

标准化的分支模型及可视化的流水线操作,规范研发及交付过程

前端部署发布可保持随时可交付状态,随时可回滚

快捷实现Beta(验证)部署,利用K8S的滚动部署的特性实现发版不停机

4.什么是K8S?

K8S——容器服务Kubernetes的缩写,用于管理容器化的工作负载和服务

Docker——通过仓库(Repository)里存放的镜像(Image)创建出来的带运行环境的容器(Container) 前端常用镜像:nginx-alpine、node-alpine,体积都在100MB以内.

部署单元(Deployment)——由多个相同配置的实例和访问这些实例的规则组成的微服务

配置项(Configmap)——为部署单元提供不同环境的环境变量及各类配置文件

服务(Service)——抽象了对部署单元(Pod)的访问

服务发现(Ingress)——通过域名暴露从集群外到集群内服务的HTTP或HTTPS路由(在编程马拉松中的应用)

5.什么是CICD?

CI——Continuous Integration  持续集成(构建)   前端概念:npm run build,生产出dist目录。

CD——Continuous Deployment  持续交付、持续部署 前端概念:dist文件夹部署到nginx

CICD——基于代码分支管理(Bitbucket),包构建工具(Jenkins),镜像管理(Artifactory),镜像部署及管理(K8S)等基础能力,通过流水线的方式整合打通各个节点。

6.前端项目怎样使用K8S+CICD?

创建部署单元、配置项、服务、服务发现:

1、包括CI环境、SIT环境、生产环境的资源

2、可不创建服务发现,而使用云解析——将申请的域名解析到服务(service)的ip

3、必须要挂载正确的nginx.conf文件,容器设置-挂载点(配置项),路径为:/app/openresty/nginx/conf/,其可以理解为将外部配置文件根据路径直接替换容器内部的默认文件,管理env.js文件也要用这个。

对于前端项目存在的跨域问题,可以在此处配置请求转发进行解决,在这里做请求转发即可。

创建CICD流水线 :

1、创建流水线部署单元

2、创建流水线任务

3、流水线任务中创建部署单元分支

4、进入发布流水线,提交发布,流水线自动执行代码拉取、构建、镜像构建部署

5、通过配置的service或者域名验证服务

CICD流水线部署单元的创建 :

部署单元使用的构建命令为内置的,不可更改,其中 www-dist 为自定义的构建(build)完成之后的目录:

npm i 

rm –rf www-dist

npm run build 

cd ${WORKSPACE}/ www-dist / 

zip –r dist.zip *

巧妙使用构建前置shell脚本:

chmox +x build.sh

sh build.sh 

build.sh 文件中可使用Jenkisn内置变量,Linux 命令操作文件/目录

前端项目环境变量的配置与使用:

由于CICD流水线在进行构建只能使用npm run build命令,无法使用自定义的构建命令,如:npm run build:sit或者npm run build:prod,因为流水线需要保证CI环境的包能够在SIT环境、PROD环境运行,必须保证构建包的一致性 针对前端项目,可以使用动态读取js文件中的变量来使用环境变量,如何做好动态变换js文件: 使用 配置项(Configmap)

前端项目使用env.js文件,该文件在构建过程会直接复制到最后的构建目录中,路径、文件名均不变,增加配置项,在不同环境替换该文件。

7.K8S+CICD部署常见问题

  • 构建过程安装依赖报错:

构建服务器通过package-lock.json下载到的依赖sha1值与公司内网AF仓库的sha1值不一致 解决: 删除package-lock.json或者本地删除此文件,重新下载依赖更新lock文件。

  • 部署时提示云资源是否申请:

解决:

1、查看K8S部署单元是否已部署

2、检查部署单元是否已关联CICD流水线的部署单元(部署镜像)

  • 静态资源不生效或者缓存一直未生效:

解决:正确配置nginx.con的缓存策略,可参考以下配置

location / {            

client_max_body_size 102400k;             

client_body_buffer_size 102400k;             # 资源缓存600s,html文件不缓存          

expires 600s;             

add_header Cache-Control "public";          

  if ($request_filename ~* ^.*?.(html|htm)$){                

       add_header Cache-Control no-cache,no-store,must-revalidate;            

 }           

  root html;            

 index index.html index.htm;         

}
  • sf云K8S-nginx在配置proxy_pass转发地址时,尽量使用IP,若使用K8S-Ingress域名,则需要将 proxy_set_header    Host  $host配置去掉 
  • 生产环境访问K8S-Service或者使用云解析到IP,均需要申请服务开墙,正常是晚上22:00统一生效
  • 生产环境的nginx需要配置Gzip压缩,静态文件能减少70%左右的大小,能够极大加快网页加载速度。

参考资料:

Kubernetes官方文档——https://kubernetes.io/zh/docs/concepts/

Kubernetes中文指南——https://jimmysong.io/kubernetes-handbook/

云CICD流水线文档——http://confluence.sf-express.com/pages/viewpage.action?pageId=59951031

 

 

 

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值