Minikube:本地快速搭建 Kubernetes 集群环境

610 阅读5分钟

背景

Kubernetes 是一个流行的容器编排系统,用于在大规模分布式环境中管理容器应用程序。但是,学习和开发 Kubernetes 需要配置大量的环境和工具,这使得入门变得困难。为了解决这个问题,社区就有人开发了 Minikube,它是一个轻量级的工具,可以在本地计算机上快速搭建 Kubernetes 集群,这使得 Kubernetes 的学习和开发变得更加容易,无需担心配置复杂的环境,也不需要担心资源的限制。

安装 Minikube

安装 Minikube 非常简单,你可以在 Mac、Linux 和 Windows 上安装 Minikube。在 Mac 上,你可以使用 Homebrew 进行安装,如下所示:

brew install minikube

更多关于 minikube 安装介绍,请查看文档:minikube.sigs.k8s.io/docs/start/

创建 Kubernetes 集群

创建一个 Kubernetes 集群非常容易,你只需在终端中运行命令 minikube start,此命令将启动 Minikube 并创建一个单节点 Kubernetes 集群。

如果你需要在本地环境中创建多节点 Kubernetes 集群,则可以使用 minikube start 命令的 --nodes 选项。例如,以下命令将在本地计算机上创建一个包含 3 个节点的 Kubernetes 集群:

minikube start --nodes 3

如果你需要指定 Kubernetes 版本,则可以使用 minikube start 命令的 --kubernetes-version 选项,如下所示:

minikube start --kubernetes-version v1.27.0

除此以外,minikube start 命令支持以下参数:

  • --cpus: 指定要为 Minikube 分配的 CPU 核心数量。
  • --memory: 指定要为 Minikube 分配的内存量。例如,您可以使用 --memory=4096 指定 4GB 的内存。
  • --disk-size: 分配给 minikube 虚拟机的磁盘大小(格式:<数字>[<单位>],其中单位 = b、k、m 或 g)。
  • --driver: 指定要在 Minikube 中使用的虚拟机驱动程序,目前支持 qemu2, docker, podman (experimental), ssh (defaults to auto-detect)
  • --kubernetes-version: 指定要在 Minikube 中使用的 Kubernetes 版本。例如,您可以使用 -kubernetes-version=v1.19.0 指定 Kubernetes 版本 1.19.0。
  • --cni: 使用 CNI 插件。可选包括:auto、bridge、calico、cilium、flannel、kindnet 或 CNI 配置清单的路径(默认值:auto)
  • --container-runtime: 指定要在 Minikube 中使用的容器运行时。例如,您可以使用 -container-runtime=docker 指定 Docker 容器运行时。

请注意,不同版本的 Minikube 支持的参数可能有所不同,你可以使用 minikube start --help 命令查看 Minikube 支持哪些参数。

Minikube Dashboard

Minikube Dashboard 是一个可视化的 Web 界面,用于管理和监控 Kubernetes 群集,你可以使用 Minikube Dashboard 查看群集状态、资源使用情况、节点和 Pod 等信息。

要打开 Minikube Dashboard,请在终端中运行以下命令:

minikube dashboard

此命令将打开默认的 Web 浏览器,并显示 Minikube Dashboard。

image.png

集群管理

查看本地所有集群:

minikube profile list

其中最后一列标 * 表示当前处于激活状态的集群

➜  ~ minikube profile list
|----------|-----------|---------|--------------|------|---------|---------|-------|--------|
| Profile  | VM Driver | Runtime |      IP      | Port | Version | Status  | Nodes | Active |
|----------|-----------|---------|--------------|------|---------|---------|-------|--------|
| dev      | docker    | docker  | 192.168.58.2 | 8443 | v1.27.3 | Running |     1 |        |
| minikube | docker    | docker  | 192.168.49.2 | 8443 | v1.27.3 | Running |     3 | *      |
|----------|-----------|---------|--------------|------|---------|---------|-------|--------|

查看当前集群:

minikube profile

切换集群:

minikube profile ${ProfileName}

删除所有集群:

minikube delete --all

部署应用程序

方式一:NodePort

首先,通过 kubectl create 命令创建一个 Deployment。

kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0

然后将其公开在 NodePort 上,并暴露端口 8080,这样,您就可以在端口 8080 上访问该服务。

kubectl expose deployment hello-minikube --type=NodePort --port=8080

接下来,您可以使用以下命令检查 service:

kubectl get services hello-minikube

最简单的访问这个 service 的方法是让 minikube 启动一个 Web 浏览器:

minikube service hello-minikube

或者,您也可以使用 kubectl 来转发端口:

kubectl port-forward service/hello-minikube 7080:8080

方式二:LoadBalancer

首先,创建一个 LoadBalancer 类型的 service

kubectl create deployment balanced --image=kicbase/echo-server:1.0
kubectl expose deployment balanced --type=LoadBalancer --port=8080

然后,在另一个窗口中,使用以下命令来启动隧道以为 balanced 部署创建可路由的 IP:

minikube tunnel

要查找可路由的 IP,请运行以下命令并检查 EXTERNAL-IP 列:

kubectl get services balanced

现在,可以通过 <EXTERNAL-IP>:8080 访问部署了。

这两种实现方式的区别在于服务类型,第一种方式使用了 NodePort 类型的服务,这意味着 Kubernetes 在集群的每个节点上打开一个端口,并将它们指向服务。这意味着您可以通过任意一个节点的 IP 地址和端口号访问服务。第二种方式使用了 LoadBalancer 类型的服务,这意味着 Kubernetes 将使用云提供商的负载均衡器将流量分配到集群中的节点。这种方式适用于在云环境中部署 Kubernetes 集群的情况。

Minikube 的局限性

尽管 Minikube 是一个非常好的工具,但它也有一些局限性:

  • 低资源:由于 Minikube 是一个轻量级的工具,因此它的资源受到限制。它只能支持有限数量的容器和服务。如果您需要测试更大规模的 Kubernetes 应用程序,您可以考虑使用其他工具,如 kubeadm。
  • 不适合生产环境: Minikube 不适合在生产环境中使用,它只能用于本地学习和开发。

总结

Minikube 是一个强大的工具,可以让 Kubernetes 的学习和开发变得更加容易。它简化了 Kubernetes 的配置和管理,并提供了一个本地 Kubernetes 集群,可以用于开发和测试应用程序。如果你是 Kubernetes 的新手或开发人员,请尝试使用 Minikube,了解 Kubernetes 的基础知识并快速入门。