用CDK8简化您的Kubernetes基础架构
#开源 #go #discuss #kubernetes

最近,我已经开始写下我的演讲摘要,因为那些不感兴趣的人坐在45分钟的视频中或盯着幻灯片而没有得到太多上下文ð

这是一个适用于AWS Dev Day Hyderabad 2023,我谈到“用CDK8S简化您的Kubernetes基础架构”

kubernetes或cdk8s的CDK是一个开源CNCF项目,可帮助表示Kubernetes资源和应用程序为代码(不是yaml!)

您可以check out this link for the slides,录制是即将推出的

Image description

在Kubernetes上工作?

你们中的许多人都在Kubernetes上工作,也许以不同的能力 - 建筑师,DevOps工程师,SRE,平台工程师,软件工程师等。无论我们告诉我们的朋友,家人甚至招聘人员,我们都需要说服他们多么努力是在整个CNCF景观中工作吗?

Image description

但是真正的问题是....

我们实际做什么?

这是所有轻松的东西,请不要亲自接受这个

Image description

您也可以与此ðð¼有关吗?

在Kubernetes上工作不必意味着变成YAML工程师(除非这成为“下一个大事”)

但现实是有...

...到处都是山药

它已成为Kubernetes世界的“通用语言”。我们使用的每个工具集,包括Helm,Kustomize,Gitops,Kubernetes操作员等

避免yamlð

但我在演讲中涵盖的内容不是 删除或摆脱YAML。老实说,这几乎是不可能的。它更多地是关于使用工具和框架来规避它或将其推在幕后。其中之一是 - kubernetes的CDK。

Image description

有用的内容

在30-40分钟内我只能覆盖这么多。如果您有兴趣了解更多信息,欢迎您检查一下。这是一本迷你书,以及具有所有代码的GitHub回购。

我认为您会发现它有用!

Image description

从基础编码到Infra-IS-Code

您可能已经使用了Terraform或AWS云形式。这些作为代码(IAC)类别属于基础架构,在其中编写配置以定义您的资源 - 无论是yaml还是JSON还是自定义模板语言。

在频谱的另一端,有AWS CDK或Pulumi等工具。这是您进入基础架构代码区域的地方,配置为后座,代码占主导地位。

Image description

您好CDK8S!

以及CDK8进入图片的位置,因为它包含了Kubernetes应用程序的基础架构 IS 代码范式。我是Go开发人员,这就是我用于演示和代码样本的方法,但是CDK8S支持Python,Java和JavaScript。

最好的部分是您可以在任何地方使用它。它不是特定于AWS或任何其他提供商 - 它是开源CNCF项目。

Image description

演示时间!

我展示了如何使用CLI(cdk8s init go-app)来引导GO CDK8S应用程序,定义一个Nginx应用程序(请参见下面的代码),将其转换为yaml清单(是的,我们无法摆脱它!) kubectl apply -f dist/

Image description

CDK8S组件

在我们继续前进之前,请先理解这些概念:

  1. 每个CDK8S应用程序都由组件的A tree 组成,也称为 constructs
  2. 在树的顶部是您所说的App。我们使用NewApp函数创建它。
  3. App可以包含多个Chart,我们使用NewChart函数创建图表。
  4. 在该Chart中您将定义基本的构建块 - 在上面的示例中,我们定义了kubernetes DeploymentService,但是它也可以是其他类型的构造(后面涵盖)

Image description

通过CDK8S+和自定义结构提高生产率

由于CDK8S是一个低级API,因此可能有点冗长,这就是 cdk8s plus 库中的地方。

现在查看直接来自CDK8S文档的示例 - 差异很明显。但这可能会根据语言而有所不同 - 此处的示例实际上是Nodejs。

Image description

这是一个示例:

Image description

不仅仅是代码和冗长的行,我认为要考虑的更重要的一点是抽象的水平。

