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 发行版,然后运行
cd kubernetescluster/kube-up.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