多云Kubernetes最佳实践的五大策略,缺一不可!

《2018 State of the Cloud Survey》显示,81%的企业使用多云。公有云计算服务和现代化的基础架构平台可大规模实现灵活性。随着企业寻求向客户提供更快的价值,公有和私有云采用继续以健康的速度增长并不奇怪。事实上,根据IDC的最新数据,2018年第一季度全球服务器出货量同比增长20.7%至270万台,收入增长38.6%,连续第三个季度实现两位数增长!

多云Kubernetes最佳实践的五大策略,缺一不可!

另一个令人兴奋的大趋势是容器的出现成为了打包和管理应用程序组件的最佳方式。Kubernetes已被广泛接受为部署和操作容器应用程序的最佳方式。而且,Kubernetes的一个关键价值主张是它可以帮助规范化云提供商的功能。

但随着这些进步也带来了新的复杂性。容器解决了一些DevOps挑战,但也引入了一个需要管理的抽象层。Kubernetes解决了一些运营挑战,但并非全部。而且,Kubernetes是一个分布式应用程序,它本身需要进行管理。

在本文中,我们将讨论最佳实践和指南,以解决跨不同云提供商成功部署和运行Kubernetes集群的关键操作挑战。我们将采取的观点是IT运营团队为多个内部团队构建企业Kubernetes策略。

多云Kubernetes最佳实践的五大策略,缺一不可!

利用最佳基础设施

所有云提供商都提供存储和网络服务,就像内部部署的基础设施供应商一样。考虑多云策略时出现的问题是是否使用每个提供商的功能或抽象层。虽然这两种方法都可以工作,但试图尽量减少抽象层并利用供应商本地方法总是谨慎的。例如,不是在AWS中运行overlay网络,最好使用AWS提供的Kubernetes CNI(容器网络接口)插件,为Kubernetes提供本地网络功能。这种方法还可以使用其他服务,如安全组和IAM。

管理你自己的Kubernetes版本

Kubernetes是一个快速发展的项目,每三个月发布一次新版本。一个关键的决定是:你是否希望供应商为你测试和管理Kubernetes版本,还是希望允许你的团队直接使用。

与往常一样,有优点和缺点需要考虑。使用供应商管理的Kubernetes可以提供额外的测试和验证。但是,云原生计算基金会(CNCF)Kubernetes社区本身具有成熟的开发,测试和发布流程。 Kubernetes项目是由一组特殊兴趣小组(SIG)组成的,发布SIG负责流程以确保每个新版本的质量和稳定性。CNCF还为供应商提供Kubernetes软件一致性程序,以证明他们的软件与Kubernetes API百分百兼容。

在企业内部,最好使用稳定版本进行生产。但是,某些团队可能需要具有pre-GA功能的集群。最好的选择是为团队提供选择多个经过验证的上游(Upstream)版本的灵活性,或者根据需要尝试新版本,风险自担。

3.通过策略标准化集群部署

安装Kubernetes集群时需要做出几个重要的决定。这些包括:

  1. 版本:要使用的Kubernetes组件的版本。
  2. 网络:使用的网络技术,通过CNI(容器网络接口)插件配置。
  3. 存储:使用的存储技术,通过CSI(容器存储接口)插件配置。
  4. Ingress:Ingress Controller用于负载均衡和反向代理外部请求到你的应用程序服务。
  5. 监控:用于监控集群中Kubernetes组件和工作负载的附加组件。
  6. 日志记录:一种集中式日志记录解决方案,用于从Kubernetes组件以及集群中的应用程序工作负载收集,聚合和转发日志到集中式日志记录系统。
  7. 其他附加组件:需要作为集群的一部分运行的其他服务,如DNS和安全组件。

虽然可以针对每个集群安装执行这些决策,但将集群安装捕获为模板或策略更加高效,可以轻松地重复使用。其中一些例子可能是Terraform脚本或Nirmata集群策略。集群安装自动化后,也可以作为更高级别工作流的一部分调用,例如从服务目录中完成自助服务配置请求。

提供端到端的安全性

有几个项目需要考虑容器和Kubernetes安全性,例如:

  1. 镜像扫描:容器镜像在运行之前需要扫描漏洞。在镜像被允许进入企业的私人注册表之前,可以将此步骤作为持续交付管道的一部分实施。
  2. 镜像来源:奖项扫描检查漏洞时,镜像出处确保只允许“可信”进项进入正在运行的集群或环境。
  3. 主机和集群扫描:除了保护镜像,集群节点还需要扫描。此外,日常运行互联网安全中心(CIS)保护Kubernetes基准是最佳实践。
  4. 分割和隔离:即使多租户可能不是一个硬性要求,最好计划跨多个异构工作负载共享集群,以提高效率并节省更多成本。Kubernetes提供用于隔离的构造(例如,命名空间和网络策略)以及用于管理资源消耗(资源配额)。
  5. 身份管理:在典型的企业部署中,用户身份由中央目录提供。无论在何处部署集群,都必须联合访问用户身份,以便可以以一致的方式轻松控制和应用它。
  6. 访问控制:虽然Kubernetes没有用户的概念,但它提供了用于指定角色和权限的丰富控件。集群可以利用默认角色或使用指定权限集的自定义角色定义。企业中的所有集群都具有这些角色的共同定义以及跨集群管理这些角色的方式,这一点很重要。

