IaC 的新时代:使用 cdk8s 有效地管理 Kubernetes

云计算
re:Invent
0
0
## 视频 <video src="https://dev-media.amazoncloud.cn/30-LibaiGenerate/31-LiBaiRebrandingVideo/BOA310-New_era_of_IaC__Effective_Kubernetes_management_with_cdk8s-LBrebrandingWCaptionCN.mp4" class="bytemdVideo" controls="controls"></video> ## 导读 加入本论坛,了解如何使用 Kubernetes 云开发工具包 (cdk8s) 编写安全且架构良好的 Kubernete 应用程序。观看如何使用 AI 代码助手 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 帮助编写用于根据组织策略验证清单的 cdk8s 代码的演示,并彻底改变部署过程,促进开发团队之间的一致性和效率。在本论坛中,请参阅 cdk8s 和 CodeWhisperer 的实际功能,避免错误配置和代价高昂的错误。 ## 演讲精华 <font color = "grey">以下是小编为您整理的本次演讲的精华,共1800字,阅读时间大约是9分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。</font> Victor,作为亚马逊云科技的开发者倡导者,在Raven 2023大会上开始了他的演讲。在进入亚马逊云科技之前,他拥有超过10年的开发者工程师经验,主要负责部署Kubernetes集群。在他的职业生涯中,他曾负责在多个客户环境中部署超过100个生产级的Kubernetes集群。这样的丰富经验使他在开发团队中备受推崇,经常有人向他请教如何利用他们偏好的编程语言(如TypeScript和Golang)在Kubernetes中进行配置和管理部署。 为了回答这个问题,Victor介绍了他的合作伙伴Mike。Mike在加入亚马逊云科技担任解决方案架构师之前,曾是一名独立的开发者。有一次,一位客户请他将自己的Web应用程序的后端部署到Kubernetes集群中,以便利用Kubernetes的自定义功能来处理不可预测的流量高峰。尽管Mike之前对容器和Kubernetes有一些实际操作经验,但主要是在Minikube和Docker Desktop上进行的,他认为这将是一个简单直接的过程。 然而,当他获得访问生产集群的权限后,他发现创建YAML模板和Manifests相当具有挑战性。特别地,网络配置不当和基于角色的访问控制使他无法访问集群。这阻止了他部署客户的应用程序或进行任何更改,迫使他依赖客户的DevOps工程师来恢复访问权限。Mike认为,如果当时有像他们将要讨论的工具,那对于刚接触Kubernetes的开发者们来说将会非常有帮助。 在正式开始演讲之前,Victor和Mike向观众了解了他们对于Kubernetes的经验水平。他们让大家扫描二维码,表明他们从未尝试过Kubernetes,正在开发中测试它,在生产中运行它,还是已经在客户环境中运营多个生产级的Kubernetes集群。 在经过一系列实时投票的技术难题之后,维克多根据亚马逊云科技的客户需求分享了一些关于Kubernetes采用的行业发展趋势。他发现,相较于2021年,2022年的发展取得了显著进步——许多公司决定部署超过50个集群,而在2021年,大部分公司的运行集群数量还不足5个。尤其值得注意的是,维克多发现,根据亚马逊云科技客户的数据显示,如今部署5个或更少集群的公司比例已经降至少于12%,这表明Kubernetes的使用正在迅速增长。 接着,维克多探讨了为何如此多的企业选择使用Kubernetes来部署容器的原因。他认为,起初,在笔记本电脑或EC2实例上运行容器似乎非常简单。但随着网络的添加和存储的集成,一个容器管理系统变得必不可少。Kubernetes已经成为了一个流行且拥有庞大社区的开源选项。 维克多提到,他曾与一位在零售行业中运行超过500个生产中Kubernetes集群的亚马逊云科技客户交流。他们利用Kubernetes在其内部、边缘和云环境中实现可移植性。然而,尽管创建许多Kubernetes集群和微服务非常简单,但这位客户在面对如何在这些集群中高效管理所有Kubernetes对象方面仍面临挑战。 这就凸显了YAML的重要性——正如维克多所强调,YAML已成为管理Kubernetes清单的事实上标准。他甚至开玩笑地说,他“有时候真的喜欢YAML”,因为这种格式易于人类阅读,他可以打开文件来了解发生了什么。YAML的声明性特性也使得简单描述所需副本数量等状态变得容易,而Kubernetes会自动协调以匹配该状态。 然而,随着复杂性增加,YAML也存在一些缺点。它的开发不符合软件工程的最佳实践,如DRY(不要重复自己)原则,导致清单中存在重复和粘贴。这使得在开发、预发布和生产等环境中的YAML管理变得更加困难。对于管理众多集群的客户来说,这种情况尤为严重。 最后,维克多再次审视了这个问题——开发者如何在不使用他们熟悉的语言(如TypeScript、Golang和Java)的情况下管理Kubernetes部署?他和迈克将展示如何使用CDK for Kubernetes(即CDK8s)的解决方案。 CDK8s,作为一个开源框架,使得将Kubernetes资源作为可重用的组件进行建模成为了可能。这样一来,便不再需要复制和粘贴YAML模板。基础设施的产物可以被当作软件包进行存储,并从代码中引用。目前,CDK8s支持Python、TypeScript、Java和Go四种最受欢迎的Kubernetes开发语言。" "要使用CDK8s,你无需在Kubernetes集群中安装任何东西。CDK8s命令行工具在本地运行并生成YAML清单作为输出。一位亚马逊云科技的客户通过在CDK8s上标准化他们的Kubernetes开发,为跨团队的开发者提供了一致的体验,减少了YAML蔓延的可能性。" "迈克详细解释了一个流程,首先你需要安装CDK8s命令行工具并初始化一个项目,这个项目会生成基本的代码模板。然后你编写表示Kubernetes对象的源代码。最后,你可以使用命令行工具根据源代码合成实际的YAML清单,然后将其应用于你的集群。" "CDK8s的一个关键好处是定义组件的能力。例如,你可以创建一个基础部署,然后修补更改,如修改副本计数以适应不同的环境。这避免了在不同环境中重复。" "CDK8s+在CDK8s的基础上提供了更高级别的抽象,具有更丰富的API和更少的代码。例如,使用CDK8s+,你只需要指定容器镜像——其他参数,如pod标签、选择器、安全上下文、资源限制和亲和规则都可以自动生成。" "一位亚马逊云科技的客户利用CDK8s+使其前端开发者能够将他们的人机界面服务部署到Kubernetes中。开发者无需学习YAML的细节,可以使用熟悉的TypeScript结构来管理部署。" "迈克提出了如何在Kubernetes清单中管理亚马逊云科技资源(如RDS或SQS)的问题。虽然可以将CDK8s与亚马逊云科技CDK集成,但更简单的方法是使用亚马逊云科技Kubernetes控制器(ACK)。ACK允许直接在Kubernetes中声明亚马逊云科技资源,而ACK控制器处理与亚马逊云科技API的沟通。这使得你的Kubernetes集群成为容器和亚马逊云科技基础设施的唯一信息来源。一位亚马逊云科技的客户使用ACK来跨越其Kubernetes集群统一亚马逊云科技资源的配置和权限,确保一致性。 亚马逊云科技的ACK(Amazon Web Services Cloud Control)是一个开源项目,支持超过30种常用于Kubernetes的服务,如数据库、存储、消息传递、安全和可观察性。开发者通过使用CRDs(自定义资源定义)来编写表示亚马逊云科技资源的Kubernetes清单。应用这些清单会导致ACK控制器在亚马逊云科技中调配资源。值得注意的是,ACK直接与亚马逊云科技API交互,而不是通过CloudFormation。 此外,ACK可以与CDK8s(Amazon Web Services Cloud Development Kit for Kubernetes)集成。在将ACK控制器安装到您的集群中后,您需要将CRDs(自定义资源定义)导入到您的CDK8s项目中。然后,您可以在CDK8s代码中与Kubernetes对象一起定义亚马逊云科技资源。 接下来,我们将介绍亚马逊云科技的CodeWhisper,它使用AI根据上下文和纯英语注释生成源代码。CodeWhisper集成到您的IDE(集成开发环境)中,并持续分析您的代码,建议逐行的补全或者甚至整个函数。用户可以选择完全接受、逐字接受或选择替代建议。重要的是,在接受之前,应始终审查生成的代码。 一位使用CodeWhisler的亚马逊云科技客户发现,它将开发人员编写基础设施代码的时间减少了50%以上,使他们能够专注于更高的价值应用程序逻辑。 CodeWhisper还提供安全扫描,以标记受支持的像Java和Python这样的语言中的漏洞。并且它可以检测类似于开源库的代码,以遵守组织政策。 为了展示CodeWhisper的实际效果,我们将使用CDK8s(Amazon Web Services Cloud Development Kit for Kubernetes)、CDK8s+和ACK(Amazon Web Services Cloud Control)来部署一个具有缓存和RDS(关系数据服务)后台的示例Web应用程序。首先,Mike展示了由CLI(命令行接口)生成的CDK8s项目起始代码,包括对CDK8s和CDK8s+库的导入。迄今为止,唯一编写的代码是定义了一个名为'demo'的单个Kubernetes命名空间和一个用于存储RDS凭据的密钥。 检查集群后,Mike确认除了'demo'命名空间和用于存储RDS凭据的密钥之外,没有其他现有的Kubernetes资源。他还证实了已经在一个单独的'ack-system'命名空间中安装了亚马逊云科技RDS的ACK控制器。 麦克开始使用CDK8s定义RDS实例,采纳了CodeWhisper的部分建议,但将DB引擎定制为Postgres 14.2,实例大小为20GB,并设置了凭据。他为高可用性启用了多可用区部署。在定义了数据库实例后,麦可注意到,随着环境的改变,CodeWhisper的性能有所提高——其对诸如配置映射等相关对象的建议变得更加相关。为了允许从pod连接到RDS,麦可创建了一个配置映射和三个fieldRef对象来导出连接详细信息。在定义了RDS实例后,麦克继续构建Kubernetes应用程序。维克多用CDK8s+部署缓存层,虽然仍有一些定制,如容器镜像,但他更依赖于CodeWhisper的建议。他定义了0.5 CPU的资源请求、256 MiB内存的限制、1 CPU的限制以及512 MiB内存的限制、副本数为2、用于分散缓存实例的pod反亲和性以及一个用于内部暴露缓存的ClusterIP服务。维克多在构建Kubernetes应用程序时,再次利用了CodeWhisper的建议,但调整了某些参数,如端口号6000和环境变量以连接到缓存。他启用了Web和缓存实例之间的亲和性以减少网络延迟。网络策略限制了层级之间的流量。他用LoadBalancer服务暴露了Web层。通过在CDK8s中建模应用程序,维克多可以使用kubectl应用生成的清单,验证是否正在创建RDS实例。为了展示缩放功能,他然后通过Helm添加了集群自动缩放器,并为Web部署配置了HorizontalPodAutoscaler,从而根据平均CPU利用率将垂直和水平缩放从2扩展到100个pod副本。总的来说,麦克强调CDK8s和CDK8s+如何使我们能够在熟悉的编程语言中定义Kubernetes应用程序,避免重复YAML。ACK将Amazon Web Services资源集成到Kubernetes管理流程中。CodeWhisper使用AI加速基础设施即代码的创作。这些技术共同提供了有效的Kubernetes管理和部署解决方案。 这一大幅扩充的描述包含了更多的客户使用案例以及来自视频字幕的详细资料,以便提供全面的概述。如果您需要我对摘要进行修改、缩减或进一步扩展,请告诉我。 **下面是一些演讲现场的精彩瞬间:** 领导者通过Quadrant Whisper向观众展示如何配置Kubernetes部署,包括定义容器镜像、端口、环境变量、副本和网络策略等方面。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA310-New_era_of_IaC__Effective_Kubernetes_management_with_cdk8s/images/rebranded/BOA310-New_era_of_IaC__Effective_Kubernetes_management_with_cdk8s_0.png) 在演示过程中,演讲者展示了如何将繁琐的YAML配置通过CDK8s进行优化。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA310-New_era_of_IaC__Effective_Kubernetes_management_with_cdk8s/images/rebranded/BOA310-New_era_of_IaC__Effective_Kubernetes_management_with_cdk8s_1.png) 同时,演讲者也详细解释了Whisper AI如何根据应用程序需求生成合理的Kubernetes YAML配置建议。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA310-New_era_of_IaC__Effective_Kubernetes_management_with_cdk8s/images/rebranded/BOA310-New_era_of_IaC__Effective_Kubernetes_management_with_cdk8s_2.png) 此外,演讲者还强调了typescript代码在yaml清单文件中的应用,以及web层和缓存层之间的配置差异。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA310-New_era_of_IaC__Effective_Kubernetes_management_with_cdk8s/images/rebranded/BOA310-New_era_of_IaC__Effective_Kubernetes_management_with_cdk8s_3.png) 在领导者对应用基础设施更改后进行核查时,他们发现RDS数据库的状态正按照预期进行创建。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA310-New_era_of_IaC__Effective_Kubernetes_management_with_cdk8s/images/rebranded/BOA310-New_era_of_IaC__Effective_Kubernetes_management_with_cdk8s_4.png) 亚马逊云科技的Kubernetes控制器使得在Kubernetes清单中定义亚马逊云科技资源变得轻松,从而让用户能够轻松部署使用亚马逊云科技服务的容器化应用程序。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA310-New_era_of_IaC__Effective_Kubernetes_management_with_cdk8s/images/rebranded/BOA310-New_era_of_IaC__Effective_Kubernetes_management_with_cdk8s_5.png) ## 总结 演讲者探讨了开发者如何利用熟悉的编程语言如Python和TypeScript等,而非YAML,来配置和管理Kubernetes部署。他们推荐使用了Kubernetes的CDK(自定义开发工具包),这是一个开源框架,可以将Kubernetes资源构建为可重复使用的代码组件。通过CDK for Kubernetes,可以从代码中生成适用于集群的YAML清单。同时,他们也展示了CDK for Kubernetes Plus,这个库提供了更丰富的API和Kubernetes对象的抽象,旨在减少复杂度。 此外,他们还介绍了亚马逊云科技的Controllers for Kubernetes,该技术允许在Kubernetes集群内直接管理亚马逊云科技的资源。最后,他们展示了[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail),这是一项基于上下文和注释提供代码建议的AI服务,有助于减少冗余。通过这些工具,开发者可以用自己喜欢的语言将基础设施作为代码来管理Kubernetes和亚马逊云科技。 ## 演讲原文 ## 想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站! [2023亚马逊云科技re:Invent全球大会 - 官方网站](https://webinar.amazoncloud.cn/reInvent2023/?s=8739&smid=19458 "2023亚马逊云科技re:Invent全球大会 - 官方网站") [点击此处](https://aws.amazon.com/cn/new/?trk=6dd7cc20-6afa-4abf-9359-2d6976ff9600&trk=cndc-detail "点击此处"),一键获取亚马逊云科技全球最新产品/服务资讯! [点击此处](https://www.amazonaws.cn/new/?trk=2ab098aa-0793-48b1-85e6-a9d261bd8cd4&trk=cndc-detail "点击此处"),一键获取亚马逊云科技中国区最新产品/服务资讯! ## 即刻注册亚马逊云科技账户,开启云端之旅! [【免费】亚马逊云科技“100 余种核心云服务产品免费试用”](https://aws.amazon.com/cn/campaigns/freecenter/?trk=f079813d-3a13-4a50-b67b-e31d930f36a4&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技“100 余种核心云服务产品免费试用“") [【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”](https://www.amazonaws.cn/campaign/CloudService/?trk=2cdb6245-f491-42bc-b931-c1693fe92be1&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用“")
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