下面的例子用了4个node 节点的虚拟机和1个master 节点的虚拟机来(即集群中共有5个虚拟机)创建了一个Kubernetes集群。
说明
如果您想要简化入门体验和使用GUI来管理群集,可以考虑使用Google Container Engine (GKE)进行安装和管理和托管群集。如果要使用自定义二进制文件或纯原生的Kubernetes,请继续执行以下说明。
准备条件
- 需要Google Cloud Platform帐户,有关详细信息,请访问Google Developers Console。
- 安装gcloud,gcloud可以作为Google Cloud SDK的一部分进行安装。
- 在 Google Cloud developers console中启用 Compute Engine Instance Group Manager API。
- 确保在gcloud正确设置,可以使用gcloud config list project方法进行检查,通过gcloud config set project <project-id>方法来更改。
- 通过gcloud auth login,确保拥有Gcloud。
- (可选)为了对GCE进行API调用,还必须运行gcloud auth application-default login。
- 确保你可以用命令行启动GCE VM。
- 确保你可以使用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上询问问题。
接下来的几个步骤将告诉你:
- 如何在工作站上安装命令管理工具来管理集群
- 如何使用集群的一些示例
- 如何删除集群
- 如何启动具有非默认选项的群集(更大的集群)
工作站上安装Kubernetes命令管理工具
集群启动脚本将为你提供一个运行中的集群和kubernetes 目录。
使用kubectl工具来控制Kubernetes集群管理器。它可以检查集群资源,创建,删除和更新组件等等。你将会用它来查看新集群并生成示例应用程序。
使用gcloud在你的工作站上安装kubectl命令管理工具:
gcloud components install kubectl
注意:gcloud所捆绑的kubectl版本可能会比通过get.k8s.io安装脚本下载的版本旧。请参考kubectl安装 文档,了解如果在工作站上安装最新的kubectl。
开始使用集群
检查群集
在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文档
《在Google Compute Engine上运行Kubernetes》有283个想法