--- title: 使用 Kops 安装 Kubernetes content_template: templates/concept weight: 20 --- {{% capture overview %}} 本篇快速入门介绍了如何在 AWS 上轻松安装 Kubernetes 集群。 本篇使用了一个名为 [`kops`](https://github.com/kubernetes/kops) 的工具。 kops 是一个自用的供应系统: * 全自动安装流程 * 使用 DNS 识别集群 * 自我修复:一切都在自动扩展组中运行 * 支持多种操作系统(如 Debian、Ubuntu 16.04、CentOS、RHEL、Amazon Linux 和 CoreOS) - 参考 [images.md](https://github.com/kubernetes/kops/blob/master/docs/images.md) * 支持高可用 - 参考 [high_availability.md](https://github.com/kubernetes/kops/blob/master/docs/high_availability.md) * 可以直接提供或者生成 terraform 清单 - 参考 [terraform.md](https://github.com/kubernetes/kops/blob/master/docs/terraform.md) 如果您有不同的观点,您可能更喜欢使用 [kubeadm](/docs/admin/kubeadm/) 作为构建工具来构建自己的集群。kops 建立在 kubeadm 工作的基础上。 {{% /capture %}} {{% capture body %}} ## 创建集群 ### (1/5) 安装 kops #### 前提条件 您必须安装 [kubectl](/docs/tasks/tools/install-kubectl/) 才能使 kops 工作。 #### 安装 从[下载页面](https://github.com/kubernetes/kops/releases)下载 kops(从源代码构建也很容易): 在 macOS 上: ```shell curl -OL https://github.com/kubernetes/kops/releases/download/1.10.0/kops-darwin-amd64 chmod +x kops-darwin-amd64 mv kops-darwin-amd64 /usr/local/bin/kops # 您也可以使用 Homebrew 安装 kops brew update && brew install kops ``` 在 Linux 上: ```shell wget https://github.com/kubernetes/kops/releases/download/1.10.0/kops-linux-amd64 chmod +x kops-linux-amd64 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` 作为托管区域。您可以使用[正常流程](http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingNewSubdomain.html) 或者使用诸如 `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` 操作将向您显示其操作的预览效果。这对于生产集群很方便! ### 探索其他附加组件 请参阅[附加组件列表](/docs/concepts/cluster-administration/addons/)探索其他附加组件,包括用于 Kubernetes 集群的日志记录、监视、网络策略、可视化和控制的工具。 ## 清理 * 删除集群:`kops delete cluster useast1.dev.example.com --yes` ## 反馈 * Slack Channel: [#kops-users](https://kubernetes.slack.com/messages/kops-users/) * [GitHub Issues](https://github.com/kubernetes/kops/issues) {{% /capture %}} {{% capture whatsnext %}} * 了解有关 Kubernetes 的 [concepts](/docs/concepts/) 和 [`kubectl`](/docs/user-guide/kubectl-overview/) 的更多信息。 * 了解 `kops` [高级用法](https://github.com/kubernetes/kops)。 * 请参阅 `kops` [文档](https://github.com/kubernetes/kops) 获取教程、最佳做法和高级配置选项。 {{% /capture %}}