近年来,云端业务体系不断发展壮大,企业的需求也主要呈现出两个方向,一方面不断增加的数据量要求云端能够实现流量监控和管理;另一方面也需要云端能够便捷的进行容量扩展和业务升级。在这种要求下,容器技术不断发展成熟,以 Kubernetes 为代表的新兴技术也开始在成为各家云服务提供商的必争之地。
但是最终云服务的使用者是开发者,云产品的成功与否有话语权的永远是真正的用户。当下云计算领域竞争激烈,容器服务层出不穷,那么究竟怎样的产品服务才能俘获开发者的心呢?
为了得到真实而又客观的答案,华为云联合 InfoQ 共同发起了一场开发者众测活动,共 12 名来自不同企业的开发者,针对华为云的容器服务进行了全面的测试,本文便是以 12 位参与者的测试报告为基础进行整合,力求客观展现华为云的容器技术特点,并为有容器业务需求的开发者提供技术要点。
综述:在完善中追求完美
在本次测试的环节里,共有 12 人参与了本次测试,而由于开发者们的资历、业务需求以及测试环境的不同,因此不同的测评用户得出了不同的结论。
从测试用户的反馈来看,华为云容器的优势在于:功能丰富,分类合理;容器的创建速度快;应用及系统监控指标全面;资源利用率高;拥有详细的事件日志;对 Kubernetes 底层改造有相当彻底的研究和实践;提升了应用的管理和运维能力;页面操作响应快;打造了以 CCE 为核心的大规模可维护性极高的云集群;可升缩性强,部署快,相比自建节省很多资源开销。
不过同样的产品中,测试用户也列出了一些可改进的点:页面上可以尝试折叠用户不是很关心的部分基础操作;部分有状态显示的页面刷新速度不够及时;希望错误信息能给出详细的、清晰易懂的错误提示;服务列表的页面跳转如果能开启新的标签体验更佳。
那么这些优缺点是如何得出的呢? 为了详细阐述华为云的技术特性,笔者将测试用例和实际应用场景相结合以具体进行分析。
以 spring Cloud 为例,构建一个应用软件系统,需要的技术架构大致如下
图片引用自网络
生产环境部署此套应用需要如下几点可靠的保障:
如果按照生产级别的标准完成上述内容,需要一定的运维经验和技术功底。自行安装软件需要合理配置各种参数,这绝非一日两日的研究可以做到的。那么华为云解决这些问题的方法是怎样的呢?在此次测试中笔者发现,华为云针对需求有不同的解决方案。
从测试结果来看,搭建一个以 Spring Cloud 为微服务框架的应用系统,通过使用华为云是可以做到生产级别的保障要求的。更进一步的话,可以借助 Istio 服务网格,放弃使用 Spring Cloud 微服务框架,在应用毫无感知的情况下搭建微服务架构。
那么具体到测试中,这些不同功能的表现情况到底如何呢?以下就是本次测试中测试者对华为云在不同环节表现的评价。
1. 云容器引擎 CCE(Cloud Container Engine)测试
目前,云容器引擎可以提供高性能可扩展的容器服务,整合网络和存储能力,兼容了 K8S 和 Docker 的容器生态。可选 Istio 服务网络,用户也可自行选择安装插件。此次测试的目的是为了验证用户成功创建容器隧道网络虚拟机集群和无状态工作负载时的体验。
在这一案例场景下的解决方案:
购买云容器引擎就等于购买了华为弹性云服务器 ECS,ECS 的个数就是云容器引擎的节点个数。这个节点个数是可以动态调控的
节点已完整安装操作系统
节点已完整安装 Dokcer 和 K8S 相关服务
节点间网络在云容器引擎创建过程中就已经创建完毕
用户可以在创建过程中申请公网 IP,此公网 IP 可以映射到指定节点
云容器引擎支持 Istio 服务网络
云容器引擎支持节点的系统监控,如:CPU,内存,磁盘,网络等;具体应用实例的监控,如:实例占用 CPU 监控,实例占用内存监控,实例读取磁盘监控,实例网络上行下行流量监控等
测试感受:
CCE 集群创建指引清晰。在需要填写的内容旁边存在一个小问号,将鼠标悬停就可以看到解释信息。
CCE 的创建过程比较简单,不需要很多的专业知识,全程可视化;而原生的 K8S 安装需要配置各种参数,必须对 K8S 比较熟悉才行。
CCE 安装很快,各个参数配置好后,差不多 4 分钟左右集群就创建好了。
CCE 的可视化管理功能很全面,监控也很全面,出现问题基本上都可以在网页上处理掉,不需要面对各种配置文件,日志文件。下图为实例异常后的实例自动回复事件日志
web 客户端;创建基础设施日志完整呈现;方便部署;免去开源繁琐的编译安装,部署配置;而且资源分配的可伸缩性十分便利。
小结:
云容器引擎 CCE 有按需收费和包周期两种收费模式提供给用户选择,适合固件投资有限的用户使用。其最适用于大规模使用 Docker 或者大规模集群治理的业务场景。CCE 同样适合那些有波峰访问的集群服务,其动态扩容可以轻松化解服务器资源紧张的问题。在运维方面,CCE 提供了丰富的运维监控页面,可以对集群,节点,工作负载进行实时监控。
2. Istio 服务网格测试
Istio 服务网格区别于 Spring Cloud 和 Dubbo,其可以在应用无感知的情况下构建微服务系统框架。相比于 K8S 对容器的治理,Istio 网络可以做到更加细粒度的服务治理。Istio 服务网格的核心技术是将 sidecar 注入到应用服务中,使得 sidecar 可以代理应用服务的全部流量。然后通过对 sidecar 的管理和策略下发,从而构建了高度可伸缩、有弹性、安全且可便于监控的微服务架构系统。此次测试的目的是为了验证华为云创建 Istio 服务网格的虚拟机集群的体验。
对上述案例场景的解决方案:
当我们使用 Spring Cloud 微服务框架时,我们会向业务代码中注入很多管理和运维相关的功能,如:服务注册,服务发现,负载均衡,熔断,灰度发布等。这些管理和运维相关的功能本不应该成为业务开发者的负担。Istio 服务网格做到了将这些运维和管理功能抽离业务代码,使得开发者可以更加关注业务逻辑的实现。而运维和管理功能则交给运维人员进行统一管理。
Istio 服务网格与经典型弹性负载均衡结合,可以在业务服务无感的情况下,达到熔断容错、故障注入、流量管理等效果。
测试感受:
在创建和管理 bookinfo 应用中,见证了 Istio 对应用全生命周期中各资源状态的直观掌控能力,同时对流量的监控粒度精细。下图为 bookinfo 应用请求流向图:
在应用的实例镜像版本的柔性升级过程中,金丝雀灰度发布,对版本升级的策略生成及下发、升级过程的控制、应用负载状态监测。
小结:
使用 Istio 服务网络,可以轻松做到金丝雀发布,服务高可用,细粒度的请求监控。Istio 可以说是下一代微服务架构的发展方向。华为云已经支持 Istio 服务网络,已经为未来的微服务体系铺平了道路。Istio 服务网络可以将运维和管理功能彻底从业务代码中脱离,做到对应用服务的完全透明,比较适合那些不希望使用 Spring Cloud 等微服务框架的应用集群。
3. AOS 应用编排服务和可视化模板设计器
自动化部署面临的问题有如下几点:自动化脚本编写复杂,自动化脚本可阅读性差,脚本参数动态配置表现不佳,环境搭建复杂,资源配给复杂。那么华为云的 AOS 的是如何解决上述问题的呢?
华为云的服务主要有如下特点:
由于网络,应用,数据库,服务器节点等对象互相关联,通过可视化的关系图描述出来是非常直观的。
运行环境需要做到可复制,可配置,可升级。应用服务编排服务可以通过可视化的方式生成可配置的模板。模板可以保存和继续编辑。
AOS 设计器简化了模板的撰写工作,通过图形化的界面进行展示,提升了模板的直观可阅读性。平时的模板编写都需要手动编写,但设计器提供了简约的,可拖拽式的画板操作。
模板可以支持环境变量,用户在创建堆栈的时候配置动态参数,增加了脚本的灵活性。
资源可视化,配给资源只需轻轻拖拽。自动化部署过程中最复杂的莫过于资源配给,设计器可以将资源通过图形的方式展现出来,使得用户可以清晰明了的看到资源与资源之间的关系。不仅如此,设计器会在资源间强制建立一些基本的关系,可以帮助用户快速分配资源。
用户自己创建的脚本还可以申请上传共有模板,同时用户也可以借鉴其他用户发布的共有模板。
测试感受:
使用模板创建应用很方便,整个配置过程也很简单、快速,不需要很多专业知识或者在代码层面做配置,降低了用户上手的难度。
在测试中,通过华为云引擎提供的应用编排服务 AOS 组件,轻松瞬速的实现了 WordPress 应用发布,从公用模板库中引用华为云引擎内建模板镜像,到建立堆栈、发布应用一气呵成。下图为 wordpress 的可视化模板:
小结:
Dokcer 将应用和环境融为一体,使得应用获得了很强的可移植性。而 AOS 应用编排服务则是将整个集群和集群需要的所有组件融为一体,这其中包括数据库服务,负载均衡服务,网络,存储,节点,防火墙。如此复杂的融合仅需要在画板上简单的拖拽就可以实现。
4. 工作负载提升应用高可靠性
工作负载即服务的抽象,如:微服务中把复杂的业务逻辑拆分成不同的微服务,每个微服务在华为云中都可以称为一个工作负载;同一个服务的多个实例属于同一个工作负载;数据库服务也是一个工作负载。工作负载分为无状态的工作负载和有状态的工作负载。无状态指的是,服务之间完全独立,提供完全相同的服务,不存在任何依赖关系。有状态值的是,服务之间有依赖关系,有相互调用的情况,有存储共享的情况。此次测试的目的是验证创建无状态工作负载时的体验。
对上述案例场景的解决方案:
工作负载可以配置伸缩策略,根据峰值流量自动调整实例个数。
通过配置工作负载的调度策略,如:服务对于节点的亲和性配置;服务对同类型服务的非亲和性配置等。有了调度策略,可以保证相同的服务实例绝不会部署在同一台 ESC 节点上,同时也可以保证有特殊需要的服务一定部署在不同的物理机房(可用区)中。
针对每一个工作负载可以设置多种类型的健康检查,如:HTTP 请求检查,TCP 端口检查,执行命令检查等。当发现实例不健康后,不会有任何的流量继续走向该实例。
工作负载中可以针对不同的实例进行监控,如:CPU,内存,网络,磁盘等。
测试感受:
本次测试亲历了华为虚拟化集群的两个用例,一个是在集群中建立无状态负荷,并做了实例镜像版本的柔性升级,即灰度测试,一个是在集群的跨虚机容器间网络性能测试及反亲和性测试,均取得了较满意的效果。
总的使用感觉对比之前的 K8S 使用感受感觉云容器的启动和故障恢复速度略慢。
自动恢复功能很好,当一个实例死掉后,能够迅速创建新的实例。下图为实例自动恢复事件日志:
在部署失败的情况下,给用户的信息感知还是不够具体,需要有更加直观的问题所在点
小结:
工作负载是华为云对单个微服务应用集合的称呼。工作负载可以对单个微服务集合配置健康检查、部署策略、伸缩策略,访问方式等。在 AOS 应用编排服务中部署的堆栈也会出现在工作负载中。如此的设计也可以在华为云不同服务之间完成交互和配合。
5. 总结
从本次测试结果来看,结合 12 位测试者的测试报告可以看出,华为云的容器产品依旧保持了一贯风格风格,大胆的拥抱了云原生应用管理与部署,可以提供大规模应用综合治理服务。虽然在细节方面依然存在一些普遍性的不足,但是将复杂的资源分配、环境部署交给华为云来完成,能够为开发者提供更加高效的工作环境。
从华为云的定位来看,企业级 Kubernetes 容器集群的高可用性和安全性,得到了普遍认可;其多样化付费方式、性能稳定、管理便捷并且提供了一些技术模板,对于初级开发者非常友好,这将会有效降低中小型企业的容器管理难度。在与部分华为云的客户接触中,华为云的服务态度与对客户的重视程度也获得了不错的口碑。有测试者也在结果中提到:“华为云将 docker 和 Kubernetes 结合,提升了应用服务的可移植性,加强了应用服务的综合治理能力。”
而从市场来看,目前大多数的云服务产品在弹性扩容伸缩方面存在一定的不足,而华为云在此方面的稳定性属于市场上少有的。在与业务衔接时,华为云全面采用的 Kubernetes 技术可以在监控和管理方面帮助企业获得先机。
6. 文末福利
作为云服务直接用户的你,对于云服务的刚需是什么?你有什么想对华为云说的吗?欢迎在评论区留言告诉我们,为了答谢大家对华为云的支持,截止本周四下午 5 点前,评论点赞最高的五位用户将获赠华为荣耀手环 3 一个(支持 NFC 支付、50 米防水,兼容 iOS& 安卓)!
与此同时,你还可以点击访问华为云双十二活动现场,获取一箩筐的福利,我要是你会多薅点羊毛屯着过冬。
评论 4 条评论