下面的例子用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配置设定<项目编号>来更改它。
5.确保您拥有基于gcloud身份验证登录的GCloud凭据。
6.确保您可以通过命令行启动一个GCE虚拟机。至少确保你可以实践GCE快速入门的创建实例部分。
7.确保您在没有交互式提示符的情况下可以ssh连接到VM。参阅GCE快速入门登录实例部分。
启动集群
You can install a client and start a cluster with either one of these commands (we list both in case only one is installed on your machine):
你可以使用下面任意一条命令(以防万一。我们列出了两个,但只有一个会安装到你的机器上)来安装客户端并启动集群:
curl -sS https://get.k8s.io | bash
或者
wget -q -O - https://get.k8s.io | bash
此命令完成后,您将有一个主虚拟机和四个工作虚拟机作为Kubernetes集群来运行。
默认情况下,一些容器已经运行在集群上。一些容器如kibana和elasticsearch提供日志记录,而heapster提供监控服务。
上面提到的命令运行脚本创建一个名为/前缀“kubernetes”集群。它定义了一个特定的集群配置,所以只能运行一次。
或者,你可以从这个页面下载并安装最新的Kubernetes 发行版,然后运行<kubernetes>/cluster/kube-up.sh脚本来启动集群:
cd kubernetescluster/kube-up.sh
如果您想在项目中运行不止一个集群,想使用不同的名字或者不同数量的工作节点,在启动集群之前参见
<kubernetes>/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安装脚本下载的版本旧。我们建议您使用下载的二进制文件,以避免与客户机/服务器版本偏差所带来的潜在问题。
启动您的集群
监控您的集群
一旦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示例来拿新的集群练练手。
想要了解更多完整的应用程序,请查看示例目录。该留言板的例就是一个很好的“入门”演练。
拆除集群
使用kube-down.sh脚本来移除/删除/拆除集群:
cd kubernetes
cluster/kube-down.sh
同样地,同一目录下的kube-up.sh会做好备份。您无需重新运行curl或wget命令:安装Kubernetes集群所需要的一起都已在您的工作站中就绪。
定制集群
上面的脚本依赖于Google存储来暂存Kubernetes发行版。然后,它会启动(默认)单个主虚拟机以及4个工作的虚拟机。您可以通过编辑kubernetes/cluster/gce/config-default.sh来调整一些参数,你可以在这里查看集群创建成功的记录。
故障排除
项目设置
你需要启用谷歌云存储API和谷歌云存储JSON API,新项目是默认启用的。如果没有启用,可以在谷歌云控制台完成。更多详情请参阅谷歌云存储JSON API
正如必备条件部分所列那样,还要确保地是,您已经启用你需要有谷歌云存储API和谷歌云存储JSON API启用。它默认为新项目启动。否则,它可以在谷歌云控制台完成。请参阅谷歌云存储的JSON API概述了解详情。还要确保that--为section--您已经启用的计算引擎实例组管理器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
网友评论