高欣 - 基于Kubernetes的DevOps实践之路

JFrog高级架构师高欣分享《基于Kubernetes的DevOps实践之路》

展开查看详情

1.基于Kubernetes的DevOps实践之路 演讲人:高欣 JFrog 2019 中国数据智能管理峰会

2. 讲师简介 高欣 gaoxin@jfrogchina.com • 博士 • JFrog架构师 • 前IBMer • 敏捷、DevOps、。。。 • 软件产品/云服务 研发、测试、运维、服务、。。。 2019 中国数据智能管理峰会

3. 云原生 Cloud Native CNCF的云原生定义: 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可 弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和 声明式API。 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手 段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。 2019 中国数据智能管理峰会

4. 12要素应用 The Twelve-Factor App ( https://12factor.net/zh_cn/ ) I. 基准代码:一份基准代码,多份部署 VII. 端口绑定:通过端口绑定提供服务 II. 依赖:显式声明依赖关系 VIII.并发:通过进程模型进行扩展 III. 配置:在环境中存储配置 IX.易处理:快速启动和优雅终止可最大化健壮性 IV. 后端服务:把后端服务当作附加资源 X.开发环境与线上环境等价:尽可能的保持开发,预发布,线 V. 构建,发布,运行:严格分离构建和运行 上环境相同 VI. 进程:以一个或多个无状态进程运行应用 XI.日志:把日志当作事件流 XII.管理进程:后台管理任务当作一次性进程运行 2019 中国数据智能管理峰会

5. JFrog内部的Kubernetes实践 o 我们正在做的: ➢ JFrog的应用和服务全面Kubernetes化 ➢ 内部的研发和测试环境全面Kubernetes化 2019 中国数据智能管理峰会

6. 要解决的问题 o用户安装部署JFrog产品复杂 o无法快速搭建JFrog产品的全功能测试环境 ➢无法实现按需使用:开发、测试、技术支持、产品、解决方案。。。任意团队 o 无法为每个分支提供独立的CI/CD流水线支撑 ➢无法让研发有独立的沙箱环境进行自测 ➢CI/CD流程混乱 2019 中国数据智能管理峰会

7. 实践的成果 o 为客户提供全产品线的Helm Charts交付方式 ➢Helm install stable/Artifactory-ha o 云端服务Kubernetes化 ➢GoCenter: http://gocenter.io o产品的CI/CD直接对接到Kubernetes环境 ➢每周部署100+不同产品线、任意版本组合的测试环境,每次部署超过50种微服务 ➢为每个研发、每个分支,按需提供完全独立的测试环境 2019 中国数据智能管理峰会

8. Kubernetes is hard! 2019 中国数据智能管理峰会

9. 分享要点 o 起步:熟悉Kubernetes o 规划:面向Kubernetes的改造 o 编排:Helm Charts o 部署:自动、监测 o 安全:DevSecOps 2019 中国数据智能管理峰会

10. 起步:熟悉Kubernetes —— 从小处入手 o第一个Kubernetes环境 ➢自己探索:Kubernetes The Hard Way,Kelsey Hightower (https://github.com/kelseyhightower/kubernetes-the-hard-way) ➢公有服务: GKE、 EKS、 AKS、阿里、腾讯、。。。 ➢私有部署:miniKube、Rancher、。。。 o 第一个Kubernetes应用 ➢从小的示例应用开始,如Nginx ➢每次只设定一个小的、具体的目标 ➢充分利用现有的教程和演示 2019 中国数据智能管理峰会

11. 应用改造——容器化改造 仅仅把应用装进Docker是远远不够的 o 日志 o 合理地处理SIGTERM信号 ➢STDOUT/STDERR ➢ Shutdown必须是受控的 ➢处理足够多的日志文件 ➢ Recovery必须是容易的 o 持久化数据 o 重启 ➢哪些数据需要持久化存储? ➢ 如何处理上一次运行的遗留数据? 2019 中国数据智能管理峰会

12. 应用改造——高可用架构 高可用将是新的标准配置 o 保证良好的持久性和可用性 o 不停机的滚动升级 ➢ 保证向后兼容 o 支持同时运行多个应用实例 o K8s调整中的0宕机 ➢支持负载均衡 ➢ Cluster Scale-up、Scale-down ➢Scale-up、Scale-down必须是顺畅的 ➢ 计划中的Node维护 ➢ 非计划的Node宕机 2019 中国数据智能管理峰会

13. 配置改造——资源限制 … resources: requests: 运行环境的资源使用必须是受限的 memory: "1Gi" cpu: "100m" limits: o Pod的资源限制! memory: "2Gi" cpu: "250m" o 应用本身也需要资源限制 ... o 改造 ➢requests/limits ➢跨Node的HA ➢Out Of Resource Handling (https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/) ➢Pod Priority and Preemption (https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/) 2019 中国数据智能管理峰会

14. 配置改造——探针 应用的运行状态必须有可信的健康数据 o readinessProbe o livenessProbe o 探针类型 ➢Http - return < 400 on success ➢Tcp - succeed to open a socket on a given port ➢Exec - return 0 on success 2019 中国数据智能管理峰会

15. 配置改造——sidecar Application … pod example. resources: Pod里只有应用的容器是不够的 Multiple artifactory logs forwarded by a requests: Fluentbit container to a log aggregator. memory: "1Gi" cpu: "100m" o init容器 —— 在应用容器启动前运行 limits: memory: "2Gi" Pod ➢准备存储 cpu: "250m" ... Application ➢初始化设置 container o sidecar容器 —— 和应用容器同时运行 Log ➢维护 collector Fluentbit Logs container ➢日志收集 ➢监测 ➢代理 2019 中国数据智能管理峰会

16. 编排:Kubernetes原生 — kubectl + yaml … resources: 利用yaml文件编排已经足够好了吗? requests: memory: "1Gi" cpu: "100m" limits: o 多个组件、模块,对应多个yaml文件 memory: "2Gi" cpu: "250m" o 应用的版本化怎么管理? ... ➢怎么管理多个yaml文件的版本组合? o 配置数据怎么管理? ➢怎么部署到多个目标环境? 自测、开发、测试、产品。。。 o怎么回滚到之前的特定版本? 2019 中国数据智能管理峰会

17. 编排: Helm Charts … resources: requests: Helm —— 容器云应用的安装部署工具 memory: "1Gi" cpu: "100m" limits: memory: "2Gi" o https://helm.sh cpu: "250m" ... o Helm Hub ➢https://hub.helm.sh 2019 中国数据智能管理峰会

18. 编排: Helm Charts … resources: 版本化管理 requests: memory: "1Gi" cpu: "100m" limits: oHelm Chart memory: "2Gi" cpu: "250m" ➢一个包包含了所有模块 ——templates/ ... oChart的版本化管理 ➢Chart.yaml o运行态的版本化管理 ➢Release 2019 中国数据智能管理峰会

19. 编排: Helm Charts 配置数据分离 o缺省配置 ➢values.yaml o目标环境配置 ➢values-test.yaml ➢values-prod.yaml 2019 中国数据智能管理峰会

20. 编排: Helm Charts 共享、依赖 orequirements.yaml ocharts/ 2019 中国数据智能管理峰会

21. 流程:自动、复用 2019 中国数据智能管理峰会

22. 流程:制品的统一管理 2019 中国数据智能管理峰会

23. 流程:信息的统一管理 2019 中国数据智能管理峰会

24. 流程:持续交付 2019 中国数据智能管理峰会

25. 流程:分级持续交付 周期 app-bundle-1.0 UAT -> Pre-Prod->Prod Micro-A-bundle-1.0 weeks App-pipeline Micro-B-bundle-2.0 Metadata: app-1.0.qa.test.result = OK 分级Metadata Micro-A—bundle-1.0 SIT - > UAT -> Pre-Prod->Prod Front-1.0.tar days Micro-A-pipeline Backend-2.0.jar 分级Metadata Metadata: micro-a-1.0.qa.test.result = OK … backend-1.0.jar Local -> Dev Hours Backend-A-pipeline Metadata: qa.test.result = OK qa.code.result = OK … project.revision = ASDASSAC binary.config.path=backend/dev/1.0 deploy.pre-prod.result=OK 2019 中国数据智能管理峰会

26. 流程:应用监测 需要新的监测手段 ossh不管用了 o直接用kubectl调试也是不合适的 oDev/Ops应该能方便地访问可信的数据 ➢监视 ➢日志 o基于可控的OOB(Out-of-Band)工具 o微服务监测的基本原则 ( https://thenewstack.io/five-principles-monitoring-microservices) 2019 中国数据智能管理峰会

27. 流程:应用监测 监视 oPrometheus oGraphana 2019 中国数据智能管理峰会

28. 流程:应用监测 日志 oEFK ➢ Fluentd ➢ ElasticSearch ➢ Kibana 2019 中国数据智能管理峰会

29. 安全:DevSecOps 2019 中国数据智能管理峰会

数据连接未来!围绕Database、Bigdata、AiOps的企业级专业社群。行业大咖、技术干货,每天精品原创文章推送,每周线上技术分享,每月线下技术沙龙,受众20W+。