亚马逊AWS官方博客

Amazon EKS Distro:Amazon EKS 所使用的 Kubernetes 发行版

我们的客户告诉我们,他们希望专注于为其客户构建创新的解决方案,而不是将精力耗费在管理 Kubernetes 基础架构的大量繁重工作上。这就是为何 Amazon Elastic Kubernetes Service (EKS)如此受欢迎的原因;我们为客户消除了管理 Kubernetes 的负担,而客户得以坐收益处。

然而,并非所有客户都选择使用 Amazon EKS。例如,他们或许有现有的基础设施投资、数据驻留要求或合规性义务,从而导致他们只能在本地运营 Kubernetes。这些处境下的客户告诉我们,他们花了很多精力来跟踪更新,找出兼容的 Kubernetes 版本以及复杂的底层组件矩阵,测试其兼容性,并跟上 Kubernetes 发布节奏的步伐,而 Kubernetes 发布频率很高,有可能是每隔三四个月一次。如果客户无法跟上测试和验证新版本的步伐,他们将面临突发性更改、版本兼容性问题以及运行缺乏关键安全补丁程序的不受支持的 Kubernetes 版本的风险。

在 AWS 提供 Amazon EKS 的过程中,我们学到了很多东西,并且对如何为 Kubernetes 提供操作安全性、稳定性和可靠性这一问题,有了深刻的认识。今天我们分享的是我们利用那些认知构建的 Amazon EKS Distro

EKS DistroAmazon EKS 部署的同一版本的 Kubernetes 的发行版,您可以使用该版本在选择的任意位置手动创建自己的 Kubernetes 集群。EKS Distro 可提供 Amazon EKS 所使用的可安装的开源 Kubernetes 版本和代码,包括依赖项和由 AWS 维护的修补程序。使用选择的集群创建和管理工具,您可以在 AWS 中的 Amazon Elastic Compute Cloud (EC2)上、其他云中以及您的本地硬件上创建 EKS Distro 集群。

EKS Distro 包括上游开源 Kubernetes 组件和第三方工具,包括创建集群所需的配置数据库、网络和存储组件。它们包括 Kubernetes 控制平面组件(kube-controller-manager、etcd 和 CoreDNS)和 Kubernetes 工作节点组件(kubelet、CNI 插件、CSI Sidecar 映像、Metrics Server 及 AWS-IAM-authenticator)。

构建集群
EKS Distro 存储库拥有您构建和创建 Kubernetes 集群所需的一切。该存储库包含 EKS Distro 的原始文档,它已构建,并且已在 https://distro.eks.amazonaws.com 发布。

要创建新集群,我将按照文档的这一部分进行操作。该指南介绍了如何使用开源工具 Kops 构建所有部件,并最终将集群部署到 AWS 上的某些 EC2 实例。titletitle除了 KOps 之外,EKS Distro 还可以与许多其他工具一起使用。您可以在文档的合作伙伴部分找到详细信息,并且许多合作伙伴今天都发布了博文,介绍了应如何使用他们的工具进行部署。

按照该指南的说明,在构建集群之前,我需要获取几个容器映像。我可以从 EKS Distro 容器存储库中获取容器,将其作为 tarball 下载,或者从头开始构建容器。我选择从头开始构建容器,然后按照 Build Guide (构建指南)进行操作。一小时后,我设法创建了 20 个容器,并将其推送到 Amazon 弹性容器注册表中。

该指南详细介绍了构建和部署阶段所需的几个先决条件。我按照指南进行操作并安装所有建议安装的工具。

接下来,根据指南,我在 EKS Distro 存储库的开发文件夹中找到 kops.sh 脚本。运行脚本后,它提示我输入完全限定的域名 (FQDN)。我提供的是 newsblog.thebeebs.net

此脚本可执行多项操作,包括在我的账户中创建 S3 存储桶以存储 Kops 所需的构件。此外,此脚本还会创建一个名为 newsblog.thebeebs.net.yaml 的文件。我对此文件进行编辑,并将容器映像 URL 替换为指向弹性容器注册表中我的映像的 URL。

我继续遵循指南进行操作,根据该指南,我现在应该运行一些 Kops 命令来创建我的集群。这些命令使用的是 newsblog.thebeebs.net.yaml 文件,该文件是上一个步骤的输出。

cluster_Name=newsblog.thebeebs.net
kops create -f ./$CLUSTER_NAME.yaml
kops create secret --name $CLUSTER_NAME sshpublickey admin -i ~/.ssh/id_rsa.pub
kops update cluster $CLUSTER_NAME --yes
kops validate cluster --wait 10m
cat << EOF > aws-iam-authenticator.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-iam-authenticator
  namespace: kube-system
  labels:
    k8s-app: aws-iam-authenticator
data:
  config.yaml: |
    clusterID: $CLUSTER_NAME
EOF

其中一个命令将创建一个名为 aws-iam-authenticator.yaml 的文件。我会将此文件应用于我的 kubernetes 集群,以便它可以与 aws-iam-authenticator 一起正常运作。

kubectl apply -f aws-iam-authenticator.yaml

现在,我可以通过使用 kubectl 列出所有命名空间,来验证我的 Kubernetes 集群是否正在使用 EKS Distro 映像。

kubectl get po --all-namespaces -o json | jq -r .items[].spec.containers[].image | sort

最后,我使用 Kops 并发出删除命令来删除我的集群。

kops delete -f ./newsblog.thebeebs.net.yaml --yes

更新
新版本的 EKS Distro 将在我们向 Amazon EKS 发布不久后发布。为可复制的构建提供了源代码,开源工具和设置,因此可以确保 EKS DistroAmazon EKS 部署的内容匹配。

注意事项
EKS Distro 支持使用与 Amazon EKS 相同的 Kubernetes 版本和小数点版本。EKS Distro 提供相同的上游 Kubernetes 版本,以及操作系统供应商已经测试并确认可与 Kubernetes 一起工作的依赖项。这意味着 EKS Distro 已经可以与常见的操作系统一起使用,例如 CentOS、Canonical Ubuntu、Red Hat Enterprise Linux 和 Suse 等。

定价和支持
EKS Distro 是一个开源项目,将免费分发。请在 GitHub 上与我们合作,以使其进一步优化。例如,如果您发现任何问题,请提交问题或创建拉取请求,我们将尽最大努力解决这些问题。合作伙伴将通过 Amazon 合作伙伴网络计划获得支持,通过合作伙伴采用 EKS Distro 的客户将获得这些提供商的支持。

下一步会发生什么?
2021 年,我们将推出 EKS Anywhere,它将提供一个可安装的软件包,用于在本地创建和操作 Kubernetes 集群,并将为集群生命周期支持提供自动化工具,它将使您能够集中备份、恢复、修补和升级生产集群,同时最大限度减少中断。EKS Anywhere 是基于 EKS Distro 创建集群的,因此您将与 Amazon EKS 保持版本一致。版本和工具的一致性将使支持成本降低,并使得您无需再使用多个工具来管理本地和 Amazon EKS 集群。

现已推出
EKS Distro 今天已可以下载,您可以从 GitHub 获取源代码和构建。为帮助您开始使用,请查看文档

祝大家部署快乐!

— Martin