容器 PaaS 新技术架构下的运维实践

2018年11月16-17日,运维&容器技术盛会 CNUTCon 全球运维技术大会在上海·光大会展中心成功举办。时速云联合创始人兼 CTO 王磊受邀参加这次大会,并发表主题演讲。
王磊这次演讲的题目为《容器PaaS 新技术架构下的运维实践》,详细为你们讲解了在基于 Docker +Kubernetes 构建容器 PaaS 的过程当中,如何以应用为中心,经过新的技术、工具对服务、节点、集群、平台等多个方面进行管理运维,提升系统的自动化运维能力。同时结合基于容器PaaS 构建 DevOps、微服务产品的实践经验,分享如何在简化DevOps 工具和微服务框架自己的同时,提升其可用性和简化运维管理的成本。git

王磊认为,随着容器技术的普及落地,容器 PaaS 平台成为了企业云计算战略或云平台建设中不可或缺的部分;同时,容器技术也推进了DevOps 和微服务的逐步标准化和深刻发展,容器 PaaS已经成为这些新理念、新技术、新框架的理想支撑平台。但在容器 PaaS 新技术架构落地过程当中,企业和运维人员还面临着以下挑战:docker

  • 新技术、新理念带来的学习成本
  • 技术生态的飞速发展带来的复杂性以及如何保证其稳定性
  • 管理高密度、快速变化的运行时环境的复杂性
  • 如何在新技术架构下提升自由度和创新能力
  • 如何进行跨中心的开发协做 – DevOps
  • 微服务架构下的平台支撑及运维

咱们先来看一下基于 Kubernetes 的容器 PaaS 平台有哪些运维的主要方式,这里从用户服务、节点、集群、平台自身运维几个角度分别介绍。数据库

用户服务运维的手段,主要包含如下几点:安全

  • 所在节点故障,自动迁移 - 设置合适的驱赶时间
  • 设置探针,防止容器中服务无响应时带来的故障
  • 合理设置探针各项参数,滚动升级时保障服务不中断
  • 使用PodDisruptionBudget服务可用性、PodSecurityPolicy安全性、定义 PriorityClass优先级
  • 经过服务分布及各项资源使用状况,打散热点进行从新调度
  • 根据服务的状态、重启次数等数据及持续时间告警
  • 根据服务日志匹配策略、频率告警
  • 结合 ConfigMap与 gitlab的配置版本控制
  • 把调试工具交给用户
  • 服务操做审计、事件统一管理

同时对于数据中间件的支撑,能够经过 CRD 和自定义 operator 的方式来对不一样的中间件集群进行部署运维等操做。包括集群的建立维护,数据的备份恢复,存储的扩容等,均可以经过不一样的 CRD 及 controller 的方式进行实现,既要保证服务的可用性,又要保证数据的安全性。架构

集群节点的运维,能够从如下几点考虑并灵活运用:并发

  • 主要资源指标监控、告警
  • Node affinity /taint
  • 镜像、容器gc 策略
  • 扩展节点设备类型- ListAndWatch / Allocate
  • 节点维护状态
  • 时间同步
  • 节点故障、自定义 agent 上报异常状况
  • 节点资源不足时的处理负载均衡

    驱赶策略
    节点 OOM 行为
    最佳实践(预留资源、服务QoS、DaemonSet)

对于 Kubernetes 集群的运维,主要从集群高可用、联邦集群、资源管理、配额管理,集群的运维工具、清理工具等方面进行了介绍。同时,在不一样的底层 IaaS 平台基础上,还能够充分发挥 IaaS 的一些能力来简化或者改善容器 PaaS 的运维工做。随着 Kubernetes 自身的快速迭代,升级也就成了不起不考虑的一方面,目前咱们提供两种升级路径,in-place或者 data migration,分别适合小版本升级和跨度较大的版本升级。框架

图片描述

