如何使用Spinnaker克服Kubernetes持续交付挑战Kubernetes是业界领先的容器编排系统,围绕Kubernetes构建了一个由开源和商业组件组成的庞大生态系统。在冠状病毒大流行之后,越来越多的组织将Kubernetes视为其IT转型之旅的核心部分。使Kubernetes成为容器管理如此出色的工具的原因在于它提供了以下功能:自动打包缩放和自我修复容器服务发现负载均衡但是,仅使用Kubernetes可能无法解决敏捷性的目的,因为它从来都不是一个部署系统。以下是使用Kubernetes的一些挑战以及如何解决这些挑战以释放云原生的全部潜力。采用Kubernetes时的部署挑战1.部署复杂性和脚本使用将应用程序部署到Kubernetes中并不是一件容易的事,因为它涉及许多人写的脚本。例如,开发人员必须创建一个YAML或JSON格式的Kubernetes部署清单文件(如下图所示)并编写kubectl命令来部署应用程序:虽然单个部署对于某些开发人员来说可能看起来很容易,但当这变得令人生畏时当目标是每天对dev/QA/Prod执行多个部署时的任务。这需要对Kubernetes有很好的了解,但并非所有团队成员都精通Kubernetes。通常,组织最终会使用脚本和kubectl命令来提高部署速度。云原生计算基金会(CNCF)最近对1,500名受访者进行的一项调查表明,在使用和部署容器方面,复杂性和文化变革仍然是Kubernetes采用的最大挑战,如下图所示。2.过度依赖专家和开发人员倦怠由于缺乏Kubernetes专业知识,开发人员和应用团队严重依赖DevOps团队(也称为发布团队)不断帮助他们创建Kubernetes对象,例如部署、副本集、状态集和守护进程。在后续工作过程中,与不同的团队协作以部署变更会花费利益相关者大量时间。此外,由于期限短和实现业务目标的压力大,开发团队必须花费大量时间来部署他们的更改。根据企业级云平台提供商D2IQ的一份调查报告,几乎所有组织(96%)在容器化应用程序的初始部署期间都面临挑战和复杂性,将Kubernetes列为痛苦之源。该报告还指出,“51%的开发人员和架构师表示,他们对构建云原生应用程序感到不知所措。对于负责为其组织部署容器化应用程序的高级IT领导者来说,压力尤其大。”3。面临严峻的安全挑战Kubernetes并非旨在执行策略,例如查找图像中的漏洞。因此,如果一个组织使用Kubernetes进行部署,则需要寻找其他方式,通常是手动执行策略或使用一些脚本。例如,基于默认网络策略,Kubernetespod可以相互通信并与外部端点无缝通信。出于应用程序或基础设施安全方面的考虑,如果一个容器或Pod受到威胁,其他容器或Pod也可能受到威胁(也称为复杂攻击向量)。由于组织优先考虑软件交付速度,安全性和合规性有时会降低。通常,在采用Kubernetes的过程中,组织必须尝试在构建、测试、部署和生产阶段集成安全性和合规性。4.缺乏部署策略和部署后健康检查使用基于Kubernetes的应用程序的一个共同目的是按需扩展到大用户。在这样的生产环境中,可以观察到大量的节点、数百个Pod以及运行多个应用程序实例的数千个容器。向客户引入新变化的一种方法是增量部署,例如采用蓝/绿部署或金丝雀部署等策略。这避免了向最终客户发布不稳定版本的风险。但是,Kubernetes中没有蓝/绿或金丝雀部署。最重要的是,由于容器化应用程序的分布式特性,获取和发送新部署的Kubernetes应用程序的健康状态更新,以及估计它们的漏洞和对组织的风险,既繁琐又复杂。使用开源Spinnaker部署KubernetesSpinnaker是一个开源和多云持续交付平台,可用于快速发布代码并保持竞争优势。Spinnaker更加强调使用Kubernetes应用程序,帮助IT团队快速将应用程序部署到任何Kubernetes(K8S、GKE、EKS、AKS)。以下是Spinnaker的一些重要功能。1、用于端到端部署自动化的SpinnakerpipelineSpinnaker提供了一个用于自动部署的端到端pipeline(如下图所示)。该工作流构建一致且可重复的部署,制作AMI或Docker镜像,从集群中找到k8s容器,部署它,修改集群组,并在k8s中运行容器。部署完成后,Spinnaker会实时检查并展示Kubernetes集群的健康状态。管道中的部署阶段可以配置为通过电子邮件、移动消息或Slack消息通知所有级别的利益相关者。2.内置部署策略开源Spinnaker提供了多种部署策略,如蓝绿部署、滚动部署、金丝雀部署等,降低部署到生产环境的风险。Spinnaker还与K8Spod自动缩放器交互,以确保在部署期间保持容量。开源Spinnaker提供的自动金丝雀分析(ACA)技术通过将先前版本的指标和日志与已部署的新版本的指标和日志进行比较,将更新部署到K8S生产服务器的风险降至最低。除此之外,Spinnaker还提供配置映射和机密的版本控制以及不可变的服务器部署。这使回滚能够保留以前使用的确切配置,并执行二进制文件。3.新工件的持续验证围绕开源Spinnaker有许多企业插件可用,它们扩展了免费工具的用例。例如,开源Spinnaker的分销合作伙伴OpsMx提供了一种企业级Spinnaker,它在日志和指标上使用AI/ML来检测新部署的Kubernetes应用程序的问题。如果检测到异常,Spinnaker可以回滚到新的应用程序。但在此之前,它确保先前的服务器组具有足够的大小。4.增强Kubernetes部署的安全性和合规性确保Kubernetes使用的安全性需要在整个软件开发生命周期(从编码到构建再到部署)的安全性和合规性安全门。例如,如果构建未通过冒烟测试(术语冒烟测试描述了在将代码更改嵌入产品的源代码树之前验证代码更改的过程),则可以在构建阶段使用安全门来使部署失败。同样,可以安装安全门来检查图像扫描是否已报告容器图像。开源Spinnaker允许安全经理在交付管道中安装安全门。Spinnaker已扩展为声明符合组织准则和行业标准(例如PCI-DSS、HIPAA和SOC2)的政策。相反,发布经理可以将部署日期和时间定义为中断策略的一部分。可能会有特定的高峰流量时间,应避免部署有停机风险的代码。部署窗口允许Pipeline确保K8S部署发生在这些高峰流量时区之外,并且不会影响客户体验。5.GitOps风格的部署在Spinnaker的帮助下,组织可以在Kubernetes集群中执行GitOps风格的部署。熟悉YAML的团队可以更改文件,Spinnaker可以配置为检测这些更改并自动将它们部署到选定的环境。结论毫无疑问,业务敏捷性可以通过采用云原生应用程序来实现,而Kubernetes将发挥核心作用。选择集成Kubernetes和Spinnaker的组织将比单独使用Kubernetes的组织更快地看到积极的结果。原标题:OvercomeChallengesofContinuousDeliveryforKubernetesWithSpinnaker,作者:DebasreePanda,AbhinayByrisetty
