在Google Compute Engine上运行Kubernetes

下面的例子用了4个node 节点的虚拟机和1个master 节点的虚拟机来(即集群中共有5个虚拟机)创建了一个Kubernetes集群。

说明

如果您想要简化入门体验和使用GUI来管理群集,可以考虑使用Google Container Engine (GKE)进行安装和管理和托管群集。如果要使用自定义二进制文件或纯原生的Kubernetes,请继续执行以下说明。

准备条件

  1. 需要Google Cloud Platform帐户,有关详细信息,请访问Google Developers Console
  2. 安装gcloud,gcloud可以作为Google Cloud SDK的一部分进行安装。
  3. 在 Google Cloud developers console中启用 Compute Engine Instance Group Manager 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 VM。
  8. 确保你可以使用ssh方式进入虚拟机。

启动群集

使用以下任一命令来安装客户端并启动集群:

curl -sS https://get.k8s.io | bash

wget -q -O - https://get.k8s.io | bash

安装完成后,将拥有一个Master节点主VM和4个Node节点的工作VM,作为Kubernetes集群来运行。

默认情况下,一些容器已经运行在集群上。如容器kibana和elasticsearch提供日志记录,而heapster提供监控服务。

上面提到的命令运行脚本创建的“kubernetes”集群。它定义了一个特定的集群配置,所以只能运行一次。

或者,可以从此页面下载并安装最新的Kubernetes版本,然后运行<kubernetes>/cluster/kube-up.sh脚本启动群集:

cd kubernetes
cluster/kube-up.sh

如果要在项目中运行多个集群,要使用不同的Name,或者想要不同数量的工作节点,请在启动集群之前参见 /cluster/gce/config-default.sh文件进行更详细配置。

如果遇到问题,请参考有关 troubleshooting的部分,发布到  kubernetes-users group,或者在 Slack上询问问题。

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

  1. 如何在工作站上安装命令管理工具来管理集群
  2. 如何使用集群的一些示例
  3. 如何删除集群
  4. 如何启动具有非默认选项的群集(更大的集群)

工作站上安装Kubernetes命令管理工具

集群启动脚本将为你提供一个运行中的集群和kubernetes 目录。

使用kubectl工具来控制Kubernetes集群管理器。它可以检查集群资源,创建,删除和更新组件等等。你将会用它来查看新集群并生成示例应用程序。

使用gcloud在你的工作站上安装kubectl命令管理工具:

 gcloud components install kubectl

注意:gcloud所捆绑的kubectl版本可能会比通过get.k8s.io安装脚本下载的版本旧。

开始使用集群

检查群集

在kubectl中使用以下命令来查看你的群集。

$ kubectl get --all-namespaces services

显示的services

NAMESPACE     NAME                  CLUSTER_IP       EXTERNAL_IP       PORT(S)        AGE
default       kubernetes            10.0.0.1         <none>            443/TCP        1d
kube-system   kube-dns              10.0.0.2         <none>            53/TCP,53/UDP  1d
kube-system   kube-ui               10.0.0.3         <none>            80/TCP         1d
...

通过以下命令查看在集群启动时创建的一组pod

$ kubectl get --all-namespaces pods

查看pod列表:

NAMESPACE     NAME                                           READY     STATUS    RESTARTS   AGE
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-dns-v5-7ztia                              3/3       Running   0          15m
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)。

运行例子

然后,通过一个简单的nginx示例来尝试你的新集群。

有关更完整的应用示例,请查看 examples directory。该guestbook example是一个很好的“入门”例子。

卸载集群

使用kube-down.sh脚本来remove/delete/teardown集群。

cd kubernetes
cluster/kube-down.sh

同样的,kube-up.sh在同一个目录下将会备份。您不需要重新运行curl或wget命令:设置Kubernetes集群所需的一切现在都在您的工作站上。

定制

上述脚本依赖于Google Storage来推出Kubernetes版本。然后启动(默认情况下)单个主虚拟机以及4个工作虚拟机,你可以通过编辑kubernetes/cluster/gce/config-default.sh调整其中一些参数,可以在此处查看成功创建集群的脚本 。

故障排除

项目设置

需要启用Google Cloud Storage API,并启用Google Cloud Storage JSON API。新项目默认是激活的。如果未启动,可以在Google Cloud Console中完成。有关详细信息,请参阅Google Cloud Storage JSON API Overview

还要确保已启用Compute Engine Instance Group Manager API,并从命令行启动GCE VM,如GCE Quickstart说明那样。

群集初始化挂起

如果Kubernetes启动脚本挂起等待API可用,则可以通过SSH对Master和Node上的VM进行故障诊断,查看诸如/var/log/startupscript.log这样的日志。

一旦你解决了这些问题,当再次运行kube-up.sh前 ,应该在集群创建后运行kube-down.sh来做一下清理。

SSH

如果无法通过SSH连接到实例,请确保GCE防火墙没有屏蔽VM的22端口。默认情况是可以正常连接实例,但是如果编辑了防火墙规则或创建了一个新的非默认网络,则需要暴露它:

gcloud compute firewall-rules create default-ssh --network=<network-name> --description "SSH allowed from anywhere" --allow tcp:22

此外,你的GCE SSH key 必须没有密码,或者需要使用ssh-agent。

Networking

这些实例必须能用私有IP进行通信。该脚本使用“默认”网络,该网络应该有一个名为“default-allow-internal”的防火墙规则,允许私有IP上的任何端口上的流量。如果默认网络中缺少此规则,或者如果更改cluster/config-default.sh正在使用的网络,则需要创建下字段值的新规则:

  • Source Ranges: 10.0.0.0/8
  • Allowed Protocols and Port: tcp:1-65535;udp:1-65535;icmp

Support Level

aaS Provider Config. Mgmt OS Networking Docs Conforms Support Level
GCE Saltstack Debian GCE docs Project

有关所有解决方案的support level信息,请参考Table of solutions

继续学习

有关管理和使用Kubernetes集群的更多详细信息,请参阅Kubernetes文档