在 Google Cloud (GKE) 上运行 Kubernetes#
Google Kubernetes Engine (GKE) 是建立 Kubernetes 集群最简单、最常见的方式。你或许可以获得免费赠金来试用它(但请注意,免费帐户存在一些限制)。无论如何,你都需要将你的信用卡或其他付款方式绑定到你的 Google Cloud 帐户。
前往 console.cloud.google.com 并登录。
注意
考虑为你的 Google Cloud 帐户设置云预算,以确保你不会意外地超出预算。
前往并启用 Kubernetes Engine API。
选择一个终端。
你可以使用基于 Web 的终端,也可以在你自己的计算机终端上安装并运行所需的命令行界面。我们建议从使用基于 Web 的终端开始。请选择下面的一组说明进行操作。
使用基于 Web 的终端
通过点击下图所示的按钮,从 console.cloud.google.com 启动 Google Cloud Shell。现在你将控制一台预装了各种工具的虚拟机。如果你在用户文件夹中保存了任何内容,当你稍后返回时,它们仍然可用。关于 Google Cloud Shell 的更多文档可以在这里找到。
使用你自己的计算机终端
在其安装页面下载并安装
gcloud
命令行工具。它将帮助你创建 Kubernetes 集群并与之通信。安装
kubectl
(读作 kube control),这是一个通用的 Kubernetes 集群控制工具。在你的终端中输入:gcloud components install kubectl
创建一个托管的 Kubernetes 集群和一个默认节点池。
请求 Google Cloud 创建一个托管的 Kubernetes 集群和一个默认的节点池来获取节点。节点代表硬件,而节点池将跟踪你需要的某种类型硬件的数量。
gcloud container clusters create \ --machine-type n1-standard-2 \ --num-nodes 2 \ --zone <compute zone from the list linked below> \ --cluster-version latest \ <CLUSTERNAME>
将
<CLUSTERNAME>
替换为一个将来可用于引用此集群的名称。--machine-type
指定此默认节点池中每个节点的 CPU 和 RAM 数量。有多种类型可供选择。--num-nodes
指定要启动的节点数量。你之后可以通过云控制台或使用gcloud
命令行工具来更改此设置。--zone
指定创建集群的数据中心区域。你可以从此列表中选择一个离你的用户不太远的地方。GCP 中的一个 region(区域)是指一个地理区域,至少包含三个 zone(可用区),每个可用区代表一个拥有服务器等设备的数据中心。
区域级集群会在一个 region 内的多个可用区(默认为三个)创建 pod,将 Kubernetes 资源分布到该 region 的多个可用区。这与默认集群不同,后者所有资源都在单个可用区内(如上所示)。
区域级集群拥有高可用(HA)的 Kubernetes API 服务器,这使得使用它们的 JupyterHub 在 Kubernetes 自身升级期间不会停机。
它们还将控制平面的正常运行时间提高到 99.95%。
为了在保持 Kubernetes 高可用的同时避免节点数量增加三倍,可以使用
--node-locations
标志来指定一个单一的可用区。
要测试你的集群是否已初始化,请运行:
kubectl get node
响应应该列出两个正在运行的节点(或者你上面用
--num-nodes
设置的节点数量)。为你的帐户授予执行所有所需管理操作的权限。
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user=<GOOGLE-EMAIL-ACCOUNT>
将
<GOOGLE-EMAIL-ACCOUNT>
替换为你用于注册 Google Cloud 的 Google 帐户的确切电子邮件地址。你的电子邮件地址输入正确吗?如果输入错误,你可以运行
kubectl delete clusterrolebinding cluster-admin-binding
并重新操作。[可选] 为用户创建一个节点池
这是一个可选步骤,适用于希望将用户 pod 与“核心” pod(如 Hub 本身及其他组件)分离开来的用户。有关使用专用用户节点池的详细信息,请参阅优化。
此节点池中的节点仅供用户使用。该节点池启用了自动伸缩功能,并设置了伸缩的下限和上限。这意味着节点数量会根据已调度的用户数量自动调整。
n1-standard-2
机器类型有 2 个 CPU 和 7.5 GB RAM,其中约 0.2 CPU 会被系统 pod 请求。对于总 CPU 核心数限制为 8 个的免费帐户来说,这是一个合适的选择。请注意,该节点池被污染 (tainted) 了。只有配置了对此污染的容忍 (toleration) 的用户 pod 才能被调度到该节点池的节点上。这样做是为了确保在用户 pod 停止后,自动伸缩器能够缩减节点数量。
gcloud beta container node-pools create user-pool \ --machine-type n1-standard-2 \ --num-nodes 0 \ --enable-autoscaling \ --min-nodes 0 \ --max-nodes 3 \ --node-labels hub.jupyter.org/node-purpose=user \ --node-taints hub.jupyter.org_dedicated=user:NoSchedule \ --zone us-central1-b \ --cluster <CLUSTERNAME>
注意
考虑添加
--preemptible
标志以显著降低成本。你可以在这里比较价格 <https://cloud.google.com/compute/docs/machine-types>
。更多信息请参阅抢占式节点文档 <https://cloud.google.com/compute/docs/instances/preemptible>
。
恭喜!现在你的 Kubernetes 集群已经运行起来,是时候开始设置 Helm了。