使用 Kops 安装 Kubernetes

本篇快速入门介绍了如何在 AWS 上轻松安装 Kubernetes 集群。 本篇使用了一个名为 kops 的工具。

kops 是一个自用的供应系统:

  • 全自动安装流程
  • 使用 DNS 识别集群
  • 自我修复:一切都在自动扩展组中运行
  • 支持多种操作系统(如 Debian、Ubuntu 16.04、CentOS、RHEL、Amazon Linux 和 CoreOS) - 参考 images.md
  • 支持高可用 - 参考 high_availability.md
  • 可以直接提供或者生成 terraform 清单 - 参考 terraform.md

如果您有不同的观点,您可能更喜欢使用 kubeadm 作为构建工具来构建自己的集群。kops 建立在 kubeadm 工作的基础上。

创建集群

(1/5) 安装 kops

前提条件

您必须安装 kubectl 才能使 kops 工作。

安装

下载页面下载 kops(从源代码构建也很容易):

在 macOS 上:

  1. curl -OL https://github.com/kubernetes/kops/releases/download/1.10.0/kops-darwin-amd64
  2. chmod +x kops-darwin-amd64
  3. mv kops-darwin-amd64 /usr/local/bin/kops
  4. # 您也可以使用 Homebrew 安装 kops
  5. brew update && brew install kops

在 Linux 上:

  1. wget https://github.com/kubernetes/kops/releases/download/1.10.0/kops-linux-amd64
  2. chmod +x kops-linux-amd64
  3. mv kops-linux-amd64 /usr/local/bin/kops

(2/5) 为您的集群创建一个 route53 域名

kops 在集群内部都使用 DNS 进行发现操作,因此您可以从客户端访问 kubernetes API 服务器。

kops 对集群名称有明显的要求:它应该是有效的 DNS 名称。这样一来,您就不会再使集群混乱, 可以与同事明确共享集群,并且无需依赖记住 IP 地址即可访问群集。

您应该使用子域名来划分集群。作为示例,我们将使用域名 useast1.dev.example.com。 然后,API 服务器端点域名将为 api.useast1.dev.example.com

Route53 托管区域可以服务子域名。您的托管区域可能是 useast1.dev.example.com,还有 dev.example.com 甚至 example.com。 kops 可以与以上任何一种配合使用,因此通常您出于组织原因选择不同的托管区域。 例如,允许您在 dev.example.com 下创建记录,但不能在 example.com 下创建记录。

假设您使用 dev.example.com 作为托管区域。您可以使用正常流程 或者使用诸如 aws route53 create-hosted-zone --name dev.example.com --caller-reference 1 之类的命令来创建该托管区域。

然后,您必须在父域名中设置您的 DNS 记录,以便该域名中的记录可以被解析。在这里,您将在 example.com 中为 dev 创建 DNS 记录。 如果它是根域名,则可以在域名注册机构配置 DNS 记录。例如,您需要在购买 example.com 的地方配置 example.com

这一步很容易搞砸(这是问题的第一大原因!) 如果您安装了 dig 工具,则可以通过运行以下步骤再次检查集群是否配置正确:

dig DNS dev.example.com

您应该看到 Route53 分配了您的托管区域的 4 条 DNS 记录。

(3/5) 创建一个 S3 存储桶来存储集群状态

kops 使您即使在安装后也可以管理集群。为此,它必须跟踪已创建的集群及其配置、所使用的密钥等。 此信息存储在 S3 存储桶中。S3 权限用于控制对存储桶的访问。

多个集群可以使用同一 S3 存储桶,并且您可以在管理同一集群的同事之间共享一个 S3 存储桶 - 这比传递 kubecfg 文件容易得多。 但是有权访问 S3 存储桶的任何人都将拥有对所有集群的管理访问权限,因此您不想在运营团队之外共享它。

因此,通常每个运维团队都有一个 S3 存储桶(而且名称通常对应于上面托管区域的名称!)

在我们的示例中,我们选择 dev.example.com 作为托管区域,因此让我们选择 clusters.dev.example.com 作为 S3 存储桶名称。

  • 导出 AWS_PROFILE 文件(如果您需要选择一个配置文件用来使 AWS CLI 正常工作)

  • 使用 aws s3 mb s3://clusters.dev.example.com 创建 S3 存储桶

  • 您可以进行 export KOPS_STATE_STORE=s3://clusters.dev.example.com 操作,然后 kops 将默认使用此位置。 我们建议将其放入您的 bash profile 文件或类似文件中。

(4/5) 建立您的集群配置

运行 “kops create cluster” 以创建您的集群配置:

kops create cluster --zones=us-east-1c useast1.dev.example.com

kops 将为您的集群创建配置。请注意,它_仅_创建配置,实际上并没有创建云资源 - 您将在下一步中使用 kops update cluster 进行配置。 这使您有机会查看配置或进行更改。

它打印出可用于进一步探索的命令:

  • 使用以下命令列出集群:kops get cluster
  • 使用以下命令编辑该集群:kops edit cluster useast1.dev.example.com
  • 使用以下命令编辑您的节点实例组:kops edit ig --name = useast1.dev.example.com nodes
  • 使用以下命令编辑您的主实例组:kops edit ig --name = useast1.dev.example.com master-us-east-1c

如果这是您第一次使用 kops,请花几分钟尝试一下! 实例组是一组实例,将被注册为 kubernetes 节点。 在 AWS 上,这是通过 auto-scaling-groups 实现的。您可以有多个实例组,例如,如果您想要的是混合实例和按需实例的节点,或者 GPU 和非 GPU 实例。

(5/5) 在 AWS 中创建集群

运行 “kops update cluster” 以在 AWS 中创建集群:

kops update cluster useast1.dev.example.com --yes

这需要几秒钟的时间才能运行,但实际上集群可能需要几分钟才能准备就绪。每当更改集群配置时,都会使用 kops update cluster 工具。 它将对配置进行的更改应用于您的集群 - 根据需要重新配置 AWS 或者 kubernetes。

例如,在您运行 kops edit ig nodes 之后,然后运行 kops update cluster --yes 应用您的配置,有时您还必须运行 kops rolling-update cluster 立即回滚更新配置。

如果没有 --yes 参数,kops update cluster 操作将向您显示其操作的预览效果。这对于生产集群很方便!

探索其他附加组件

请参阅附加组件列表探索其他附加组件,包括用于 Kubernetes 集群的日志记录、监视、网络策略、可视化和控制的工具。

清理

接下来

  • 了解有关 Kubernetes 的 conceptskubectl 的更多信息。
  • 了解 kops 高级用法
  • 请参阅 kops 文档 获取教程、最佳做法和高级配置选项。