同时,对于整个平台的监控、运维,咱们开发了一个独立的、易于部署的监控平台,用来对开发测试镜像仓库,生产镜像仓库、PaaS 平台、各种 API 服务、K8s 集群及其核心组件、各节点组件等进行统一状态收集,能够监控相关服务的状态,也能够对历史状态和异常状况进行回溯,从总体上考量每一个组件的服务质量。
图片描述运维

对于平台的运维,固然也要考虑到对数据的备份和恢复,以便在某些场景下对数据进行回滚操做。咱们的容器 PaaS 上也提供了平台、集群相关的数据定时备份及恢复管理,能够把平台的 MySQL 数据及每一个集群的 etcd 数据进行统一管理,也容许接入自定义备份源,实现对数据的统一管理。ide

图片描述

接下来,介绍一下咱们如何基于 Kubernetes 构建本身的 DevOps 平台。首先说一下时速云对本身的 DevOps 平台的指望:

  • 能够更简单的同其它 DevOps 或者第三方工具集成
  • 用户的 DevOps 需求比较多样,须要有更好的定制能力
  • 更容易安装、运维、扩展和伸缩
  • 减小客户和公司内部的学习成本
  • 同 PaaS 平台保持一致的用户体验和数据一致性,充分发挥 PaaS 平台已有的能力
  • 帮助本身的 PaaS 和微服务治理产品实现更好的 DevOps 能力

总体 DevOps 平台的基本架构以下,经过自定义 CRD 和 operator 来对构建任务进行管理,日志的收集、监控告警、节点管理、构建资源的伸缩、配额管理、权限控制均可以同PaaS 层的能力相一致,同时能够利用 PaaS 上的 Pod、Job、CronJob、Volume、ConfigMap、Secret 等诸多资源的能力,在持续集成、持续交付、持续部署等方面进行创新。将来 PaaS 层的新功能、功能改善,均可以直接适用于 DevOps 平台,大大下降了 DevOps 的开发和运维成本。

图片描述

接着,咱们来看一下如何在 DevOps平台上实现 CI/CD的一些例子:

  • 实现 docker 镜像的构建
  • 如何对构建中的产出物进行管理(war 包、jar 包等)
  • 实现 Gitlab/Jenkins/Sonar 等工具的集成
  • 人工审核任务
  • 实现 Gitlab/Harbor/Jira 等工具的集成

最后,再分享一下如何在容器 PaaS 的新技术平台上更好的支撑位服务治理框架。主要包括如何对跨部门、跨中心的微服务协同开发进行支撑,如何减小微服务框架和 PaaS 平台之间的能力冲突,使彼此更好的融合。
图片描述
在 Spring Cloud 和 K8s融合方面,可使用 Spring Cloud开源的依赖项目,使用 K8s自身的服务发现、配置管理等相关能力;同时为了方便管理运维,咱们将 Zuul 的路由配置使用数据库进行持久化,将 Zipkin 的调用链数据和 Hystrix 的熔断监控数据分别进行了持久化,以便随时对历史数据进行回溯;也能够直接在微服务治理平台上动态配置熔断策略或者开启降级操做。

在 Dubbo 和 K8s 融合方面,咱们在 K8s 上进行了扩展,并对 Dubbo 的依赖包进行定制,替换了 zookeeper,使用 k8s 做为服务发现和注册中心,并支持 dubbo consumer 和 provider 之间经过 K8s 的 service 或者 pod ip 进行通讯,用户能够根据本身的需求选择使用服务端负载均衡仍是 Dubbo 的客户端负载均衡。

综上,咱们一直致力于打造具有可靠、简单、自动化、集成扩展、协做等特色的容器PaaS、DevOps 和微服务治理平台,但愿可让用户更快捷、安全的进行云原生应用的实践与创新,将来咱们也会继续在自动化、智能化运维以及引入适合于 容器 PaaS 的 ChatOps 上继续本身的努力。

相关文章
相关标签/搜索