# 在 AWS EC2 上运行 Kubernetes

# 工具

  • Kubernetes Operations - k8s 安装、升级和管理。支持在 AWS 中运行 Debian,Ubuntu,CentOS 和 RHEL。
  • CoreOS Tectonic 包括开源的 Tectonic Installer,它在 AWS 上使用 Container Linux 节点创建 Kubernetes 集群。
  • CoreOS,Kubernetes Incubator 维护一个 CLI 工具,kube-aws,它使用了 Container Linux 节点创建和管理 Kubernetes 集群,使用了 AWS 工具:EC2、CloudFormation 和 Autoscaling。

# kubernetes 1.6 不再支持 kube-up

kube-up.sh 是启动集群的传统工具,已被弃用,完全从 kubernetes 1.6 中删除。

# 需要的条件

  1. 这仅适用于 kubernetes 1.5 及更早版本。考虑切换到支持的选项之一。
  2. 需要一个 AWS 帐户。可以访问 http://aws.amazon.com 创建使用
  3. 安装和配置 AWS Command Line Interface
  4. 建议使用具有访问全部 AWS API 的帐户进行安装。

注意:此脚本默认使用“default”AWS 配置文件,你可以使用 AWS_DEFAULT_PROFILE 环境变量显式设置 AWS 配置文件:

export AWS_DEFAULT_PROFILE=myawsprofile

# 开启群集

# 支持的程序: get-kube

#Using wget
export KUBERNETES_PROVIDER=aws; wget -q -O - https://get.k8s.io | bash
#Using cURL
export KUBERNETES_PROVIDER=aws; curl -sS https://get.k8s.io | bash

注:这个脚本调用 cluster/kube-up.sh,它使用 cluster/aws/config-default.sh.来调用 cluster/aws/util.sh

这个过程大约需要 5 到 10 分钟。一旦集群启动,您的主节点和节点(s)的 IP 地址将被打印,以及关于在集群中运行的缺省服务的信息(监视、日志、dns)。User credentials 和 security tokens 是在 ~/.kube/config 中编写的,它将需要使用 CLI 或 HTTP Basic Auth。

默认情况下,该脚本将 us-west-2a(Oregon)中提供一个新的 VPC 和一个 4 个 node 的 k8s 集群,并在 Debian 上运行 EC2 实例。你可以覆盖 config-default.sh 中定义的变量,改变这种行为的方式如下:

export KUBE_AWS_ZONE=eu-west-1c
export NUM_NODES=2
export MASTER_SIZE=m3.medium
export NODE_SIZE=m3.medium
export AWS_S3_REGION=eu-west-1
export AWS_S3_BUCKET=mycompany-kubernetes-artifacts
export KUBE_AWS_INSTANCE_PREFIX=k8s
...

如果没有指定 master 和 minion 的 sizes,脚本将尝试根据${NUM_NODES}来猜测 master 和工作节点的 sizes。在 1.3 版本中,这些默认值是:

  • 对于 master 及小于 5 个 nodes 的集群,它将使用一个 m3.medium,对于 6-10 个 nodes,它将使用一个 m3.large; 对于 11-100 个 nodes,它将使用 m3.xlarge。
  • 对于工作节点,小于 50 个节点的集群,它将使用一个 t2.micro,对于 50 到 150 个节点之间的集群,它将使用一个 t2.small,具有大于 150 个节点的集群,它将使用 a t2.medium。

警告:要注意的是,t2 实例每小时接收的 CPU credits 是有限的,可能不适用于始终运行的 CPU 的集群。作为一个粗略的估计,考虑 15 pods/node,通过一个 t2.large 实例(instances)可以处理,

在 Kubernetes 的早期版本中,我们将 master 节点默认为一个 t2 类实例,但是发现当 master 节点耗尽内存或 CPU 时,这可能会出现一些奇葩的问题。如果集群用于测试,你可以指定 export MASTER_SIZE=t2.micro。

对于生产中使用,我们建议 export MASTER_SIZE=m3.medium 和 export NODE_SIZE=m3.medium。如果使用的节点增加,请注意,一个 m3.large 实例具有比两个 m3.medium 实例更多的存储空间,价格却变化不大。

我们通常建议在 m4 实例上使用 m3 实例,因为 m3 实例包括本地实例存储。从历史上来看,本地实例存储比 AWS 更加可靠,性能应该更加稳定。

如果使用 m4 实例,或其他没有本地实例存储的实例类型,则可能需要增加该 NODE_ROOT_DISK_SIZE 值,尽管默认值为 32 可能足以满足 m4 系列中较小的实例类型。

该脚本还将尝试创建或重新使用“kubernetes”的 keypair,以及 IAM 配置文件名为“kubernetes-master”和“kubernet-minion”。

注意:如果使 named 为“kubernetes”的现有 keypair,则必须将 AWS_SSH_KEY key 设置为 private key。

# 开始使用

# 命令行管理工具:kubectl

kubectl 启动集群后会在工作站中留下一个 Kubernetes directory,另外,可以从此页面下载最新的 Kubernetes 版本。

接下来,将二进制文件夹添加 PATH 中来访问 kubectl:

# OS X
export PATH=<path/to/kubernetes-directory>/platforms/darwin/amd64:$PATH

# Linux
export PATH=<path/to/kubernetes-directory>/platforms/linux/amd64:$PATH

了解 kubectl 更多信息,参考:kubectl 手册

在默认情况下,kubectl 将使用在集群启动期间生成的 kubeconfig 文件,用于对 API 进行身份验证。要了解更多信息,请参考: kubeconfig files

# 示例

看一个简单的 nginx 示例来开启你的集群之路。

“Guestbook”应用程序是你的集群之路另一个 Kubernetes 示例: guestbook example

有关更完整的应用程序,请查看 examples directory

# 扩展集群

不支持通过 kubectl 添加和删除节点。但仍然可以通过在安装过程中创建的自动扩展组的“Desired’ 和 ‘Max”属性来手动调整节点数量。

# 卸载集群

cluster/kube-down.sh

# Support Level

IaaS Provider Config. Mgmt OS Networking Docs Conforms Support Level
AWS kops Debian k8s (VPC) docs Community (@justinsb)
AWS CoreOS CoreOS flannel docs Community
Last Updated: 6/17/2023, 6:57:19 PM