本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。

如何在 AWS 上部署安全、可审计且可复现的 Kubernetes 集群

在 CoreOS,我们致力于大规模地在生产环境中部署 Kubernetes。今天,我们很高兴分享一个工具,它能让在 Amazon Web Services (AWS) 上部署 Kubernetes 变得轻而易举。Kube-aws 是一个用于在 AWS 上部署可审计和可复现的 Kubernetes 集群的工具,目前 CoreOS 正使用它来启动生产集群。

今天,您可能以一种更手动的方式组装 Kubernetes 组件。有了这个有用的工具,Kubernetes 以流线型的软件包交付,可以节省时间,最大程度地减少相互依赖,并快速创建生产就绪的部署。

它利用一个简单的模板系统,将集群配置生成为一组声明式配置模板,这些模板可以进行版本控制、审计和重新部署。由于整个配置过程都由 AWS CloudFormation 和 cloud-init 完成,因此您无需使用外部配置管理工具。即插即用!

要跳过介绍,直接进入项目,请查看 kube-aws 的最新版本,它支持 Kubernetes 1.2.x。要启动您的集群,请查阅文档

为什么选择 kube-aws?安全、可审计和可复现性

Kube-aws 的设计围绕三个核心目标。

安全:TLS 资产在嵌入 CloudFormation JSON 之前,通过 AWS Key Management Service (KMS) 进行加密。通过独立管理 KMS 密钥的 IAM 策略,操作员可以将 CloudFormation 堆栈的运维访问与 TLS 秘密的访问解耦。

可审计:kube-aws 围绕集群资产的概念构建。这些配置和凭证资产代表了集群的完整描述。由于 KMS 用于加密 TLS 资产,您可以随意将未加密的堆栈 JSON 签入版本控制!

可复现--export 选项将您的参数化集群定义打包成一个单独的 JSON 文件,该文件定义了一个 CloudFormation 堆栈。如果需要,该文件可以进行版本控制,并通过现有的部署工具直接提交到 CloudFormation API。

如何开始使用 kube-aws

在此基础上,kube-aws 实现了使 AWS 上的 Kubernetes 部署更易于管理和更灵活的功能。以下是一些示例。

Route53 集成:Kube-aws 可以在配置过程中管理您的集群 DNS 记录。

cluster.yaml

externalDNSName: my-cluster.kubernetes.coreos.com

createRecordSet: true

hostedZone: kubernetes.coreos.com

recordSetTTL: 300

现有 VPC 支持:将您的集群部署到现有 VPC。

cluster.yaml

vpcId: vpc-xxxxx

routeTableId: rtb-xxxxx

验证:Kube-aws 支持对 cloud-init 和 CloudFormation 定义以及集群堆栈将集成的任何外部资源进行验证。例如,这是一个带有拼写错误参数的 cloud-config

userdata/cloud-config-worker

#cloud-config

coreos:

  flannel:  
    interrface: $private\_ipv4  
    etcd\_endpoints: {{ .ETCDEndpoints }}

$ kube-aws validate

> 正在验证用户数据...
错误:cloud-config 验证错误
UserDataWorker:第 4 行:警告:无法识别的键 "interrface"

要开始使用,请查阅 kube-aws 文档

未来工作

一如既往,kube-aws 的目标是使部署能够用于生产。虽然我们今天在 AWS 生产环境中使用 kube-aws,但此项目仍处于 1.0 版本之前,kube-aws 仍有许多需要改进的领域。

容错性:在 CoreOS,我们相信 AWS 上的 Kubernetes 是一个强大的平台,可用于容错和自愈部署。在未来几周,kube-aws 将迎来一个新的挑战:在 混沌猴子 攻击下生存——包括控制平面在内!

零停机更新:CoreOS 节点和 Kubernetes 组件的更新可以在不停机且与正确的实例替换策略不相互依赖的情况下完成。

一个 GitHub 问题 正在跟踪实现此目标的工作。我们期待您通过提交问题或直接贡献来参与项目。

了解更多关于 Kubernetes 的信息,并在 CoreOS Fest Berlin 与社区会面 - 2016年5月9-10日