分享

Kubernetes上生产,7大因素带你上王者

 louy2 2019-02-28

如今企业IT已经不再质疑容器化应用的价值,采用DevOps和云原生架构成为趋势,利用容器功能以实现数字转换至关重要。Google的Kubernetes(K8s)是一个开源容器编排系统,已成为云原生应用程序(架构、组件、部署和管理方式)的事实标准 - 也是关键的推动者,企业正在使用Kubernetes创建由微服务和无服务器功能组成的现代架构。


在生产环境中大规模部署Kubernetes两年时间里,我们吸取总结了Kubernetes在企业中面临的挑战和实际经验教训,在这篇文章中,我们分享了大型企业需要围绕其Kubernetes投资的七项基本能力,以便能够有效地实施并利用它来推动业务发展。


介绍


通常,当开发人员开始尝试使用Kubernetes时,首先会进行基本验证(POC),在一组服务器上部署Kubernetes。但我们看到的这个基本部署,并不可用于生产中,因为它缺少关键组件来确保关键任务在Kubernetes的顺利运行。虽然部署本地Kubernetes环境可以是一个在几天内完成的简单程序,但企业级部署完全是一项不同的挑战。


完整的Kubernetes基础架构需要正确的配置DNS,负载平衡,Ingress和基于角色的访问控制(RBAC),以及一系列其他组件,这些组件会使部署过程非常困难。一旦部署了Kubernetes,就会增加监控和所有相关的操作手册,以便在出现问题时解决问题 - 例如,当容量不足时,确保HA,备份等等。最后,每当社区发布新版Kubernetes时, 您的生产集群需要升级,且需确保任何应用程序不会有停机风险。


对于真实应用程序,简单的Kubernetes集群是远远不够,以下总结了关于生产中使用Kubernetes 的7项关键考虑因素:


#1 托管Kubernetes服务确保SLA并简化操作


是的:Kubernetes太棒了。容器是现代软件交付的未来,而Kubernetes是编排容器的最佳方案(事实上的标准)。但是管理企业工作负载是出了名的复杂,其中SLA是关键。


Kubernetes控制组对Pod进行调度、部署、伸缩以及如何利用网络和底层存储。部署Kubernetes集群后,IT运维团队必须保障Pod的运行正常,HA、0停机、环境升级等,随着集群规模增加,需要开发人员能够快速加载、启动监控、故障排查并确保顺利运行。


Kubernetes运营一些常见事项:


1. 大规模配置持久化存储和网络

2. 及时了解Kubernetes社区发布的版本

3. 修补应用程序和底层Kubernetes版本的安全性以及定期更新

4. 设置和维护监控和日志记录

5. Kubernetes的灾备恢复

等等


管理生产级Kubernetes的操作非常痛苦,因行业人才稀缺和技术差距而加剧。现今,大多数企业缺乏Kubernetes管理经验,正大力聘请备受追捧的Kubernetes专家,以确保大规模的集群能稳定运营。


托管Kubernetes服务基本上提供企业级Kubernetes,没有运营负担。这些服务可以是由AWS或Google Cloud等公共云提供商独家提供的服务。也能帮助企业提供解决方案,在自己的数据中心或混合/多云环境中运行Kubernetes。


即使使用托管服务,您也需要注意不同类型的解决方案,即使用“托管”或“Kubernetes-as-a-service”来描述不同级别的管理。有些只允许您以简单的自助方式部署Kubernetes集群,一些则提供运行中的集群的操作管理,也有些会提供完整的管理服务,为你完成所有复杂工作。


#2 群集监控和日志记录


生产环境中的Kubernetes部署,通常可扩展到数百个pod,缺乏有效的监控和日志记录可能导致无法诊断和导致服务中断,以至影响业务的严重故障。


监控提供Kubernetes基础架构的可见性和详细指标。这包括所有云提供商或私有数据中心,区域,服务器,网络,存储以及单个VM或容器的使用和性能的精细度量指标。这些指标的关键用途应该是在本地和公共云资源上提高数据中心效率和利用率(这显然转化为成本)。


