minikube 安装操作 k8s 及常见问题解决
简介
首先,Minikube 是 Kubernetes 官方提供的,针对开发者本地最小化部署管理 Kubernetes 集群管理工具,专注于让 Kubernetes 易于学习和开发
官方文档:https://kubernetes.io/zh-cn/docs/tutorials/hello-minikube/
minikube文档:https://minikube.sigs.k8s.io/docs/start/?arch=%2Flinux%2Fx86-64%2Fstable%2Fbinary+download
本文基于 linux Centos 7、Centos 8 、OpenCloud OS 8/9 进行实操,带你一步一步的安装部署使用 minikube ,并且解决常见安装过程的坑问题
一、前置驱动安装
- 至少 2 CPUs 核
- 至少 2GB 内存
- 至少 20GB 磁盘
- 正常上网
- 需要提前安装 docker
- 其他驱动(一般的linux都具备):https://minikube.sigs.k8s.io/docs/drivers/
二、下载二进制包
在机器上执行
curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
如果 linux 机器下载慢,可以在本地下载然后上传到服务器
三、安装
sudo install minikube-linux-amd64 /usr/local/bin/minikube
四、启动
启动
minikube start
这是官方推荐的,但是由于环境问题,会有存在一堆的问题……
建议用我下面的命令
# docker 先下载基础镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.47
# 清理缓存
minikube delete ;
# 启动
minikube start --force --driver=docker --base-image='registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.47' --registry-mirror=https://mirror.ccs.tencentyun.com,https://docker.1panel.live,https://docker.3822334.xyz,https://docker.hpcloud.cloud,https://docker.m.daocloud.io,https://docker.unsee.tech,https://docker.1panel.live,http://mirrors.ustc.edu.cn,https://docker.chenby.cn,http://hub-mirror.c.163.com,https://docker.mirrors.ustc.edu.cn,https://registry.docker-cn.com,https://dockerhub.azk8s.cn,https://mirror.ccs.tencentyun.com,https://registry.cn-hangzhou.aliyuncs.com,https://hub.uuuadc.top
kicbase:v0.0.47: 这个版本在 minikube start 时会有,更新为自己安装时的版本即可
⚠️参数说明:官方默认指令为:
minikube start
--force --driver=docker
: 强制使用 root权限 docker driver--image-repository
: 指定 k8s 仓库--base-image
: 指定 base image(执行 minikube start 会有镜像版本)--registry-mirror
: 指定 docker 镜像仓库(建议添加国内镜像仓库,要不然下载速度只有100kb以内)--cpus
: 指定 cpu 个数(所有 pod 的 limit 总和,默认 2核)--memory
: 指定内存(所有 pod 的 limit 总和,默认2000mb)
到这里就安装完成了…..
💡 kubectl not found. If you need it, try: ‘minikube kubectl – get pods -A’ 🏄 Done! kubectl is now configured to use “minikube” cluster and “default” namespace by default
执行 minikube kubectl — 查看 pod 状态
[root@VM-20-17-opencloudos minikube]# minikube kubectl get pod -A
> kubectl.sha256: 64 B / 64 B [-------------------------] 100.00% ? p/s 0s
> kubectl: 868.34 KiB / 57.34 MiB [>_____] 1.48% 6.99 KiB p/s ETA 2h17m55s
首次执行会先安装 kubectl
四、其他设置(推荐)
(一)设置 kubectl 软链
minikube 会内置 minikube kubetcl 命令,有点麻烦,推荐做个软链
# 找到 minikube 可执行文件路径
which minikube # 输出示例:/usr/local/bin/minikube
# 创建 kubectl 软链接
sudo ln -s /usr/local/bin/minikube /usr/local/bin/kubectl
# 验证
kubectl version --client
然后你就可以使用 kubectl 操作 k8s 集群啦
到这里就已经安装完成了…….
五、其他命令
(一)访问 k8s 面板(选)
```bash
minikube dashboard
```
(二)移除 minikube
minikube delete
(三)查看 minukube 可用核数和可用内存
# 查看 Allocatable
kubectl describe node minikube
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 750m (18%) 0 (0%)
memory 170Mi (4%) 170Mi (4%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
- CPU 使用情况:
- 当前所有 Pod 仅申请了 750m CPU(0.75核)
- 节点还有 85% 的 CPU 资源(约 2.5 核)可用
- 没有任何 Pod 设置了 CPU 限制(limits=0)
- 内存使用情况:
- 当前所有 Pod 仅使用了 170MB 内存
- 节点还有 96% 的内存资源可用
- 所有内存请求都匹配内存限制(requests=limits)
- 总体负载分析:
- 节点处于 极低负载状态(<20% 资源使用率)
- 系统预留资源远大于实际需求(系统组件约占用 400m CPU + 500MB 内存)
- 有充足空间部署更多应用
其他命令见:https://minikube.sigs.k8s.io/docs/start/?arch=%2Flinux%2Fx86-64%2Fstable%2Fbinary+download
常见问题
1. minikube start 报错:No possible driver was detected
[root@VM-20-17-opencloudos minikube]# minikube start
😄 minikube v1.36.0 on Opencloudos 8.10.2407 (amd64)
👎 Unable to pick a default driver. Here is what was considered, in preference order:
💡 Alternatively you could install one of these drivers:
▪ docker: Not installed: exec: "docker": executable file not found in $PATH
▪ kvm2: Not installed: exec: "virsh": executable file not found in $PATH
▪ podman: Not installed: exec: "podman": executable file not found in $PATH
▪ qemu2: Not installed: exec: "qemu-system-x86_64": executable file not found in $PATH
▪ virtualbox: Not installed: unable to find VBoxManage in $PATH
❌ Exiting due to DRV_NOT_DETECTED: No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/
[root@VM-20-17-opencloudos minikube]#
缺少驱动,需要安装 docker,然后 minikube start --driver=docker
2. minikube start报错:The “docker” driver should not be used with root privileges.
[root@VM-20-17-opencloudos minikube]# minikube start --driver=docker
😄 minikube v1.36.0 on Opencloudos 8.10.2407 (amd64)
✨ Using the docker driver based on user configuration
🛑 The "docker" driver should not be used with root privileges. If you wish to continue as root, use --force.
💡 If you are running minikube within a VM, consider using --driver=none:
📘 https://minikube.sigs.k8s.io/docs/reference/drivers/none/
❌ Exiting due to DRV_AS_ROOT: The "docker" driver should not be used with root privileges.
[root@VM-20-17-opencloudos minikube]#
这是因为 docker 引擎不允许 root权限启动:https://docs.docker.com/engine/security/#docker-daemon-attack-surface
解决:
minikube start --force --driver=docker
3. 安装下载依赖太慢
[root@VM-20-17-opencloudos minikube]# minikube start --force --driver=docker
😄 minikube v1.36.0 on Opencloudos 8.10.2407 (amd64)
❗ minikube skips various validations when --force is supplied; this may lead to unexpected behavior
✨ Using the docker driver based on user configuration
🛑 The "docker" driver should not be used with root privileges. If you wish to continue as root, use --force.
💡 If you are running minikube within a VM, consider using --driver=none:
📘 https://minikube.sigs.k8s.io/docs/reference/drivers/none/
📌 Using Docker driver with root privileges
👍 Starting "minikube" primary control-plane node in "minikube" cluster
🚜 Pulling base image v0.0.47 ...
💾 Downloading Kubernetes v1.33.1 preload ...
> preloaded-images-k8s-v18-v1...: 13.22 MiB / 347.04 MiB 3.81% 20.45 KiB
这下载速度只有 200kb之内
网上看了很多教程,比如 minikube start --image-mirror-country='cn'
都没有用,
解决,使用国内镜像 –base-image 和 –registry-mirror
从上面的安装信息可以看到 Pulling base image v0.0.47 ...
docker下载国内对应镜像:
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.47
然后在安装
# 清理缓存
minikube delete ;
# 启动
minikube start --force --driver=docker --base-image='registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.47' --registry-mirror=https://mirror.ccs.tencentyun.com,https://docker.1panel.live,https://docker.3822334.xyz,https://docker.hpcloud.cloud,https://docker.m.daocloud.io,https://docker.unsee.tech,https://docker.1panel.live,http://mirrors.ustc.edu.cn,https://docker.chenby.cn,http://hub-mirror.c.163.com,https://docker.mirrors.ustc.edu.cn,https://registry.docker-cn.com,https://dockerhub.azk8s.cn,https://mirror.ccs.tencentyun.com,https://registry.cn-hangzhou.aliyuncs.com,https://hub.uuuadc.top
速度大幅提升….
🚜 Pulling base image v0.0.47 … 💾 Downloading Kubernetes v1.33.1 preload … > preloaded-images-k8s-v18-v1…: 52.17 MiB / 347.04 MiB 15.03% 3.35 MiB
4. Minikube start 报错 kicbase 镜像拉取失败
报错:
minikube cannot pull kicbase image from any docker registry, and is trying to download kicbase tarball from github release page via HTTP. ❗ It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configure is:
和【问题3】一致,就是依赖下载慢导致的,替换镜像和镜像仓库即可
5 minikube pod镜像拉取失败
docker images 镜像是存在的,但是 minikube pod 报错 ImagePullErr
这是因为 宿主机的 docker 镜像和 minikube 启动的docker镜像无法共享,所以导致宿主机虽然存在镜像,但是 pod启动找不到镜像的问题
解决:
方式一:使用 minikube 提供的方法
# 执行可以看到 minikube 提供一个命令
[root@VM script]# minikube docker-env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.49.2:2376"
export DOCKER_CERT_PATH="/root/.minikube/certs"
export MINIKUBE_ACTIVE_DOCKERD="minikube"
# To point your shell to minikube's docker-daemon, run:
# eval $(minikube -p minikube docker-env)
执行最后一句
# 大概意思是,设置当前的 shell 作为 minikube 的镜像环境
[root@VM script]# eval $(minikube -p minikube docker-env)
然后再执行你的 docker build 构建镜像,执行后 pod 就可以正常启动了
也可以先使用以下命令查看镜像是否存在 minikube
[root@VM script]# minikube image ls --format table
总结:每次构建镜像时,先执行eval $(minikube -p minikube docker-env)
,这样子就可以正常使用了
方式二(推荐):
宿主机构建完成后,同步到 minikube
minikube image load 镜像名
镜像越大,同步越久
6. minikube service 外网无法访问
这是因为 minikube 是一个虚拟环境,pod 是启动在这个虚拟环境里,而不是在宿主机上,所以通过 127.0.0.1:port 是访问不了,只能通过:节点虚拟ip访问
比如我这里访问 pod service 30890 访问
# 访问不了
curl http://127.0.0.1:30890
# 正常访问,$(minikube ip) 为 miniube 的节点IP
curl http://$(minikube ip):30890
7. Centos 7.6 pod 启动失败:
coredns: Listen: listen tcp :53: bind: permission denied
kubectl edit deployment coredns -n kube-system
然后在 containers 下添加
containers:
- name: coredns
securityContext:
allowPrivilegeEscalation: false
capabilities:
add: ["NET_BIND_SERVICE"]
drop: ["all"]