将您的Kubernetes基础设施编写为Go代码-将cdk8s与AWSCDK结合使用


在较早的博文中,您看到了如何将cdk8s与AWS控制器用于Kubernetes(也称为ACK),这要归功于您可以使用cdk8s!导入现有的Kubernetes自定义资源定义。这使得DynamoDB通过使用cdk8sKubernetes与客户端应用程序一起部署成为可能。

但是,如果您继续将AWSCDK用于AWS基础设施并利用这种能力cdk8s(和cdk8s-plus!)使用常规代码定义Kubernetes资源会怎么样?由于AWSEKS模块和cdk8s之间的本地集成
,您可以两全其美!

这篇博文的目的是通过几个例子来证明这一点。在转向完整的应用程序堆栈(包括DynamoDB等)之前,我们将从一个简单的(基于nginx的)示例开始。两者都将使用Go编程语言,该语言在AWSCDK和cdk8s中得到了很好的支持。

本博客中讨论的所有代码都可以在这个GitHub存储库中找到

先决条件
要逐步执行操作,除了AWS帐户之外,您还需要以下CLI-AWSCLI、cdk8sCLI和kubectl。此外,如果您还没有安装AWSCDK、Go编程语言(v1.16或更高版本)以及Docker,请不要忘记安装它们。

在EKS上使用Nginx保持简单
与生活中的大多数事情一样,有两种方法-简单的方法或困难的方法;)你会看到这两种方法!让我们先尝试一下,看看它们是如何工作的,然后再看看代码。

系统将提示您确认。执行此操作后,该过程将开始-这将需要一些时间,因为将创建大量AWS资源,包括VPC、EKS集群等。

请随时检查AWSCloudFormation控制台以跟踪进度。

该过程完成后,您需要使用连接到EKS集群kubectl。此过程所需的命令将作为该cdkdeploy过程的结果(在终端中)可用,或者您可以参考AWSCloudFormation堆栈的输出部分。

最后,为了在EKS中创建它,我们调用AddManifest(将其视为的编程等效项kubectlapply)。这可行,但这种方法存在一些缺陷:

我们无法从Go这种强类型语言中获益。那是因为API是松散类型的,多亏了map[string]interface{}无处不在。这使得它很容易出错(我也犯了一些错误!)
冗长也很明显。似乎我们正在写入YAML-Go没有太大的改进!
有没有更好的办法..?
让我们看看第二个函数deployNginxUsingCDK8s——从名字上看,我们使用的很明显cdk8s,而不仅仅是CDK)

如果您使用过cdk8s(和Go)或阅读过我之前关于此主题的一些博客,这应该看起来很熟悉——一个强类型、紧凑且富有表现力的API!我什至不需要向您介绍它,因为它非常易读——我们使用它cdk8s-plus来创建NginxDeployment、添加容器信息并最终通过a公开它,Service以便我们可以从EKS外部访问Nginx。

这是一个足够简单的示例,可以帮助找出两种方法之间的区别。下一个场景是不同的——除了EKS集群之外,它还有DynamoDB以及将部署到EKS的URL缩短器应用程序。

端到端示例:DynamoDB以及EKS上的应用程序
我们不会从头开始创建新的EKS集群,而是重新使用作为上一个示例的结果创建的现有集群-这是一个了解如何在CDK代码中引用现有EKS集群的好机会。正如预期的那样,我们也需要创建DynamoDB表。

本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;

2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;

3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;

4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;

5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/293199.html

(0)
上一篇 2022年11月16日
下一篇 2022年11月16日

发表回复

登录后才能评论