Google Computer Engine入门

译者:李加庆 校对:无

下面的例子用4个节点虚拟机和1个主虚拟机(也就是说集群中使用了5个虚拟机)创建了一个Kubernetes集群。您可以在您的工作站(或是任何您觉得合适的地方)安装和控制这个集群。

开始之前

如果您想要一个简化的入门体验和图形用户界面来管理集群,请考虑尝试使用谷歌容器引擎(GKE)安装和管理托管集群。 如果您想使用自定义的二进制文件或者原生的开源Kubernetes,请看下面的说明。

前提条件

1.您需要一个可以结算费用的Google云平台账户,更多细节详见Google开发者控制台

2.安装gcloud是必要的。 gcloud可以作为谷歌云SDK的一部分来安装。

3.然后,确保您已经安装了gcloud preview命令行组件。在命令行中运行gcloud preview。 如果它要求安装任何组件,就按照提示安装。如果它只是显示帮助文本,那就大功告成了。这是必需的因为集群安装脚本使用gcloud preview命名空间中的GCE实例组,所以这一步是必要的。您还需要在开发控制台中启用计算引擎实例组管理器API

4.确保gcloud被设定使用您想使用的谷歌云平台项目。您可以使用gcloud配置清单项目检查当前的项目,并通过gcloud config set project <project-id>来更改它。

5.确保您拥有基于gcloud身份验证登录的GCloud凭据。

6.确保您可以通过命令行启动一个GCE虚拟机。至少确保您可以实践GCE快速入门的创建实例部分。

7.确保您在没有交互式提示符的情况下可以ssh连接到VM。参阅GCE快速入门登录实例部分。

启动集群

您可以使用下面任意一条命令(以防万一。我们列出了两个,以防您的机器上只安装了某一个)来安装客户端并启动集群:

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

或者

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

此命令完成后,会有一个master虚拟机和四个worker虚拟机作为Kubernetes集群来运行。
默认情况下,一些容器已经运行在集群上。一些容器如kibana和elasticsearch提供日志记录,而heapster提供监控服务
上面提到的命令运行脚本创建一个名为或者前缀为“kubernetes”的集群。它定义了一个特定的集群配置,所以只能运行一次。
或者,您可以从这个页面下载并安装最新的Kubernetes 发行版,然后运行/cluster/kube-up.sh脚本来启动集群:

cd kubernetescluster/kube-up.sh

如果您想在项目中运行不止一个集群,想使用不同的名字或者不同数量的工作节点,在启动集群之前参见 /cluster/gce/config-default.sh文件来进行更细粒度的配置。

如果您遇到问题,请参见故障排除章节,给Google容器组发邮件或者在IRC freenode的#google-containers频道提问。

接下来的几个步骤将向您展示:

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

在您的工作站中安装Kubernetes命令行工具

集群启动脚本会在工作站中留下一个正在运行的集群和一个kubernetes目录。下一步是要确保kubectl工具是在您的path中。

kubectl工具控制Kubernetes集群管理器。它可以让您检查集群资源,创建、删除和更新组件以及更多功能。您会用它来查看新集群并生成示例应用程序。 添加适当的二进制文件夹到您的path中以便可以访问kubectl:

# OS X
export PATH=<path/to/kubernetes-directory>/platforms/darwin/amd64:$PATH# 

Linux
export PATH=<path/to/kubernetes-directory>/platforms/linux/amd64:$PATH

注:gcloud还附带kubectl,默认情况下被添加到您的path中。然而,gcloud所捆绑的kubectl版本可能会比通过get.k8s.io安装脚本下载的版本旧。我们建议您使用下载的二进制文件,以避免与客户机/服务器版本偏差所带来的潜在问题。

为bash配备Kubernetes命令行工具自动补全

您会发现让kubectl自动补全非常有用:

$ source ./contrib/completions/bash/kubectl

:这种补全会在您的bash会话一直有效,如果您想要它永久有效,您需要在bash profile中添加这一行。 另外的一个选择,在大多数linux发行版中,您也可以像下面这样复制完整的文件到您的bash_completions.d

$ cp ./contrib/completions/bash/kubectl /etc/bash_completion.d/

但是,你在更新kubectl的时候也要更新它。

启动您的集群

监控您的集群

一旦kubectl在您的path中,您就可以用它来查看您的集群。也就是运行:

$ kubectl get --all-namespaces services

应该会显示一组服务,看起来像这样:

NAMESPACE NAME LABELS SELECTOR IP(S) PORT(S)
default kubernetes component=apiserver,provider=kubernetes <none> 10.0.0.1 443/TCP
kube-system kube-dns k8s-app=kube-dns,kubernetes.io/cluster-service=true,kubernetes.io/name=KubeDNS k8s-app=kube-dns 10.0.0.10 53/UDP 53/TCP
kube-system kube-ui k8s-app=kube-ui,kubernetes.io/cluster-service=true,kubernetes.io/name=KubeUI k8s-app=kube-ui 10.0.59.25 80/TCP
kube-system monitoring-grafana kubernetes.io/cluster-service=true,kubernetes.io/name=Grafana k8s-app=influxGrafana 10.0.41.246 80/TCP
kube-system monitoring-heapster kubernetes.io/cluster-service=true,kubernetes.io/name=Heapster k8s-app=heapster 10.0.59.48 80/TCP
kube-system monitoring-influxdb kubernetes.io/cluster-service=true,kubernetes.io/name=InfluxDB k8s-app=influxGrafana 10.0.210.156 8083/TCP 8086/TCP

同样,您可以查看在集群启动时创建的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启动时可能会花费数秒(在此期间,它们会显示为挂起状态),但是在一小段时间后再次检查,它们就都是运行状态了。

运行一些例子

然后,通过一个简单的nginx示例来拿新的集群练练手。 想要了解更多完整的应用程序,请查看示例目录。该Guestbook示例就是一个很好的“入门”演练。

拆除集群

使用kube-down.sh脚本来移除/删除/拆除集群:

cd kubernetes
cluster/kube-down.sh

同样地,同一目录下的kube-up.sh会做好备份。您无需重新运行curl或wget命令:安装Kubernetes集群所需要的一切都已在您的工作站中就绪。

定制集群

上面的脚本依赖于Google存储来暂存Kubernetes发行版。然后,它会启动(默认)单个master虚拟机以及4个worker虚拟机。您可以通过编辑kubernetes/cluster/gce/config-default.sh来调整一些参数,您可以在这里查看集群创建成功的记录。

故障排除

项目设置

您需要启用谷歌云存储API和谷歌云存储JSON API,新项目是默认启用的。如果没有启用,可以在谷歌云控制台完成。更多详情请参阅谷歌云存储JSON API

正如前提条件部分所列那样,还要确保地是,您已经启用计算引擎实例组管理器API,并且能够根据GCE快速入门中的指导那样,从命令行中启动一个GCE虚拟机。

集群初始化挂起

如果Kubernetes启动脚本挂起并等待API可用,您可以通过ssh方式连接到主虚拟机和节点虚拟机来查看日志如:

/var/log/startupscript.log

一旦您解决了这个问题,在再次尝试运行kube-up.sh之前 ,您应该在部分集群创建后运行kube-down.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-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