cdk8s+提供更高的抽象:

  • 这意味着在大多数情况下,您的代码行较少,
  • 一个具有更好默认值的人体工程学API。
  • 总体而言,精神超负荷较少。

作为开发人员,我们都知道如何提高生产力!

自定义结构

想象一下,您正在使用CDK8在Kubernetes上构建复杂的应用程序,并且公司中的许多团队都需要它 - 也许每个团队都有不同的配置。您可以以自定义构造的形式对其进行外部化并在整个公司中共享。

说实话,这与使用依赖关系或库一样,但这仍然非常强大。很棒的是,已经有一个叫做Constructs Hub的东西,该构造由AWS,社区以及其他提供商发布!

演示时间,再次!

在此演示中:

  • 我在Kubernetes上浏览了“ WordPress”部署,以证明CDK8S+ API的易用性和直觉
  • 在相同的“ WordPress”部署的上下文中演示了自定义构造。

这是使用自定义“ WordPress”构造的样子:

Image description

与Kubernetes自定义资源定义(CRD)集成

然后我们进入了一个稍微高级的主题。您可以使用CDK8S库来表示本机Kubernetes对象,例如部署,服务等。但是在任何现实世界实现中,您很有可能使用自定义资源定义(CRD)。因此,如果您有现有的CRD,可以使用CDK8作为代码管理它们吗?

CRD和操作员的一个很好的例子是AWS Controllers for Kubernetes(或ACK)。通过ACK项目,您可以管理Kubernetes的AWS服务。

Image description

这只是Amazon RDS数据库的一个示例,但是对于Amazon DynamoDB表,Amazon S3存储桶或Amazon Elasticache群集甚至AWS lambda功能也是如此。 ACK项目为每种服务都有不同的控制器/操作员。当您创建ACK资源时,这些操作员会在AWS中创建和管理相应的服务所需的工作。

如何将CRD与CDK8一起使用?

使用CDK8S使用任何 crd:

  1. 第一步是通过将其指向CRD
  2. 来运行cdk8s导入。
  3. 这将导致API自动生成
  4. 使用这些API编写您的代码
  5. ...和照常业务 - 使用cdk8s synth为您的Kubernetes应用程序生成清单

Image description

是的,另一个演示!

这是一个简单的URL Shortener应用程序,它部署到Amazon EKS并使用DynamoDB作为数据库。这里有趣的部分是使用CDK8S

定义了应用程序和DynamoDB。

Image description

CDK8S和AWSCDKðä

到目前为止,我们有一个要考虑的事情。我们在CDK8购买,能够以代码形式代表AWS资源和各自的Kubernetes应用程序。

但是,如果我们不想使用ACK怎么办。并坚持使用AWS CDK之类的AWS资源,但使用CDK8用于Kubernetes应用程序? CDK8很棒,AWS CDK很棒。那么是什么阻止我们一起使用它们?

Image description

用AWS CDK将应用程序部署到EK

这是使用唯一的 aws cdk将应用部署到Amazon EKS群集(请注意,这只是AWS CDK代码,不是 cdk8s)

  • 首先,您声明了Kubernetes部署,
  • 然后是Kubernetes服务,
  • 最后调用在EKS群集对象上声明的addManifest函数 - 这等同于调用kubectl(但用编程方式)

Image description

addcdk8schart to recue!

addCdk8sChart方法就像CDK和CDK8S之间的桥梁-check out the CDK reference docs有关详细信息。

这使生活更加轻松!

Image description

回顾 - 我们快要完成了!

关键要点:

  • 它的不是 删除 yaml-它关于减少它并拥抱基础结构 is 代码范式。
  • 将CDK8与常规编程语言一起使用,并利用相关工具和最佳实践(测试,OOP等)。
  • 用CDK8S Plus优化 share reuse 常见组件作为构造, extend crds
  • 将CDK8与AWS CDK或现有的工作流/实践(例如Gitops,甚至是Helm图表)相结合。

希望下次见到你!

Image description