虽然这些安全实践中的每一个都可以单独应用,但从整体上查看这些安全实践,并规划适用于多云提供商的安全策略是有意义的。这可以通过使用像AquaSec,Twistlock等安全解决方案与Nirmata,OpenShift等平台一起实现。

5.集中应用程序管理

与安全性一样,管理Kubernetes集群上的应用程序需要集中且一致的方法。虽然Kubernetes提供了一组可用于定义和操作应用程序的全面构造,但它确实具有应用程序的内置概念。这实际上是一件好事,因为它可以灵活地支持不同的应用程序类型,并允许在Kubernetes上构建更多的应用程序平台的不同方式。

但是,任何Kubernetes应用程序管理平台都必须提供几个常见的属性和功能。下面讨论Kubernetes工作负载集中式应用程序管理的主要问题。

应用程序建模和定义

用户需要定义他们的应用程序组件,并从现有组件中组合应用程序。Kubernetes的核心设计理念是它的声明性质,用户可以在其中定义所需的系统状态。Kubernetes工作负载API提供了几种构造来定义所需的资源状态。例如,部署可用于对无状态工作负载组件进行建模。这些定义通常写为一组YAML或JSON清单。但是,开发人员需要组织和管理这些清单,通常在像Git这样的版本控制系统(VCS)中。

虽然开发人员需要定义和管理部分应用程序清单,但这些清单的其他部分会指定操作策略,并且可能特定于运行时环境。这些部分最好由运营团队管理。因此,思考应用程序如何显示自身的正确方法是在部署和更新之前动态组合的管道。

Kubernetes项目可以帮助解决这些挑战中的一些挑战,他是Kubernetes的包管理。它可以轻松地将应用程序分组,版本,部署和更新为Helm Charts。

Kubernetes应用平台必须提供简单的方法来模拟,组织和构建应用程序清单和Helm图表,并在开发和运营资源之间适当分离关注点。该平台还必须提供对定义的验证,以尽早捕获常见错误,以及重用应用程序定义的简单方法。

环境-应用程序运行时管理

一旦应用程序建模和验证,他们需要部署到集群。但是,最终目标是跨不同工作负载重用集群,以提高效率并节省成本。因此,最好将应用程序运行时环境与集群分离,并将通用策略和控制应用于这些环境。

多云Kubernetes最佳实践的五大策略,缺一不可!

Kubernetes允许使用名称空间和网络策略创建虚拟集群。Kubernetes应用程序平台应该可以轻松利用这些构造并创建具有逻辑分段,隔离和资源控制的环境。

变更管理

在许多情况下,运行时环境将有很长的周期,并且需要以受控方式将更改应用于这些环境。这些更改可能源自构建系统或来自传递管道中的上游环境。

Kubernetes应用程序平台需要提供CI/CD工具的集成,并监控外部存储库的变化。检测到更改后,应对其进行验证,然后根据每个环境的更改管理策略进行处理。用户应该查看并接受更改或完全自动化更新过程。

应用监控

应用程序可能在多个环境和不同集群中运行。关于监控,重要的是有能力将无关的分离,并专注于应用实例。因此,度量,状态和事件需要与应用程序和运行时构造相关联。Kubernetes应用程序平台必须提供带有自动粒度标记的集成监控,以便用户可以专注于任何环境中的应用程序实例。

应用程序记录

与监控类似,日志记录数据需要与应用程序定义和运行时信息相关联,并且应该可以访问任何应用程序组件。Kubernetes应用程序平台必须能够流式传输和聚合来自不同运行组件的日志。如果使用集中式日志记录系统,则必须应用必要的标记,以便能够分离来自不同应用程序和环境的日志,并管理跨团队和用户的访问。

警报和通知

要管理服务级别,必须能够根据任何指标,状态更改或条件定义自定义警报。还有,需要正确的关联来分离需要立即采取行动的警报。例如,如果相同的应用程序部署在dev-test,staging和production等多个环境中运行,则能够定义仅触发生产工作负载的警报规则非常重要。Kubernetes应用程序平台必须能够提供定义和管理环境和应用程序感知的粒度警报规则的能力。

远程访问

云环境往往是动态的,容器将动态性提升到一个新的水平。一旦检测到并报告了问题,就必须快速访问系统中受影响的组件。Kubernetes应用程序平台必须提供一种方法,将shell启动到正在运行的容器中,并访问容器运行时详细信息,而无需通过VPN和SSH访问云实例。

事件管理

在Kubernetes应用程序中,容器可能会出现并快速重新启动。退出可能是正常工作流程的一部分,如升级,或者可能是由于内存不足等情况导致的错误。Kubernetes应用程序平台必须能够识别故障并捕获故障的所有详细信息,以便进行脱机故障排除和分析。

总结:

容器和Kubernetes允许企业利用一组通用的行业最佳实践,来跨云提供商进行应用程序操作和管理。所有主要云提供商和所有主要应用平台都承诺支持Kubernetes。这包括平台即服务(PaaS)解决方案,其中开发人员提供代码组建,平台执行其余的,容器即服务(CaaS)解决方案,开发人员提供容器镜像,平台完成其余工作,和功能即服务(FaaS)解决方案,开发人员只需提供功能,平台完成其余工作。Kubernetes已成为新的云原生操作系统。

在开发多云Kubernetes战略时,企业必须考虑他们希望如何使用基础架构服务,管理Kubernetes组件版本,设计和管理Kubernetes集群,定义公共安全层和应用程序管理。

相关推荐