目录

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%)
  1. CPU 使用情况
    • 当前所有 Pod 仅申请了 750m CPU(0.75核)
    • 节点还有 85% 的 CPU 资源(约 2.5 核)可用
    • 没有任何 Pod 设置了 CPU 限制(limits=0)
  2. 内存使用情况
    • 当前所有 Pod 仅使用了 170MB 内存
    • 节点还有 96% 的内存资源可用
    • 所有内存请求都匹配内存限制(requests=limits)
  3. 总体负载分析
    • 节点处于 极低负载状态(<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"]