minikube搭建Kubernetes环境
前言
Kubernetes 一般都运行在大规模的计算集群上,管理很严格,Kubernetes 充分考虑到了这方面的需求,提供了一些快速搭建 Kubernetes 环境的工具。
minikube 它是一个“迷你”版本的 Kubernetes,自从 2016 年发布以来一直在积极地开发维护,紧跟 Kubernetes 的版本更新,同时也兼容较旧的版本(最多只到之前的 6 个小版本)。
minikube 最大特点就是“小而美”,可执行文件仅有不到 100MB,运行镜像也不过 1GB,但就在这么小的空间里却集成了 Kubernetes 的绝大多数功能特性,不仅有核心的容器编排功能,还有丰富的插件,例如 Dashboard、GPU、Ingress、Istio、Kong、Registry 等等,综合来看非常完善。
minikube 官网:https://minikube.sigs.k8s.io/docs/
minikube 安装
minikube 的官网上提供了各种系统的安装命令,通常就是下载、拷贝这两步,不过你需要注意一下本机电脑的硬件架构,Intel 芯片要选择带“amd64”后缀,Apple M1 芯片要选择“arm64”后缀,选错了就会因为 CPU 指令集不同而无法运行。
minikube 它是用 Go 语言开发的,整体就是一个二进制文件,没有多余的依赖,所以安装过程也非常简单。
安装完成之后,你可以执行命令 minikube version,看看它的版本号,验证是否安装成功:
minikube version
kubectl安装
不过 minikube 只能够搭建 Kubernetes 环境,要操作 Kubernetes,还需要另一个专门的客户端工具“kubectl”。
kubectl 的作用有点类似之前我们学习容器技术时候的工具“docker”,它也是一个命令行工具,作用也比较类似,同样是与 Kubernetes 后台服务通信,把我们的命令转发给 Kubernetes,实现容器和集群的管理功能。
kubectl 是一个与 Kubernetes、minikube 彼此独立的项目,可以单独进行安装,所以不包含在 minikube 里,但 minikube 提供了安装它的简化方式,你只需执行下面的这条命令:
minikube kubectl
它就会把与当前 Kubernetes 版本匹配的 kubectl 下载下来,存放在内部目录,然后我们就可以使用它来对 Kubernetes“发号施令”了。
在 minikube 环境里,我们会用到两个客户端:minikube 管理 Kubernetes 集群环境,kubectl 操作实际的 Kubernetes 功能。
kubectl version
查看版本信息,还不能直接用,因为使用 minikube 自带的 kubectl 有一点形式上的限制,要在前面加上 minikube 的前缀,后面再有个 --,像这样:
minikube kubectl -- version
为了避免这个不大不小的麻烦,我建议你使用 Linux 的“alias”功能,为它创建一个别名,写到当前用户目录下的 .bashrc 里,也就是这样:
alias kubectl="minikube kubectl --"
另外,kubectl 还提供了命令自动补全的功能,你还应该再加上“kubectl completion”:
source <(kubectl completion bash)
现在,我们就可以愉快地使用 kubectl 了:
kubectl version --short
运行 minikube
使用命令 minikube start 会从 Docker Hub 上拉取镜像,以当前最新版本的 Kubernetes 启动集群。Kubernetes version to v1.24+ 以上的版本是一个分水岭,我们可以在后面再加上一个参数 --kubernetes-version,明确指定要使用 Kubernetes 版本。
minikube start --kubernetes-version=v1.23.3
如果安装失败,请先删除后再重新安装
minikube delete --all --purge
如果出现拉取镜像失败的情况,可以先尝试安装好对应的镜像文件:
docker pull anjone/kicbase
然后 minikube 在启动的时候使用本地的镜像,这样可以减少 minikube start 过程的耗时。
minikube start --vm-driver=docker --base-image="anjone/kicbase"
如果启动失败可以更换指定的镜像仓库
minikube start \
--kubernetes-version=v1.23.3
--registry-mirror=https://bmtb464.mirror.aliyuncs.com \
--vm-driver=docker \
--base-image="anjone/kicbase" \
--image-repository-registry.cn-hangzhou.aliyuncs.com/google_containers \
--force
- --kubernetes-version 指定 kubernetes 版本
- --registry-mirror 这里的地址会和启动的 minikube 内部的 docker.daemon 文件中所指向的镜像仓库地址一致
- --vm-driver 虚拟机引擎 这里是指 minikube 的内部通过 docker 来作为核心
- --base-image 声明好基础镜像,如果宿主机内部有对应镜像,就不需要额外拉取
- --image-repository 拉取镜像的仓库
- --force 如果使用 root 账号,需要加上此参数
启动成功
😄 Darwin 13.2.1 上的 minikube v1.29.0
🆕 Kubernetes 1.26.1 is now available. If you would like to upgrade, specify: --kubernetes-version=v1.26.1
✨ 根据现有的配置文件使用 docker 驱动程序
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
🔄 Restarting existing docker container for "minikube" ...
❗ This container is having trouble accessing https://k8s.gcr.io
💡 To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
🐳 正在 Docker 20.10.23 中准备 Kubernetes v1.23.3…
🔎 Verifying Kubernetes components...
▪ Using image docker.io/kubernetesui/metrics-scraper:v1.0.8
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
▪ Using image docker.io/kubernetesui/dashboard:v2.7.0
💡 Some dashboard features require the metrics-server addon. To enable all features please run:
minikube addons enable metrics-server
🌟 Enabled addons: storage-provisioner, default-storageclass, dashboard
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
v1.31.2 版本
minikube v1.31.2
包含了 kubectl
,不需要单独配置
😄 Darwin 13.5.1 上的 minikube v1.31.2
✨ 根据现有的配置文件使用 docker 驱动程序
👍 正在集群 minikube 中启动控制平面节点 minikube
🚜 正在拉取基础镜像 ...
E0914 15:06:10.984847 22646 cache.go:190] Error downloading kic artifacts: failed to download kic base image or any fallback image
🤷 docker "minikube" 缺失 container,将重新创建。
🔥 正在创建 docker container(CPUs=2,内存=4000MB)...
🐳 正在 Docker 24.0.4 中准备 Kubernetes v1.27.4…
▪ 正在生成证书和密钥...
▪ 正在启动控制平面...
▪ 配置 RBAC 规则 ...
🔗 配置 bridge CNI (Container Networking Interface) ...
🔎 正在验证 Kubernetes 组件...
▪ 正在使用镜像 gcr.io/k8s-minikube/storage-provisioner:v5
🌟 启用插件: storage-provisioner, default-storageclass
🏄 完成!kubectl 现在已配置,默认使用"minikube"集群和"default"命名空间