亚马逊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 服务器投放。
这就是在 Amazon Elastic Kubernetes Service 上运行的 Windows 容器。有关更多详细信息,请查看该文档。Amazon EKS Windows 容器支持在提供 Amazon EKS 的所有区域中提供,定价详细信息可以在此处找到。
我们为 Amazon Elastic Kubernetes Service 制定了很长的路线图,但是我们渴望获得您的反馈,并将使用它来推动我们确定优先事项的流程。请熟悉此新功能并让我们知道您的想法!