最近,我已经开始写下我的演讲摘要,因为那些不感兴趣的人坐在45分钟的视频中或盯着幻灯片而没有得到太多上下文ð
这是一个适用于AWS Dev Day Hyderabad 2023,我谈到“用CDK8S简化您的Kubernetes基础架构” 。
kubernetes或cdk8s的CDK是一个开源CNCF项目,可帮助表示Kubernetes资源和应用程序为代码(不是yaml!)
您可以check out this link for the slides,录制是即将推出的!
在Kubernetes上工作?
你们中的许多人都在Kubernetes上工作,也许以不同的能力 - 建筑师,DevOps工程师,SRE,平台工程师,软件工程师等。无论我们告诉我们的朋友,家人甚至招聘人员,我们都需要说服他们多么努力是在整个CNCF景观中工作吗?
但是真正的问题是....
我们实际做什么?
这是所有轻松的东西,请不要亲自接受这个
您也可以与此ðð¼有关吗?
在Kubernetes上工作不必意味着变成YAML工程师(除非这成为“下一个大事”)
但现实是有...
...到处都是山药
它已成为Kubernetes世界的“通用语言”。我们使用的每个工具集,包括Helm,Kustomize,Gitops,Kubernetes操作员等
避免yamlð
但我在演讲中涵盖的内容不是 删除或摆脱YAML。老实说,这几乎是不可能的。它更多地是关于使用工具和框架来规避它或将其推在幕后。其中之一是 - kubernetes的CDK。
有用的内容
在30-40分钟内我只能覆盖这么多。如果您有兴趣了解更多信息,欢迎您检查一下。这是一本迷你书,以及具有所有代码的GitHub回购。
我认为您会发现它有用!
从基础编码到Infra-IS-Code
您可能已经使用了Terraform或AWS云形式。这些作为代码(IAC)类别属于基础架构,在其中编写配置以定义您的资源 - 无论是yaml还是JSON还是自定义模板语言。
在频谱的另一端,有AWS CDK或Pulumi等工具。这是您进入基础架构是代码区域的地方,配置为后座,代码占主导地位。
您好CDK8S!
以及CDK8进入图片的位置,因为它包含了Kubernetes应用程序的基础架构 IS 代码范式。我是Go开发人员,这就是我用于演示和代码样本的方法,但是CDK8S支持Python,Java和JavaScript。
最好的部分是您可以在任何地方使用它。它不是特定于AWS或任何其他提供商 - 它是开源CNCF项目。
演示时间!
我展示了如何使用CLI(cdk8s init go-app
)来引导GO CDK8S应用程序,定义一个Nginx应用程序(请参见下面的代码),将其转换为yaml清单(是的,我们无法摆脱它!) kubectl apply -f dist/
。
CDK8S组件
在我们继续前进之前,请先理解这些概念:
- 每个CDK8S应用程序都由组件的A tree 组成,也称为 constructs 。
- 在树的顶部是您所说的
App
。我们使用NewApp
函数创建它。 -
App
可以包含多个Chart
,我们使用NewChart
函数创建图表。 - 在该
Chart
中您将定义基本的构建块 - 在上面的示例中,我们定义了kubernetesDeployment
和Service
,但是它也可以是其他类型的构造(后面涵盖)
通过CDK8S+和自定义结构提高生产率
由于CDK8S是一个低级API,因此可能有点冗长,这就是 cdk8s plus 库中的地方。
现在查看直接来自CDK8S文档的示例 - 差异很明显。但这可能会根据语言而有所不同 - 此处的示例实际上是Nodejs。
这是一个示例:
不仅仅是代码和冗长的行,我认为要考虑的更重要的一点是抽象的水平。
cdk8s+提供更高的抽象:
- 这意味着在大多数情况下,您的代码行较少,
- 一个具有更好默认值的人体工程学API。
- 总体而言,精神超负荷较少。
作为开发人员,我们都知道如何提高生产力!
自定义结构
想象一下,您正在使用CDK8在Kubernetes上构建复杂的应用程序,并且公司中的许多团队都需要它 - 也许每个团队都有不同的配置。您可以以自定义构造的形式对其进行外部化并在整个公司中共享。
说实话,这与使用依赖关系或库一样,但这仍然非常强大。很棒的是,已经有一个叫做Constructs Hub的东西,该构造由AWS,社区以及其他提供商发布!
!演示时间,再次!
在此演示中:
- 我在Kubernetes上浏览了“ WordPress”部署,以证明CDK8S+ API的易用性和直觉
- 在相同的“ WordPress”部署的上下文中演示了自定义构造。
这是使用自定义“ WordPress”构造的样子:
与Kubernetes自定义资源定义(CRD)集成
然后我们进入了一个稍微高级的主题。您可以使用CDK8S库来表示本机Kubernetes对象,例如部署,服务等。但是在任何现实世界实现中,您很有可能使用自定义资源定义(CRD)。因此,如果您有现有的CRD,可以使用CDK8作为代码管理它们吗?
CRD和操作员的一个很好的例子是AWS Controllers for Kubernetes(或ACK)。通过ACK项目,您可以管理Kubernetes的AWS服务。
这只是Amazon RDS数据库的一个示例,但是对于Amazon DynamoDB表,Amazon S3存储桶或Amazon Elasticache群集甚至AWS lambda功能也是如此。 ACK项目为每种服务都有不同的控制器/操作员。当您创建ACK资源时,这些操作员会在AWS中创建和管理相应的服务所需的工作。
如何将CRD与CDK8一起使用?
使用CDK8S使用任何 crd:
- 第一步是通过将其指向CRD 来运行cdk8s导入。
- 这将导致API自动生成
- 使用这些API编写您的代码
- ...和照常业务 - 使用
cdk8s synth
为您的Kubernetes应用程序生成清单
是的,另一个演示!
这是一个简单的URL Shortener应用程序,它部署到Amazon EKS并使用DynamoDB作为数据库。这里有趣的部分是使用CDK8S
定义了应用程序和DynamoDB。CDK8S和AWSCDKðä
到目前为止,我们有一个要考虑的事情。我们在CDK8购买,能够以代码形式代表AWS资源和各自的Kubernetes应用程序。
但是,如果我们不想使用ACK怎么办。并坚持使用AWS CDK之类的AWS资源,但使用CDK8用于Kubernetes应用程序? CDK8很棒,AWS CDK很棒。那么是什么阻止我们一起使用它们?
用AWS CDK将应用程序部署到EK
这是使用唯一的 aws cdk将应用部署到Amazon EKS群集(请注意,这只是AWS CDK代码,不是 cdk8s) P>
addcdk8schart to recue! 这使生活更加轻松! 关键要点: 希望下次见到你!
kubectl
(但用编程方式)addCdk8sChart
方法就像CDK和CDK8S之间的桥梁-check out the CDK reference docs有关详细信息。
回顾 - 我们快要完成了!