04 搭建 Kubernetes 集群 - 本地快速搭建
通过之前的学习,我们已经知道了 K8S 中有一些组件是必须的,集群中有不同的角色。本节,我们在本地快速搭建一个集群,以加深我们学习到的东西。
方案选择
在上一节中,我们知道 K8S 中有多种功能组件,而这些组件要在本地全部搭建好,需要一些基础知识,以及在搭建过程中会浪费不少的时间,从而可能会影响我们正常的搭建集群的目标。
所以,我们这里提供两个最简单,最容易实现我们目标的工具
KIND
介绍
KIND(Kubernetes in Docker)是为了能提供更加简单,高效的方式来启动 K8S 集群,目前主要用于比如 Kubernetes 自身的 CI 环境中。
安装
- 可以直接在项目的 Release 页面 下载已经编译好的二进制文件。(下文中使用的是 v0.1.0 版本的二进制包)
注意:如果不直接使用二进制包,而是使用 go get sigs.k8s.io/kind 的方式下载,则与下文中的配置文件不兼容。请参考使用 Kind 搭建你的本地 Kubernetes 集群 这篇文章。
更新(2020年2月5日):KIND 已经发布了 v0.7.0 版本,如果你想使用新版本,建议参考 使用 Kind 在离线环境创建 K8S 集群 ,这篇文章使用了最新版本的 KIND。

创建集群
在使用 KIND 之前,你需要本地先安装好 Docker 的环境 ,此处暂不做展开。
由于网络问题,我们此处也需要写一个配置文件,以便让 kind 可以使用国内的镜像源。(KIND 最新版本中已经内置了所有需要的镜像,无需此操作)
将上面的内容保存成 kind-config.yaml 文件,执行以下命令即可。
下面为在我机器上执行的程序输出:
这里,通过传递上面的 kind-config.yaml 文件给 kind create cluster, 并传递了一个名字通过 –name 参数。
我们按照程序输出的提示进行操作:
下面为在我机器上执行的程序输出:
注意,这里需要安装 kubectl。 kubectl 的安装可参考下面的内容。
当你执行 kubectl cluster-info 如果可以看到类似我上面的输出,那你本地的 K8S 集群就已经部署好了。你可以直接阅读第 5 节或者第 6 节的内容。
如果你已经对 K8S 有所了解,并且对 Dashboard 有比较强烈需求的话, 可直接参考第 20 节的内容。
Minikube
介绍
Minikube 是 K8S 官方为了开发者能在个人电脑上运行 K8S 而提供的一套工具。实现上是通过 Go 语言编写,通过调用虚拟化管理程序,创建出一个运行在虚拟机内的单节点集群。
注:从这里也可以看出,对于 K8S 集群的基本功能而言,节点数并没有什么限制。只有一个节点同样可以创建集群。
前期准备
- 首先需要确认 BIOS 已经开启了 VT-x 或者 AMD-v 虚拟化的支持。具体方式可参考 确认是否已开启 BIOS 虚拟化, 开启 BIOS 虚拟化支持 这两篇文章。
- 其次我们需要安装一个虚拟化管理程序,这里的选择可根据你实际在用的操作系统来决定。官方推荐如下:
- macOS: VirtualBox 或 VMware Fusion 或 HyperKit。如果使用 Hyperkit 需要注意系统必须是 OS X 10.10.3 Yosemite 及之后版本的。
- Linux: VirtualBox 或 KVM。
- Windows: VirtualBox 或 Hyper-V。
我个人推荐无论你在以上哪种操作系统中使用 Minikube 都选择用 Virtualbox 作为虚拟化管理程序,1. Virtualbox 无论操作体验还是安装都比较简单 2. Minikube 对其支持更完备,并且也已经经过大量用户测试,相关问题均已基本修复。
如果你是在 Linux 系统上面,其实还有一个选择,便是将 Minikube 的 –vm-driver 参数设置为 none ,并且在本机已经正确安装 Docker。 这种方式是无需虚拟化支持的。
安装 kubectl
上一节我们已经学到 K8S 集群是典型的 C/S 架构,有一个官方提供的名为 kubectl 的 CLI 工具。在这里,我们要安装 kubectl 以便后续我们可以对搭建好的集群进行管理。
注:由于 API 版本兼容的问题,尽量保持 kubectl 版本与 K8S 集群版本保持一致,或版本相差在在一个小版本内。
官方文档提供了 macOS, Linux, Windows 等操作系统上的安装方式,且描述很详细,这里不过多赘述,文档地址。
此处提供一个不同于官方文档中的安装方式。
- 访问 K8S 主仓库的 CHANGELOG 文件 找到你所需要的版本。 由于我们将要使用的 Minikube 是官方最新的稳定版 v0.28.2,而它内置的 Kubernetes 的版本是 v1.10 所以,我们选择使用对应的 1.10 版本的 kubectl。当然,我们也可以通过传递参数的方式来创建不同版本的集群。如 minikube start –kubernetes-version v1.11.3 用此命令创建 v1.11.3 版本的集群,当然 kubectl 的版本也需要相应升级。