日志记录是有效监控的补充和必需功能。日志记录可确保在架构的每一层(Kubernetes基础架构及其组件以及应用程序)中的日志都被捕获,以进行分析,故障排除和诊断。集中式、分布式的日志管理和可视化,可使用专有工具或开源工具来实现关键的功能(如FluentBit,Fluentd,Elasticsearch和Kibana(也称EFK堆栈))。


监控不仅是7 X 24小时,还要提供针对生产中可能出现的瓶颈或问题的主动警报,以及基于角色的仪表板,其中包括有关性能、容量管理等的KPI。

 

Kubernetes监控 - 架构


#3 Registry 和 包管理 - Helm / Terraform


私有Registry 服务器是一个重要的功能,它可以安全地存储Docker镜像。Registry 支持镜像管理工作流程,具有镜像签名、安全性、LDAP集成等功能。软件包管理器(Helm)提供了一个模板(在Helm中称为“chart”),用于Kubernetes应用程序的定义、安装和升级。


一旦开发人员构建代码成功,正常情况下,将使用Registry 重新生成Docker镜像,该镜像最终使用Helm部署到一组目标pod。


这简化了基于Kubernetes的应用程序的CI / CD发布过程。开发人员可以更轻松地协作处理应用程序、更改代码版本、确保部署和配置一致性、确保合规性和安全性,并在需要时回滚版本。私有Registry 以及Helm工具确保将正确的镜像部署到正确的容器中,并且安全性也集成到流程中。


#4 DevOps的 CI / CD工具链


使用CI/CD对于提高基于Kubernetes的应用程序的质量、安全性和加快版本发布速度至关重要。我们使用GitOps方法和工具配置持续集成(例如单元测试、集成测试等)和持续交付(例如从开发环境一直到生产的部署过程)。开发人员工作流通常以“git push”开头 - 每次代码签入通常会触发构建、测试和部署过程。这包括使用Spinnaker等工具自动部署Blue / Green或Canary部署。重要的是,您的Kubernetes基础架构可以轻松地“插入”这些CI/CD工具,以使开发人员能够提高工作效率和发布质量。


#5 群集配置和负载平衡


生产级Kubernetes基础架构通常需要创建高可用、多主机、多etcd 的Kubernetes集群,这些集群可以跨私有云、公共云环境中的可用区。提供这些集群通常涉及Ansible或Terraform等工具。


一旦设置了集群并为运行应用创建了pod,这些pod就会被负载均衡器所支持,负载均衡器会将流量路由到服务。负载均衡器不是Kubernetes项目中的默认功能,因此您需要NGINX Ingress控制器,HAProxy或ELB(在AWS VPC上)或其他工具集成到Kubernetes,来扩展Kubernetes中的Ingress插件以提供负载均衡。


#6 安全


毫无疑问,安全性是云原生应用程序的关键部分,需要从一开始就考虑和设计。安全性在整个容器生命周期中是一个常量,它影响基于容器的应用程序的设计、开发、DevOps实践和基础设施的选择。可以使用一系列技术选择来覆盖各种领域,例如应用程序的安全性,以及容器和基础设施本身的安全性。包括使用基于角色的访问控制、多因素身份验证(MFA)、使用OAuth,OpenID,SSO等协议的A&A(身份验证和授权); 为容器内部的(如image Registry,镜像签名,打包)、CVE扫描等提供认证和安全性的不同工具。


#7 治理


围绕治理、审计和合规性的流程,以及基于Kubernetes的应用程序在大型企业和受监管行业中的日益增长,标志着Kubernetes日益成熟。您的Kubernetes基础架构和相关的发布流程需要与工具集成,以便为Kubernetes应用程序或基础架构的任何更新,在不同任务和权限级别提供可见性和自动审计跟踪,从而实现正确的合规性实施。


总之,为企业的应用程序上Kubernetes需要的不仅仅是部署Kubernetes集群,上述7点关键因素可帮助您生产负载的Kuberentes基础结构的设计适用于现在和未来。

 

作者:Vamsi Chemitiganti / Peter Fray

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多