20 KiB
title, content_type
| title | content_type |
|---|---|
| 在谷歌计算引擎上运行 Kubernetes | task |
下面的示例创建了一个 Kubernetes 集群,其中包含 3 个工作节点虚拟机和 1 个主虚拟机(即集群中有 4 个虚拟机)。 这个集群是在你的工作站(或你认为方便的任何地方)设置和控制的。
{{% heading "prerequisites" %}}
如果你想要一个简化的入门体验和 GUI 来管理集群, 请考虑尝试谷歌 Kubernetes 引擎来安装和管理托管集群。
有一个简单的方式可以使用 Kubernetes 开发环境进行实验, 就是点击下面的按钮,打开 Google Cloud Shell,其中包含了 Kubernetes 源仓库自动克隆的副本。
如果你想要使用定制的二进制或者纯开源的 Kubernetes,请继续阅读下面的指导。
前提条件
- 你需要一个启用了计费的谷歌云平台账号。 更多细节请访问谷歌开发者控制台。
- 根据需要安装
gcloud。gcloud可作为谷歌云 SDK 的一部分安装。 - 在谷歌云开发者控制台 启用计算引擎实例组管理器 API
- 确保将 gcloud 设置成使用你想要的谷歌云平台项目。
你可以使用
gcloud config list project检查当前项目, 并通过gcloud config set project <project-id>修改它。 - 通过运行
gcloud auth login,确保你拥有 GCloud 的凭据。 - (可选)如果需要调用 GCE 的 API,你也必须运行
gcloud auth application-default login。 - 确保你能通过命令行启动 GCE 虚拟机。 至少确保你可以完成 GCE 快速入门的创建实例部分。
- 确保你在没有交互式提示的情况下 SSH 到虚拟机。 查看 GCE 快速入门的登录实例部分。
启动集群
你可以安装一个客户端,并使用这些命令的其中之一来启动集群(我们列出的两种情况,因为你的机器可能只安装了二者之一):
curl -sS https://get.k8s.io | bash
或
wget -q -O - https://get.k8s.io | bash
这条命令结完成后,你将会有 1 个主虚拟机和 4 个工作虚拟机,它们一起作为 Kubernetes 集群运行。
默认情况下,有一些容器已经在你的集群上运行。
像 fluentd 这样的容器提供日志记录,
而 heapster 提供监控服务。
由上述命令运行的脚本创建了一个名称/前缀为“kubernetes”的集群。 它定义了一个特定的集群配置,所以此脚本只能运行一次。
或者,你可以通过这个页面下载和安装最新版本的 Kubernetes,
然后运行 <kubernetes>/cluster/kube-up.sh 脚本启动集群:
cd kubernetes
cluster/kube-up.sh
如果你希望在项目中运行多个集群,希望使用一个不同名称,或者不同数量工作节点的集群,
请查看 <kubernetes>/cluster/gce/config-default.sh 文件,以便在启动集群之前进行更细粒度的配置。
如果你遇到了问题,请参阅错误排查一节,
发布到 Kubernetes 论坛,或者来 #gke Slack 频道中提问。
接下来的几个步骤会告诉你:
- 如何在你的工作站设置命令行客户端来管理集群
- 如何使用集群的示例
- 如何删除集群
- 如果以非默认选项启动集群(如规模较大的集群)
在你的工作站安装 Kubernetes 命令行工具
集群启动脚本将在你的工作站上留下一个正在运行的集群和一个 kubernetes 目录。
kubectl 工具控制 Kubernetes 集群管理器。 它允许你检查集群资源,创建、删除和更新组件等等。 你将使用它来查看新集群并启动示例应用程序。
你可以使用 gcloud 在工作站上安装 kubectl 命令行工具:
gcloud components install kubectl
{{< note >}}
与 gcloud 绑定的 kubectl 版本可能比 get.k8s.io 安装脚本所下载的更老。。
查看安装 kubectl 文档,了解如何在工作站上设置最新的 kubectl。
{{< /note >}}
开始使用你的集群
检查你的集群
一旦 kubectl 存在于你的路径中,你就可以使用它来查看集群,例如,运行:
kubectl get --all-namespaces services
应该显示 services 集合,看起来像这样:
NAMESPACE NAME TYPE CLUSTER_IP EXTERNAL_IP PORT(S) AGE
default kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 1d
kube-system kube-dns ClusterIP 10.0.0.2 <none> 53/TCP,53/UDP 1d
kube-system kube-ui ClusterIP 10.0.0.3 <none> 80/TCP 1d
...
类似的,你可以查看在集群启动时创建的 pods 的集合。 你可以通过命令:
kubectl get --all-namespaces pods
你将会看到 Pod 的列表,看起来像这样(名称和细节会有所不同):
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-5f4fbb68df-mc8z8 1/1 Running 0 15m
kube-system fluentd-cloud-logging-kubernetes-minion-63uo 1/1 Running 0 14m
kube-system fluentd-cloud-logging-kubernetes-minion-c1n9 1/1 Running 0 14m
kube-system fluentd-cloud-logging-kubernetes-minion-c4og 1/1 Running 0 14m
kube-system fluentd-cloud-logging-kubernetes-minion-ngua 1/1 Running 0 14m
kube-system kube-ui-v1-curt1 1/1 Running 0 15m
kube-system monitoring-heapster-v5-ex4u3 1/1 Running 1 15m
kube-system monitoring-influx-grafana-v1-piled 2/2 Running 0 15m
一些 Pod 启动可能需要几秒钟(在此期间它们会显示 Pending),
但是在短时间后请检查它们是否都显示为 Running。
运行示例
那么,看一个简单的 nginx 示例来试试你的新集群。
要获得完整的应用,请查看 [examples 目录](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/)。 [guestbook 示例](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/guestbook/) 是一个很好的“入门”演练。
拆除集群
要移除/删除/拆除集群,请使用 kube-down.sh 脚本。
cd kubernetes
cluster/kube-down.sh
同样地,同一目录下的 kube-up.sh 脚本会让集群重新运行起来。
你不需要再次运行 curl 或 wget 命令:现在 Kubernetes 集群所需的一切都在你的工作站上。
定制
上面的脚本依赖于谷歌存储来保存 Kubernetes 发行版本。
该脚本然后(默认情况下)会启动 1 个主虚拟机和 3 个工作虚拟机。
你可以通过编辑 kubernetes/cluster/gce/config-default.sh 来调整这些参数。
你可以在这里查看成功创建集群的记录。
故障排除
项目设置
你需要启用 Google Cloud Storage API 和 Google Cloud Storage JSON API。 默认情况下,对新项目都是激活的。 如果未激活,可以在谷歌云控制台设置。 更多细节,请查看谷歌云存储 JSON API 概览。
也要确保——正如在前提条件中列出的那样——
你已经启用了 Compute Engine Instance Group Manager API,
并且可以像 GCE 快速入门指导那样从命令行启动 GCE 虚拟机。
集群初始化过程停滞
如果 Kubernetes 启动脚本停滞,等待 API 可达,
你可以 SSH 登录到主虚拟机和工作虚拟机,
通过查看 /var/log/startupscript.log 日志来排除故障。
一旦解决了这个问题,你应该在部分集群创建之后运行 kube-down.sh 来进行清理,然后再运行 kube-up.sh 重试。
SSH
如果在 SSH 登录实例时遇到困难,确保 GCE 防火墙没有阻塞你虚拟机的 22 端口。
默认情况下应该可用,但是如果你编辑了防火墙规则或者创建了一个新的非默认网络,
你需要公开它:gcloud compute firewall-rules create default-ssh --network=<network-name> --description "SSH allowed from anywhere" --allow tcp:22
此外,你的 GCE SSH 密钥不能有密码,否则你需要使用 ssh-agent。
网络
虚拟机实例必须能够使用它们的私有 IP 彼此连接。
该脚本使用 "default" 网络,此网络应该有一个名为 "default-allow-internal" 的防火墙规则,
此规则允许通过私有 IP 上的任何端口进行通信。
如果默认网络中缺少此规则,或者更改了 cluster/config-default.sh 中使用的网络,
用以下字段值创建一个新规则:
- 源范围:
10.0.0.0/8 - 允许的协议和端口:
tcp:1-65535;udp:1-65535;icmp
支持等级
| IaaS 提供商 | 配置管理 | 操作系统 | 网络 | 文档 | 符合率 | 支持等级 |
|---|---|---|---|---|---|---|
| GCE | Saltstack | Debian | GCE | docs | Project |