点击Client Binaries 找到你符合所需系统架构的对应包下载即可。这里我以 Linux 下 64 位的包为例。
执行以上命令即可完成 kubectl 的安装,最后一步会看到当前安装的版本信息等。
安装 Minikube
先查看 Minikube 的 Release 页面,当前最新的稳定版本是 v0.28.2,找到你所需系统的版本,点击下载,并将下载好的可执行文件加入你的 PATH 中。

注:当前 Windows 系统下的安装包还处于实验性质,如果你是在 Windows 环境下,同样是可以下载安装使用的
以 Linux 下的安装为例:
最后一步可查看当前已安装好的 Minikube 的版本信息。如果安装成功将会看到和我上面内容相同的结果。
创建第一个 K8S 集群
使用 Minikube 创建集群,只要简单的执行 minikube start 即可。正常情况下,你会看到和我类似的输出。
为了验证我们的集群目前是否均已配置正确,可以执行以下命令查看。
如果出现类似拒绝连接之类的提示,那可能是因为你的 kubectl 配置不正确,可查看 $HOME/.kube/config 文件检查配置。示例输出如下:
如果没有该文件,可按上面示例内容进行创建,替换掉其中的路径及 server 地址配置。 server 地址可通过 minikube status 或者 minikube ip 查看或检查。
通过 Dashboard 查看集群当前状态
使用 Minikube 的另一个好处在于,你可以不用关注太多安装方面的过程,直接在终端下输入 minikube dashboard 打开系统 Dashboard 并通过此来查看集群相关状态。
执行 minikube dashboard 后会自动打开浏览器,默认情况下监听在通过 minikube ip 所获得 IP 的 3000 端口。如下图所示:

相关链接:
总结
本节中,我们为了能更快的体验到 K8S 集群,避免很多繁琐的安装步骤,我们选择了使用官方提供的 Minikube 工具来搭建一个本地集群。
Minikube 的本质其实是将一套 “定制化” 的 K8S 集群打包成 ISO 镜像,当执行 minikube start 的时候,便通过此镜像启动一个虚拟机,在此虚拟机上通过 kubeadm 工具来搭建一套只有一个节点的 K8S 集群。关于 kubeadm 工具,我们在下节进行讲解。
同时,会通过虚拟机的相关配置接口拿到刚才所启动虚拟机的地址信息等,并完成本地的 kubectl 工具的配置,以便于让用户通过 kubectl 工具对集群进行操作。
事实上,当前 Docker for Mac 17.12 CE Edge 和 Docker for Windows 18.02 CE Edge ,以及这两种平台更高的 Edge 版本, 均已内置了对 K8S 的支持,但均为 Edge 版本,此处暂不做过多介绍。