Files

20 KiB
Raw Permalink Blame History

title, content_type
title content_type
在谷歌计算引擎上运行 Kubernetes task

下面的示例创建了一个 Kubernetes 集群,其中包含 3 个工作节点虚拟机和 1 个主虚拟机(即集群中有 4 个虚拟机)。 这个集群是在你的工作站(或你认为方便的任何地方)设置和控制的。

{{% heading "prerequisites" %}}

如果你想要一个简化的入门体验和 GUI 来管理集群, 请考虑尝试谷歌 Kubernetes 引擎来安装和管理托管集群。

有一个简单的方式可以使用 Kubernetes 开发环境进行实验, 就是点击下面的按钮,打开 Google Cloud Shell,其中包含了 Kubernetes 源仓库自动克隆的副本。

在 Cloud Shell 中打卡

如果你想要使用定制的二进制或者纯开源的 Kubernetes,请继续阅读下面的指导。

前提条件

  1. 你需要一个启用了计费的谷歌云平台账号。 更多细节请访问谷歌开发者控制台
  2. 根据需要安装 gcloudgcloud 可作为谷歌云 SDK 的一部分安装。
  3. 谷歌云开发者控制台 启用计算引擎实例组管理器 API
  4. 确保将 gcloud 设置成使用你想要的谷歌云平台项目。 你可以使用 gcloud config list project 检查当前项目, 并通过 gcloud config set project <project-id> 修改它。
  5. 通过运行 gcloud auth login,确保你拥有 GCloud 的凭据。
  6. (可选)如果需要调用 GCE 的 API,你也必须运行 gcloud auth application-default login
  7. 确保你能通过命令行启动 GCE 虚拟机。 至少确保你可以完成 GCE 快速入门的创建实例部分。
  8. 确保你在没有交互式提示的情况下 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 频道中提问。

接下来的几个步骤会告诉你:

  1. 如何在你的工作站设置命令行客户端来管理集群
  2. 如何使用集群的示例
  3. 如何删除集群
  4. 如果以非默认选项启动集群(如规模较大的集群)

在你的工作站安装 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 脚本会让集群重新运行起来。 你不需要再次运行 curlwget 命令:现在 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