背景
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。
集群管理
查看本地所有集群:
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 的基础知识并快速入门。