在 Ubuntu 22 上深入了解和搭建 Minikube
Minikube 是一个开源工具,使开发者能够在本地计算机上运行单节点的 Kubernetes 集群,非常适合于开发、测试和学习 Kubernetes 的基础知识。在这篇文章中,我们将深入了解 Minikube 的工作原理,并提供在 Ubuntu 22 系统上搭建 Minikube 的详细步骤。
什么是 Minikube?
Minikube 是一个轻量级的 Kubernetes 实现,旨在帮助用户快速构建本地的 Kubernetes 环境。其核心特性包括:
- 单节点集群:Minikube 运行一个单节点的 Kubernetes 集群,适合开发和测试。
- 多种驱动:支持多种虚拟化驱动,包括 VirtualBox、VMware、Hyper-V 等,也支持通过 Docker 驱动在容器中运行。
- 易于使用:提供简单的命令行工具,便于集群的启动、停止和管理。
Minikube 的工作原理
Minikube 通过创建和管理虚拟机或容器来运行一个单节点的 Kubernetes 集群。它将 Kubernetes 的各个组件(如 API server、scheduler、controller-manager 等)运行在一个节点上。Minikube 还包括了一些有用的工具,如 kubectl 命令行工具,用于与 Kubernetes 集群进行交互。
在 Ubuntu 22 上安装 Minikube
安装依赖
首先,确保你的系统安装了必要的依赖项:
bash
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
安装 Docker
Minikube 可以使用 Docker 作为其虚拟化驱动程序。按照以下步骤安装 Docker:
bash
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
验证 Docker 是否安装成功:
bash
docker --version
示例输出:
Docker version 20.10.7, build f0df350
使用国内镜像安装 kubectl
由于网络原因无法访问 Google 的 Kubernetes 存储库,我们可以使用 Azure China 的 Kubernetes 镜像源来下载和安装 kubectl:
-
获取稳定版本号:
bashVERSION=$(curl -s https://mirror.azure.cn/kubernetes/kubectl/stable.txt) echo $VERSION
示例输出:
v1.22.0
-
下载 kubectl:
bashcurl -LO "https://mirror.azure.cn/kubernetes/kubectl/$VERSION/bin/linux/amd64/kubectl"
-
安装 kubectl:
bashsudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
-
验证安装:
bashkubectl version --client
示例输出:
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.0", GitCommit:"abcdef", GitTreeState:"clean", BuildDate:"2022-07-15T12:00:00Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"linux/amd64"}
安装 Minikube
从 Minikube 的官方网站下载并安装最新版本的 Minikube:
bash
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
验证 Minikube 是否安装成功:
bash
minikube version
示例输出:
minikube version: v1.33.1
commit: 2f223910e89575eb6b2cf301748c1126d88a1585
启动 Minikube
使用以下命令启动 Minikube:
bash
minikube start --driver=docker
示例输出:
😄 minikube v1.33.1 on Ubuntu 22.04 (vbox/amd64)
✨ Using the docker driver based on user configuration
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
🔥 Creating docker container (CPUs=2, Memory=4000MB) ...
🐳 Preparing Kubernetes v1.23.3 on Docker 20.10.7 ...
▪ kubelet.housekeeping-interval=5m
🚀 Launching Kubernetes ...
▪ apiserver.advertise-address=192.168.99.100
🌟 Enabling addons: default-storageclass, storage-provisioner
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
启用 Ingress 插件
为了使局域网内的其他机器能够访问 Minikube Dashboard,你需要启用 Ingress 插件:
bash
minikube addons enable ingress
示例输出:
💡 ingress is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
▪ Using image registry.k8s.io/ingress-nginx/controller:v1.10.1
▪ Using image registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.1
▪ Using image registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.1
🔎 Verifying ingress addon...
🌟 The 'ingress' addon is enabled
让局域网内其他机器访问 Minikube Dashboard
使用 kubectl port-forward
-
获取 Dashboard 服务名称:
bashkubectl get svc -n kubernetes-dashboard
示例输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes-dashboard ClusterIP 10.96.183.235 <none> 80/TCP 10m
-
进行端口转发:
bashkubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8080:80 --address 0.0.0.0 &
-
在局域网内的其他机器上,通过以下 URL 访问 Dashboard:
http://<your-host-ip>:8080/
其中
<your-host-ip>
是运行 Minikube 的主机的 IP 地址。如果需要后台运行,可以用nohup命令:
nohup kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8080:80 --address 0.0.0.0 > port-forward.log 2>&1 &
设置防火墙(可选)
如果你在机器上启用了防火墙,可能需要开放相应的端口:
bash
sudo ufw allow 8001
参考链接
- Minikube 官方文档:https://minikube.sigs.k8s.io/docs/
- Azure China Kubernetes 镜像:https://mirror.azure.cn/kubernetes/
- Docker 官方文档:https://docs.docker.com/
- Kubernetes 官方文档:https://kubernetes.io/docs/
- Kubectl 官方文档:https://kubernetes.io/docs/reference/kubectl/