亚马逊AWS官方博客

Amazon EKS Windows 容器支持现已正式推出

今年 3 月,我们推出了基于 Amazon Elastic Kubernetes Service 的 Windows 容器支持预览版,并邀请客户进行体验,提供反馈。我们根据反馈经过了几个月的产品优化,今天,我很高兴地宣布,Windows 容器支持现已正式发布。

许多开发团队都要构建并支持可在 Windows 服务器上运行的应用程序,随着此版本的推出,他们现在可将这些应用程序与 Linux 应用程序一起部署到 Kubernetes 中。该功能将在系统日志记录、性能监控和代码部署管道方面提供更高的一致性。

Amazon Elastic Kubernetes Service 简化了构建、保护、运行和维护 Kubernetes 集群的过程,并使组织专注于构建应用程序,而不是运行 Kubernetes。令我们感到自豪的是,我们是首个在 Kubernetes 上正式发布 Windows 容器的云提供商,并期待客户在其 Windows 和 Linux 工作负载中利用 Kubernetes 的业务优势。

为了向您展示该功能的工作原理,我需要一个 Amazon Elastic Kubernetes Service 集群。我将创建一个新集群,但此集群将与任何使用 Kubernetes 版本 1.14 或更高版本的集群配合使用。配置好此集群后,我将添加一些新的 Windows 节点并部署一个 Windows 应用程序。最后,我将测试该应用程序,以确保它按预期运行。

设置集群的最简单方法是使用 eksctl,这是适用于 EKS 的官方 CLI 工具。以下命令将创建一个名为 demo-windows-cluster 的集群,并向该集群添加两个 Linux 节点。目前,要支持 Windows 节点和 pod 网络,至少需要一个 Linux 节点,不过,为实现高可用性,我选择了两个节点,我们建议您也这样做。

eksctl create cluster \
--name demo-windows-cluster \
--version 1.14 \
--nodegroup-name standard-workers \
--node-type t3.medium \
--nodes 2 \
--nodes-min 1 \
--nodes-max 3 \
--node-ami auto

eksctl 版本 0.7 开始,新增了一个名为 install-vpc-controllers 的实用程序。此实用程序可将所需的 VPC Resource Controller 和 VPC Admission Webhook 安装到集群中。这些组件在 Linux 节点上运行,负责为 Windows 节点上的传入 pod 启用网络。 要使用该工具,我们运行以下命令。

eksctl utils install-vpc-controllers --name demo-windows-cluster --approve

如果您不希望使用 eksctl,我们还在该文档中提供了有关如何运行 PowerShell 或 Bash 脚本以实现相同结果的指南。

接下来,我需要向集群添加一些 Windows 节点。如果您使用 eksctl 创建集群,则可以使用以下命令。如果您使用的是现有集群,请参阅该文档,了解如何创建 Windows 节点组并将其连接到集群的说明。

eksctl create nodegroup \
--region us-west-2 \
--cluster demo-windows-cluster \
--version 1.14 \
--name windows-ng \
--node-type t3.medium \
--nodes 3 \
--nodes-min 1 \
--nodes-max 4 \
--node-ami-family WindowsServer2019FullContainer \
--node-ami ami-0f85de0441a8dcf46

可以通过查询 AWS SSM Parameter Store 找到您所在区域的最新 Windows AMI ID。可以在 Amazon EKS 文档中找到相关说明。

现在我已启动并运行这些节点,可以部署示例应用程序了。我将使用 AWS 容器路线图 GitHub 存储库中的 YAML 文件。该文件将配置一个应用程序,该应用程序由一个运行 IIS 的容器组成,而 IIS 又托管一个基本 HTML 页面。

kubectl apply -f https://raw.githubusercontent.com/aws/containers-roadmap/master/preview-programs/eks-windows-preview/windows-server-IIS.yaml

这些是 Windows 容器,通常比 Linux 容器稍大,因此下载和启动需要更长的时间。我通过运行以下命令监控部署进度。

kubectl get pods -o wide --watch

我等待了大约 5 分钟,直到 pod 转变为“正在运行”状态。然后我执行以下命令,该命令将连接到 pod 并在容器内初始化 PowerShell 会话。windows-server-ii -66bf9745b-xsbsx 属性是 pod 的名称,如果您按照此过程执行操作,您的名称将会有所不同。

kubectl exec -it windows-server-iis-66bf9745b-xsbsx powershell

连接到 PowerShell 会话后,便可以像在容器中使用终端一样执行 PowerShell。因此,如果我们运行以下命令,应该会返回一些有关新闻博客的信息

Invoke-WebRequest -Uri https://aws.amazon.com/blogs/aws/ -UseBasicParsing

要退出 PowerShell 会话,我键入 exit,然后我会返回终端在终端中,我可以检查示例应用程序部署的服务,我键入以下命令:

kubectl get svc windows-server-iis-service

这将返回用于描述服务的以下输出:

NAME				TYPE 		CLUSTER-IP 	EXTERNAL-IP 				PORT(S) 	AGE
windows-server-iis-service 	LoadBalancer 	xx.xx.xxx.xxx 	unique.us-west-2.elb.amazonaws.com 	80:32750/TCP 	54s

External IP 应是负载均衡器的地址。如果我在浏览器中键入此 URL 并附加 /default.html,将加载一个由示例应用程序部署创建的 HTML 页面。此页面将由我部署的一个 Windows 容器中的 IIS 服务器投放。

显示 Hello EKS 的网站

这就是在 Amazon Elastic Kubernetes Service 上运行的 Windows 容器。有关更多详细信息,请查看该文档Amazon EKS Windows 容器支持在提供 Amazon EKS 的所有区域中提供,定价详细信息可以在此处找到。

我们为 Amazon Elastic Kubernetes Service 制定了很长的路线图,但是我们渴望获得您的反馈,并将使用它来推动我们确定优先事项的流程。请熟悉此新功能并让我们知道您的想法!