Minikube is a tool that makes it easy to run Kubernetes locally. Minikube runs a single-node Kubernetes cluster inside a VM on your laptop for users looking to try out Kubernetes or develop with it day-to-day.
根据介绍,我认为在本地尝试 Kubernetes 的话,Minikube 会是一个非常推荐的途径,遂用之。
初步探索 Minikube
Minikube 的相关内容以及简介均来自于这里。
事先准备:
安装和事先配置都不是特别的复杂,这里就不再一一赘述,如需获得更多信息请移至这里。
在没有安装 Minikube 之前,kubectl version 并不能获得 Server 的信息:
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.0", GitCommit:"925c127ec6b946659ad0fd596fa959be43f0cc05", GitTreeState:"clean", BuildDate:"2017-12-15T21:07:38Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"windows/amd64"}
Unable to connect to the server: ${ERROR_MESSAGE}
所以我们需要运行 minikube start 来创建 Minikube 这一虚拟 Kubernetes 服务器:
$ minikube start
Starting local Kubernetes v1.9.0 cluster...
再次运行 kubectl version 便可以得到同时 client 和 server 这两组信息。
我们可以执行 kubectl get nodes 来获取 Node 的信息(因为 Minikube 是单节点的集群,所以只有一个 Node):
如果觉得 command line 不够直观的了解已经浏览 Kubernetes 的框架结构,也可以使用 Kubernetes 原生的 Dashboard 来视觉化的浏览 Kubernetes 概况:
接下来我们实践一个最简单的例子 hello-minikube:
这是直接使用 command line 来执行的,大多数时候 Kubernetes 会使用 config 文件来配置,例如 .yaml,.yml。
kubectl run:Run a particular image on the cluster(在集群中运行某一个特定的镜像)。
hello-minikube:deployment 的名称。
--image=k8s.gcr.io/echoserver:1.4:所使用的镜像。
--port=8080:容器将 expose 的 Port。
由于 Kubernetes 中的 Pods 是动态存在的,所以纵使 Container 已经 expose 了 Port,我们仍然不能直接访问,而是需要一个 Service,所以需要执行如下:
kubectl expose:Take a replication controller, service or pod and expose it as a new Kubernetes Service。
hello-minikube:Service 的名称。
--type:定义 Service 的 Type,在这里是 NodePort(把这个 Service 的 Port expose 到 Node 上)。别的 Type 还有 ClusterIP(只能在集群内部被访问),LoadBalancer(通过一个 LoadBalancer expose 到外部)等等。
可以在 Dashboard 中查看:
因为 Service 的 Type 是 NodePort,图上的 32160 即是该 Service 可以通过 Node 的 IP 被访问的 Port。所以我们可以通过 ${MINIKUBE_IP}:${SERVICE_PORT} 进行访问,本文中的例子便是:
随后我们可以进行 Cleanup,分别是 delete services,delete deployment,minikube stop:
$ kubectl delete services hello-minikube
service "hello-minikube" deleted
$ kubectl delete deployment hello-minikube
deployment "hello-minikube" deleted
$ minikube stop
Stopping "minikube"...
接下来的一篇文章我将介绍如何在 Kubernetes 里面简单的实现 Git Server。