亚马逊AWS官方博客

OpenSource | 在AWS上运行最新的Kubernetes

早期的一篇博文中,我介绍了如何使用 kops 在 AWS 上设置 Kubernetes 集群。默认情况下,kops create cluster 命令会从稳定的 kops 渠道中选择默认的 Kubernetes 版本,这适用于多数开发人员。如果您需要特定版本,可以使用 --kubernetes-version 选项指定。但是,如果您想使用 kops 创建一个使用 Kubernetes 中近期合并的 PR 的版本,该怎么操作呢?(或许您也像我一样,等不及完成整个测试周期,来让 kops 在渠道中为此提供支持,而是想立即试用此功能!)这篇由 Micah Hausler 所写的客座文章说明了如何通过 Kubernetes 的开发版本,来使用 kops 运行您自己的集群。

– Arun


kops 是在 AWS 上创建、运行和管理 Kubernetes 集群的最简单的工具之一。您可以按照 Arun 早期的一篇博文 Manage Kubernetes Clusters on AWS Using Kops (在 AWS 上使用 Kops 管理 Kubernetes 集群) 中的说明,轻松为已发布的 Kubernetes 版本创建集群。在本文中,我们将展示如何创建运行 Kubernetes 开发版本的集群。kops 声明了其官方支持的 Kubernetes 版本,截至本文发布时,受支持的最新版本是 Kubernetes 1.8.4。本文中的示例使用的 Kubernetes 版本全都受 kops 支持,因此建议您只将这些版本用于开发、原型设计和测试。

您必须要有 kopskubectlgsutilAWS 命令行界面,才能尝试执行示例操作。

背景 – 版本二进制

使用 kops 创建集群时,您可以选择指定 kops 支持的 Kubernetes 版本,也可以向 kops 提供 Kubernetes 二进制文件所在的 HTTP URL 地址。

Kubernetes 发布团队将版本二进制文件放在了位于以下位置的 Google 云端存储存储桶“kubernetes-releases”中:https://storage.googleapis.com/kubernetes-release/release/

您可以使用 gsutil 命令行工具验证特定路径中的所有必需二进制文件。(URL 的“https://storage.googleapis.com/”将会替换为“gs://”)

gsutil ls gs://kubernetes-release/release/v1.9.0/

每个指向 Kubernetes 的 Pull Request 都会经过 kops 测试,并在 Github 状态中显示为“pull-kubernetes-e2e-kops-aws”测试。

单击 kops 测试的“详细信息”后,您会看到测试输出以及指定 Pull Request 的具体提交版本。

本测试所用的 Kubernetes 二进制文件也存储在名为“kubernetes-release-pull”的 Google 云端存储存储桶中。如果您通过搜索 kops 测试的原始版本日志来查找版本字符串,就会发现版本二进制文件已上传至以下位置:

gs://kubernetes-release-pull/ci/pull-kubernetes-e2e-kops-aws/<version>

因此,对于 pull request #56759,您可以将 kops 中的 Kubernetes 版本设置为 URL

https://storage.googleapis.com/kubernetes-release-pull/ci/pull-kubernetes-e2e-kops-aws/v1.10.0-alpha.1.84+dd628f15f46a9c

如果您对使用 Kubernetes 的自定义版本和将二进制文件上传至 S3 感兴趣,请参阅 kops 文档

创建集群

您必须要有相应的 AWS 权限,才能创建集群。(如果您使用的不是跨账户角色,请设置环境变量 AWS_SDK_LOAD_CONFIG=1) 参阅 kops 文档,了解如何利用必要的 IAM 权限创建 AWS 用户。IAM 权限的简短列表如下所示:

AmazonEC2FullAccess
AmazonRoute53FullAccess
AmazonS3FullAccess
IAMFullAccess
AmazonVPCFullAccess

拥有具有相应权限的用户后,您就可以创建集群了。您需要为集群命名,并需要有 kops 存储声明所需的 S3 存储桶,以及您要在其中创建集群的 AWS 区域和可用区。下列示例使用 us-east-1 和 Kubernetes 1.9.0。

export CLUSTER_NAME="example.cluster.k8s.local"
export KUBERNETES_VERSION="https://storage.googleapis.com/kubernetes-release/release/v1.9.0/"
export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:-us-east-1}
export AWS_AVAILABILITY_ZONES="$(aws ec2 describe-availability-zones --query 'AvailabilityZones[].ZoneName' --output text | awk -v OFS="," '$1=$1')"
export S3_BUCKET=${S3_BUCKET:-kops-state-store-$(cat /dev/random | LC_ALL=C tr -dc "[:alpha:]" | tr '[:upper:]' '[:lower:]' | head -c 32)}
export KOPS_STATE_STORE=s3://$S3_BUCKET

如果您要为 kops 使用新的 S3 存储桶,则需要先创建:

aws s3api create-bucket \
 --bucket $S3_BUCKET \
 --create-bucket-configuration LocationConstraint=$AWS_DEFAULT_REGION

现在,您可以创建集群了!创建集群时有很多选项可供选择,请查看“kops create cluster -h”的帮助输出,了解可用的选项。

kops create cluster \
 --name $CLUSTER_NAME \
 --zones $AWS_AVAILABILITY_ZONES \
 --kubernetes-version $KUBERNETES_VERSION \
 --yes

运行 kops create后, kubectl 环境将会更新为指向您的新集群。所有资源完成联机需要几分钟的时间;您可以使用命令 kops validate cluster查看集群状态。

验证集群

现在,您已经在 AWS 上建立了一个 Kubernetes 集群!

行动起来吧

去年,kops 项目取得了长足发展,我们喜见社区积极参与,贡献自己的力量。如果您需要帮助,可以加入 Kubernetes Slack,并在 #kops 频道中提问。如果您想贡献一份力量,请参阅有关贡献的 kops 文档

以下是在单个脚本中编译的上述所有步骤:

https://gist.github.com/micahhausler/b389cdb2cb5d0c51ee02d01454e9263a


Micah Hausler 是 Skuid 的网站运维工程师,负责管理 DevOps 团队,同时还是 Kubernetes 参与者。您可以在 Twitter、Github 和 Kubernetes Slack 上搜索 @micahhausler 找到他。

本博文中的内容和观点均源自第三方作者,AWS 对本博文中的内容或准确性不承担任何责任。

Arun Gupta

Arun Gupta

Arun Gupta 是 Amazon Web Services 的首席开源技术专家。他在 AWS 主要负责与容器和开源有关的所有事务。他还负责 AWS 内部的 CNCF 战略,积极参与 CNCF 董事和技术会议。他曾在 Sun、Oracle、Red Hat 和 Couchbase 组建和领导开发人员社区,在此方面拥有超过 12 年的经验。他有丰富的演讲经历,在 40 多个国家/地区就各种主题发表过演讲,并且连续四年荣膺 JavaOne Rock Star。Gupta 还在美国创立了 Devoxx4Kids 分会,并继续在儿童中推广技术教育。此外,Gupta 还是一位多产的博客作者并出版过多本书籍。他热爱跑步、喜欢环球旅行。这就是 Gupta,一位 Docker 队长、一个 Java 冠军、一名 JUG 领袖、一位 NetBeans 梦之队成员。您可以访问他的博客 @arungupta,了解更多信息。