k8s笔记2--基于k8s的服务开发、部署、维护介绍
随着 k8s 的快速发展,越来越多的企业开始拥抱云原生,企业服务上云已经成为一种趋势。在这种情况下,服务的开发、部署、维护也随之发生了些许变化,本文主要对这种变化加以介绍。
1 基础流程
传统应用的开发基本为:应用开发|测试->应用部署到物理->维护(发新版本)。
k8s环境下的应用开发更新为:应用开发|测试->编写Dockerfile|打包发布到dockerhub->通过原生deployment或企业平台部署服务->维护(更新deployment或者企业维护流程更新应用)。
2 服务开发
- 业务开发人员在本地开发调试、测试服务
- 编写Dockerfile打包应用为镜像,
- 发布到相应的dockerhub中(考虑到安全原因,企业一般会自建dockerhub)。
3 服务部署
一般而言,服务最好部署为2路(以下称为service-A,service-B),以便于实现不停服更新|维护。
在条件苛刻的情况下,可能只有一套k8s,此时服务部署方式:
分别编写service-A 和 service-B的k8s deployment,并配置好服务的启动命令参数 和 所需cpu、内存等资源,以及日志输出方式;
service-A 和 service-B 部署成功后,再部署一个 service-all的 service,该service 主要用于匹配service-A 和 service-B 的pod,并确定内部端口和外部端口,提供一个外部可见的ip:port。
若企业自身有人力资源,可以开发一套自己的服务部署平台,此时服务部署方式:
用户选择k8s集群和服务的namespace(下文简称ns);
选择服务标签、子网,填写服务名称、cpu资源、内存资源、容器命令、环境变量等信息,确定后即可部署服务;
部署时候可以进一步确定服务是否需要内外网LB、内外网域名,设置LB端口和代理模式(TCP、HTTP、HTTPS等),创建服务维护流程。
创建成功后,提供内外网域名、端口 和 维护流程给应用开发人员即可。
4 服务维护
服务维护一般指的是对服务的参数、环境变量调整,发布新版本;维护的时候一般通过AB服交替维护,从而实现不停服维护。
4.1 常见服务维护流程
service-A 维护:
1)A 服务断开LB
2)A 服务sleep 60s(可以根据实际情况设置,该操作可以确保A上已有的请求正常执行完成)
3)A 服务容器副本缩容为1
4)A 服务镜像更新
5)A 服务环境变量更新
6)A 服务恢复副本为 n
7)A 服务恢复LB
service-B 维护:
1)B 服务断开LB
2)B 服务sleep 60s(可以根据实际情况设置)
3)B 服务容器副本缩容为1
4)B 服务镜像更新
5)B 服务环境变量更新
6)B 服务恢复副本为 n
7)B 服务恢复LB
4.2 不停服维护说明
与 3 服务部署对应,此处分两种情况介绍服务维护流程。
1)条件苛刻的情况下
条件苛刻时候可能没有专门的域名、LB配置管理工具,也没有一键维护服务生成API;因此需要自己通过k8s 的 service 实现安全不停服更新,简单来说就是维护A服务的时候不匹配到该服务,维护结束后恢复对其匹配,A服务维护完成后再以同样方法维护B服务。
此处以 p1项目的 flask-api 为案例,截取核心参数 labels 加以说明。
serviceName 配置(第一路):
application:
dnsPolicy: ClusterFirst
labels:
project: p1
app_label_a: flask-api-deployment-a
app_label: flask-api-deployment
serviceName-1 配置(第二路):
application:
dnsPolicy: ClusterFirst
labels:
project: p1
app_label_b: flask-api-deployment-b
app_label: flask-api-deployment
serviceName-all 配置(该service提供对外访问接口):
该配置下会同时匹配到 第一路 和 第二路。
k8sService:
selector:
project: p1
app_label: flask-api-deployment
断开第一路时 serviceName-all 配置:
k8sService:
selector:
project: p1
app_label_b: flask-api-deployment-b
app_label: flask-api-deployment
断开第二路时 serviceName-all 配置:
k8sService:
selector:
project: p1
app_label_a: flask-api-deployment-a
app_label: flask-api-deployment
2)具备流程维护平台的情况下
直接在维护流程平台上封装 断开LB,休眠,容器副本更新,镜像更新,环境变量更新,恢复LB等操作,每次只需要填写服务的参数即可快速新建一个维护流程(也可以在服务部署的末尾直接用API生成)。
5 说明
本文对k8s环境下的服务开发、部署、维护加以说明,不针对具体k8s案例,也不针对具体工具平台。