一、简介

本文是在almalinux9.6系统上用minikube快速部署k8s集群。
当你想要练习、验证或者查看k8s集群某些参数执行某些命令的时候,快速拉起一个k8s集群进行操作。这里不需要外网,所有容器镜像都是本地下载的,所需要的命令安装文件也是本地下载的,甚至做实验的两个nginx容器镜像也准备好了。
使用的虚机是按照之前文章创建出来的,这里我只用一台机器,资源给的多一点。
PS:我做实验这段时间非常不巧,好像是因为什么dns污染导致公网容器镜像无法正常下载,这里涉及到的容器镜像或者是命令文件我都下载到本地了,避免每次部署环境进行网络下载延长部署时间。

系统 版本
almalinux9.6 5.14.0-570.12.1.el9_6.x86_64
minikube v1.36.0
docker 28.3.3
kubectl v1.33.0

kubernetes官方文档:kubernetes官方文档
minikube安装文档:kubernetes-minikube安装文档
minikube-v1.33部署压缩包:百度云

官方文档查看目前版本最新的是1.33那就部署1.33的。
在这里插入图片描述
官方文档给的实验虚机配置在这里,minikube官网要求的。
根据自己电脑配置来就好了,最低保证下面这个资源配置,我这里给的是4C8G,资源多一点,执行快。兄弟们自己选择哈!
在这里插入图片描述

二、部署安装

minikube部署起来相对简单,安装个docker+安装kubectl命令+部署minikube环境。但是中间有个前提,你的网络没得问题,公网源是好使的,容器镜像和下载的部署文件是可以正常下载的,不然你就傻了!
我这里也是被网上文档坑了,什么一键化部署,最全教程,进去一看就是给个minikube start命令就完了,也没说执行不下去怎么办?是否有其他办法?我这也是寸,正好做实验赶上什么dns污染公网不好使,下载个容器镜像清一水超时,是真打击我自信心。
为了避免兄弟们遇到和我类似的问题,我直接将部署中涉及到容器镜像+安装命令都下载到本地了,放到百度云盘中了,大家自取哈!

创建普通用户+下载压缩包

minikube的安装命令是要求使用普通用户进行创建的,如果使用root用户会和你扯什么安全不规范啥的,但是我看官方文档是没有提示的,真坑。
这里我们创建secure普通用户然后将它加到wheel组里面方便我们进行提权,然后将123作为用户密码设置。如果你是从almalinux9.6系统-基础环境准备过来的那么就不用操作了,因为已经创建并设置了。

useradd secure;usermod -aG wheel secure;echo 123 | passwd --stdin secure;su - secure

接着我们从百度云下载压缩包放到secure用户的家目录里面——》/home/secure/

[root@localhost minikube-kubernetes-1.33-20250704]# pwd
/home/secure/minikube-kubernetes-1.33-20250704
[root@localhost minikube-kubernetes-1.33-20250704]# ll
total 2861732
-rw-r--r-- 1 secure secure 1320816128 Aug 14 09:46 gcr.io-k8s-minikube-kicbase-v0.0.47.tar
-rw-r--r-- 1 secure secure     584254 Aug 14 09:43 kube-ps1-master.zip
-rw-r--r-- 1 secure secure      40064 Aug 14 09:43 kube-shell-master.zip
-rw-r--r-- 1 secure secure   60121272 Aug 14 09:43 kubectl
-rw-r--r-- 1 secure secure   59146424 Aug 14 09:43 kubectl-convert
-rw-r--r-- 1 secure secure         64 Aug 14 09:43 kubectl-convert.sha256
-rw-r--r-- 1 secure secure         64 Aug 14 09:43 kubectl.sha256
-rw-r--r-- 1 secure secure     569098 Aug 14 09:43 kubectx-master.zip
-rw-r--r-- 1 secure secure  334633984 Aug 14 09:46 mariadb-latest.tar
-rw-r--r-- 1 secure secure  132766301 Aug 14 09:46 minikube-linux-amd64
-rw-r--r-- 1 secure secure  196626944 Aug 14 09:46 nginx-1.27.5.tar
-rw-r--r-- 1 secure secure  196636160 Aug 14 09:46 nginx-1.28.0.tar
-rw-r--r-- 1 secure secure  196392960 Aug 14 09:46 nginx-latest-1.29.0.tar
-rw-r--r-- 1 secure secure  363893849 Aug 14 09:46 preloaded-images-k8s-v18-v1.33.1-docker-overlay2-amd64.tar.lz4
-rw-r--r-- 1 secure secure         16 Aug 14 09:46 preloaded-images-k8s-v18-v1.33.1-docker-overlay2-amd64.tar.lz4.checksum
-rw-r--r-- 1 secure secure   68151808 Aug 14 09:46 registry.k8s.io-metrics-server-metrics-server-v0.7.2.tar
[root@localhost minikube-kubernetes-1.33-20250704]# 

压缩包中部署minikube涉及到的容器镜像还有我们需要安装的命令都下载到本地了,直接命令安装就好了,这里两个nginx压缩包是两个nginx容器镜像,这里下载两个不同版本的方便我们在验证回滚命令的时候进行实验。

名称 作用
gcr.io-k8s-minikube-kicbase-v0.0.47.tar 启动k8s导入镜像【必须导入】
preloaded-images-k8s-v18-v1.33.1-docker-overlay2-amd64.tar.lz4 预加载的镜像文件【必须导入】
preloaded-images-k8s-v18-v1.33.1-docker-overlay2-amd64.tar.lz4.checksum 预加载的镜像文件的校验码
kubectl kubectl命令【必装】
kubectl.sha256 kubectl命令的校验码
minikube-linux-amd64 minikube的命令【必装】
nginx-1.28.0.tar nginx的容器镜像
nginx-1.27.5.tar nginx的容器镜像

docker-ce安装

我这里docker-ce源已经准备好了,直接安装就可以,如果你没有的话可以参考我上一篇文章almalinux9.6系统-基础环境准备中yum源配置进行操作。
在这里插入图片描述

直接安装docker-ce软件包然后设置开机启动
——》这里正常流程需要设置下镜像加速,但是我容器镜像都下载好了,就不用了,确保dcoker服务是启动的就好

yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里给兄弟们演示下公网不好使,镜像无法正常拉取的情况
——》我们没配置镜像加速,配置了也是这个状态,我当时第一次部署都纳了闷了,我知道外网不稳定但也不至于不稳定到每次都超时失败吧,最后一百度才知道,dns被污染,国内访问公网容器仓库完全不通,真寸。
在这里插入图片描述

容器镜像导入

我们导入三个容器镜像,一个是部署minikube时候使用的,剩下两个是为了后续做实验的。

docker load -i gcr.io-k8s-minikube-kicbase-v0.0.47.tar
docker load -i nginx-1.27.5.tar
docker load -i nginx-1.28.0.tar
docker images

在这里插入图片描述
在这里插入图片描述

将预加载镜像压缩包放到对应位置,这里是minikube部署时候自己会到这里找到并且加载
——》【这里是在家目录创建,我使用的是secure普通用户了】

mkdir -p ~/.minikube/cache/preloaded-tarball/
cp preloaded-images-k8s-v18-v1.33.1-docker-overlay2-amd64.tar.lz4 ~/.minikube/cache/preloaded-tarball/
ll ~/.minikube/cache/preloaded-tarball/

在这里插入图片描述

minikube安装

安装下kubectl命令和minikube命令我都下载好了,直接安装就好。

install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
install minikube-linux-amd64 /usr/local/bin/minikube
kubectl version --client
minikube version

在这里插入图片描述

现在我们docker-ce安装完成了;部署镜像也都导入了;kubectl+minikube命令也是正常安装了;可以通过minikube来拉起kubernetes集群了

### 切换secure用户执行
minikube start --driver=docker
### 使用root用户执行
minikube start --driver=docker --force

这里演示下我上面说的官方文档坑了,操作到现在我都是在root用户下执行的,你要是不切换secure普通用户这里直接执行minikube命令就会这样
PS:他会提示你,你是用root用户启动的,这里是不建议的,为了安全起见建议使用普通用户来进行启动,吧啦吧啦!
PPS:命令也显示了,你要是非要用root用户也可以,命令后面加个–force也能强制安装。
PPPS:我这种菜鸡当然是不敢了,还是按照提示来吧,切换个secure普通用户进行安装。
在这里插入图片描述
使用普通用户执行安装命令提示没有docker授权
——》按照命令提示符来,通过sudo命令手动给secure用户授权下
PS:这里注意下,你准备时候是root用户执行任何命令都可以,你是管理员,为所欲为。现在你是secure普通用户,尤其是当你想执行一些root身份才能执行的命令,可以用sudo命令提权,但是提权的前提是什么?得有root用户给你授权了才行,我上面创建secure用户为什么把他加入wheel组里面,因为sudo提权的配置文件中指定了wheel用户组可以提权。或者是用下面这个命令让所有普通用户都可以使用sudo执行任何命令,实验环境添加方便简捷。

echo "secure ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
sudo usermod -aG docker $USER && newgrp docker

在这里插入图片描述
接着再执行就可以了,这里我们可以看到加载镜像一样的回显——》这里是我们放到预加载目录中的镜像压缩包,程序找到了解压之后进行镜像导入,
在这里插入图片描述
这就是部署完成了,我们使用minikube拉起了一个1.33版本的kubernetes环境
在这里插入图片描述

我们可以查看下minikube节点状态+k8s组件状态还有集群信息

minikube node list
kubectl get pods -A
kubectl cluster-info 

在这里插入图片描述

minikube容器镜像导入

eval $(minikube docker-env)
cd /home/secure/minikube-kubernetes-1.33-20250704/
docker load -i nginx-latest-1.29.0.tar
docker load -i nginx-1.28.0.tar

这里我们可以将环境变量指向minikube的docker-env守护进程然后将容器镜像传进去——》上传完可以查看下的确是有了
在这里插入图片描述

我们创建个pod玩玩——》之前导入了nginx镜像看下是否能正常启动【不能】

kubectl run nginx-app --image=nginx:1.28.0
kubectl get pods
kubectl logs pods/nginx-app
kubectl describe pods nginx-app 

在这里插入图片描述
为什么之前导入了nginx容器惊险现在pod创建调用的时候找不到呢?是我们导入有问题吗?
在这里插入图片描述
docker images查看是没问题的,这是为毛?
在这里插入图片描述
我们可以看下minikube给我启动的k8s集群到底是个什么东西——》一个docker’容器,我们使用kubectl命令启动的pod拉取这个容器中的镜像,那肯定是没有得了,这里我们需要进入容器将镜像导入下。
在这里插入图片描述

eval $(minikube docker-env)
cd /home/secure/minikube-kubernetes-1.33-20250704/
docker load -i nginx-latest-1.29.0.tar
docker load -i nginx-1.28.0.tar

这里我们可以将环境变量指向minikube的docker-env守护进程然后将容器镜像传进去——》上传完可以查看下的确是有了
在这里插入图片描述

当我们将nginx容器镜像上传进来之后,这个pod找到容器镜像自己就起来了。
在这里插入图片描述

三、minikube常用命令

minikube start 				#强制启动
minikube status				#查看集群状态
minikube pause 				#挂起
minikube unpause			#放下来
minikube addons list		#查看加载的模块
minikube stop				#关闭集群
minikube delete --all		#删除集群

minikube start --driver=docker				#普通用户启动
minikube start --driver=docker --force		#root用户启动

挂起就是将kubelet给停了然后将api给挂起了。
在这里插入图片描述

查看下minikube加载的模块
在这里插入图片描述
到现在almalinux9.6系统下用minikube部署1.33版本k8s集群就完成了,镜像也导入了,服务状态正常,pod能够正常创建。

四、部署报错

这下面报错是我自己部署的时候遇到的问题,记录了一些,有些小问题直接百度解决了也就没有记录。
还有就是minikube构建出来的k8s集群定位一定要准备,你创建出来就是为了节省资源和快速创建出来,你执行点命令啦!查看参数!查看配置啥的都可以,千万!千万!千万!不要部署额外的,比如dashboard+ingress等组件,部署不出来就是部署出来也无法正常访问,毕竟minikube拉起来的环境就是个容器,他里面创建的pod也好安装下dashboard都是无法访问的,别挣扎,你就熟悉命令就好了。如果你就是想看到dashboard页面,感觉下页面点点的快乐,那么请看我下一篇使用kubeadm部署kubernetes集群,他是直接在虚机上启动的,你可以这时候部署了dashboard和ingress查看现象。

报错1:拉取容器镜像超时

[root@vlinux100010 ~]# minikube start --driver=docker --force
* minikube v1.36.0 on Centos 7.6.1810
! minikube skips various validations when --force is supplied; this may lead to unexpected behavior
* Using the docker driver based on existing profile
* 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/
* Tip: To remove this root owned cluster, run: sudo minikube delete
* Starting "minikube" primary control-plane node in "minikube" cluster
* Pulling base image v0.0.47 ...
! 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:

E0701 12:10:48.209340   11271 cache.go:225] Error downloading kic artifacts:  failed to download kic base image or any fallback image
* docker "minikube" container is missing, will recreate.
* Creating docker container (CPUs=2, Memory=2200MB) ...
! StartHost failed, but will try again: recreate: creating host: create: creating: setting up container node: preparing volume for minikube container: docker run --rm --name minikube-preload-sidecar --label created_by.minikube.sigs.k8s.io=true --label name.minikube.sigs.k8s.io=minikube --entrypoint /usr/bin/test -v minikube:/var gcr.io/k8s-minikube/kicbase:v0.0.47@sha256:6ed579c9292b4370177b7ef3c42cc4b4a6dcd0735a1814916cbc22c8bf38412b -d /var/lib: exit status 125
stdout:

stderr:
Unable to find image 'gcr.io/k8s-minikube/kicbase:v0.0.47@sha256:6ed579c9292b4370177b7ef3c42cc4b4a6dcd0735a1814916cbc22c8bf38412b' locally
docker: Error response from daemon: Get "https://gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
See 'docker run --help'.

* docker "minikube" container is missing, will recreate.
* Creating docker container (CPUs=2, Memory=2200MB) ...
* Failed to start docker container. Running "minikube delete" may fix it: recreate: creating host: create: creating: setting up container node: preparing volume for minikube container: docker run --rm --name minikube-preload-sidecar --label created_by.minikube.sigs.k8s.io=true --label name.minikube.sigs.k8s.io=minikube --entrypoint /usr/bin/test -v minikube:/var gcr.io/k8s-minikube/kicbase:v0.0.47@sha256:6ed579c9292b4370177b7ef3c42cc4b4a6dcd0735a1814916cbc22c8bf38412b -d /var/lib: exit status 125
stdout:

stderr:
Unable to find image 'gcr.io/k8s-minikube/kicbase:v0.0.47@sha256:6ed579c9292b4370177b7ef3c42cc4b4a6dcd0735a1814916cbc22c8bf38412b' locally
docker: Error response from daemon: Get "https://gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
See 'docker run --help'.


X Exiting due to GUEST_PROVISION: error provisioning guest: Failed to start host: recreate: creating host: create: creating: setting up container node: preparing volume for minikube container: docker run --rm --name minikube-preload-sidecar --label created_by.minikube.sigs.k8s.io=true --label name.minikube.sigs.k8s.io=minikube --entrypoint /usr/bin/test -v minikube:/var gcr.io/k8s-minikube/kicbase:v0.0.47@sha256:6ed579c9292b4370177b7ef3c42cc4b4a6dcd0735a1814916cbc22c8bf38412b -d /var/lib: exit status 125
stdout:

stderr:
Unable to find image 'gcr.io/k8s-minikube/kicbase:v0.0.47@sha256:6ed579c9292b4370177b7ef3c42cc4b4a6dcd0735a1814916cbc22c8bf38412b' locally
docker: Error response from daemon: Get "https://gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
See 'docker run --help'.

* 
╭─────────────────────────────────────────────────────────────────────────────────────────────╮
│                                                                                             │
│    * If the above advice does not help, please let us know:                                 │
│      https://github.com/kubernetes/minikube/issues/new/choose                               │
│                                                                                             │
│    * Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.    │
│                                                                                             │
╰─────────────────────────────────────────────────────────────────────────────────────────────╯

[root@vlinux100010 ~]# 

报错2:使用普通用户安装提示没得驱动程序可用

[secure@DESKTOP-7I5OOBB ~]$ minikube start
* minikube v1.36.0 on Almalinux 9.6 (amd64)
* Unable to pick a default driver. Here is what was considered, in preference order:
  - docker: Not healthy: "docker version --format {{.Server.Os}}-{{.Server.Version}}:{{.Server.Platform.Name}}" exit status 1: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.51/version": dial unix /var/run/docker.sock: connect: permission denied
  - docker: Suggestion: Add your user to the 'docker' group: 'sudo usermod -aG docker $USER && newgrp docker' <https://docs.docker.com/engine/install/linux-postinstall/>
* Alternatively you could install one of these drivers:
  - 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

X Exiting due to DRV_NOT_HEALTHY: Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.

[secure@DESKTOP-7I5OOBB ~]$ docker ps -a
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.51/containers/json?all=1": dial unix /var/run/docker.sock: connect: permission denied
[secure@DESKTOP-7I5OOBB ~]$
#这里是普通用户没有操作docker的权限,手动授权下就好【sudo usermod -aG docker $USER && newgrp docker】

报错3:启动dashboard报错-提示找不到镜像

[secure@DESKTOP-7I5OOBB ~]$ minikube dashboard
* Verifying dashboard health ...
* Launching proxy ...
* Verifying proxy health ...

X Exiting due to SVC_URL_TIMEOUT: http://127.0.0.1:40749/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ is not accessible: Temporary Error: unexpected response code: 503
[secure@DESKTOP-7I5OOBB ~]$ 

[secure@DESKTOP-7I5OOBB ~]$ kubectl get pod -A
NAMESPACE              NAME                                         READY   STATUS             RESTARTS      AGE
kube-system            coredns-674b8bbfcf-g8jv6                     1/1     Running            0             38m
kube-system            coredns-674b8bbfcf-llhnq                     1/1     Running            0             38m
kube-system            etcd-minikube                                1/1     Running            0             39m
kube-system            kube-apiserver-minikube                      1/1     Running            0             39m
kube-system            kube-controller-manager-minikube             1/1     Running            1 (39m ago)   39m
kube-system            kube-proxy-tqrv9                             1/1     Running            0             38m
kube-system            kube-scheduler-minikube                      1/1     Running            0             39m
kube-system            metrics-server-7fbb699795-f8d76              0/1     ImagePullBackOff   0             11m
kube-system            storage-provisioner                          1/1     Running            0             39m
kubernetes-dashboard   dashboard-metrics-scraper-5d59dccf9b-7qs6h   0/1     ImagePullBackOff   0             22m
kubernetes-dashboard   kubernetes-dashboard-7779f9b69b-75tp2        0/1     ImagePullBackOff   0             22m
[secure@DESKTOP-7I5OOBB ~]$ 

[secure@DESKTOP-7I5OOBB ~]$ kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
dashboard-metrics-scraper   ClusterIP   10.96.191.186   <none>        8000/TCP   24m
kubernetes-dashboard        ClusterIP   10.99.149.109   <none>        80/TCP     24m
[secure@DESKTOP-7I5OOBB ~]$ 

[secure@DESKTOP-7I5OOBB ~]$ kubectl get pods -n kubernetes-dashboard
NAME                                         READY   STATUS             RESTARTS   AGE
dashboard-metrics-scraper-5d59dccf9b-7qs6h   0/1     ImagePullBackOff   0          25m
kubernetes-dashboard-7779f9b69b-75tp2        0/1     ImagePullBackOff   0          25m
[secure@DESKTOP-7I5OOBB ~]$

[secure@DESKTOP-7I5OOBB ~]$ kubectl describe pod kubernetes-dashboard-7779f9b69b-75tp2 -n kubernetes-dashboard
Name:             kubernetes-dashboard-7779f9b69b-75tp2
Namespace:        kubernetes-dashboard
Priority:         0
Service Account:  kubernetes-dashboard
Node:             minikube/192.168.49.2
Start Time:       Fri, 04 Jul 2025 10:19:40 +0800
Labels:           gcp-auth-skip-secret=true
                  k8s-app=kubernetes-dashboard
                  pod-template-hash=7779f9b69b
Annotations:      <none>
Status:           Pending
IP:               10.244.0.5
IPs:
  IP:           10.244.0.5
Controlled By:  ReplicaSet/kubernetes-dashboard-7779f9b69b
Containers:
  kubernetes-dashboard:
    Container ID:  
    Image:         docker.io/kubernetesui/dashboard:v2.7.0@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93
    Image ID:      
    Port:          9090/TCP
    Host Port:     0/TCP
    Args:
      --namespace=kubernetes-dashboard
      --enable-skip-login
      --disable-settings-authorizer
    State:          Waiting
      Reason:       ImagePullBackOff
    Ready:          False
    Restart Count:  0
    Liveness:       http-get http://:9090/ delay=30s timeout=30s period=10s #success=1 #failure=3
    Environment:    <none>
    Mounts:
      /tmp from tmp-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9jb4j (ro)
Conditions:
  Type                        Status
  PodReadyToStartContainers   True 
  Initialized                 True 
  Ready                       False 
  ContainersReady             False 
  PodScheduled                True 
Volumes:
  tmp-volume:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
  kube-api-access-9jb4j:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    Optional:                false
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              kubernetes.io/os=linux
Tolerations:                 node-role.kubernetes.io/master:NoSchedule
                             node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                    From               Message
  ----     ------     ----                   ----               -------
  Normal   Scheduled  32m                    default-scheduler  Successfully assigned kubernetes-dashboard/kubernetes-dashboard-7779f9b69b-75tp2 to minikube
  Warning  Failed     29m (x2 over 30m)      kubelet            Failed to pull image "docker.io/kubernetesui/dashboard:v2.7.0@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93": Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded
  Normal   Pulling    28m (x5 over 32m)      kubelet            Pulling image "docker.io/kubernetesui/dashboard:v2.7.0@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93"
  Warning  Failed     27m (x3 over 31m)      kubelet            Failed to pull image "docker.io/kubernetesui/dashboard:v2.7.0@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93": Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Warning  Failed     27m (x5 over 31m)      kubelet            Error: ErrImagePull
  Normal   BackOff    2m19s (x119 over 31m)  kubelet            Back-off pulling image "docker.io/kubernetesui/dashboard:v2.7.0@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93"
  Warning  Failed     101s (x122 over 31m)   kubelet            Error: ImagePullBackOff
[secure@DESKTOP-7I5OOBB ~]$

[secure@DESKTOP-7I5OOBB ~]$ kubectl describe pod dashboard-metrics-scraper-5d59dccf9b-7qs6h -n kubernetes-dashboard
Name:             dashboard-metrics-scraper-5d59dccf9b-7qs6h
Namespace:        kubernetes-dashboard
Priority:         0
Service Account:  kubernetes-dashboard
Node:             minikube/192.168.49.2
Start Time:       Fri, 04 Jul 2025 10:19:40 +0800
Labels:           k8s-app=dashboard-metrics-scraper
                  pod-template-hash=5d59dccf9b
Annotations:      seccomp.security.alpha.kubernetes.io/pod: runtime/default
Status:           Pending
IP:               10.244.0.4
IPs:
  IP:           10.244.0.4
Controlled By:  ReplicaSet/dashboard-metrics-scraper-5d59dccf9b
Containers:
  dashboard-metrics-scraper:
    Container ID:   
    Image:          docker.io/kubernetesui/metrics-scraper:v1.0.8@sha256:76049887f07a0476dc93efc2d3569b9529bf982b22d29f356092ce206e98765c
    Image ID:       
    Port:           8000/TCP
    Host Port:      0/TCP
    State:          Waiting
      Reason:       ImagePullBackOff
    Ready:          False
    Restart Count:  0
    Liveness:       http-get http://:8000/ delay=30s timeout=30s period=10s #success=1 #failure=3
    Environment:    <none>
    Mounts:
      /tmp from tmp-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-kwtjf (ro)
Conditions:
  Type                        Status
  PodReadyToStartContainers   True 
  Initialized                 True 
  Ready                       False 
  ContainersReady             False 
  PodScheduled                True 
Volumes:
  tmp-volume:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
  kube-api-access-kwtjf:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    Optional:                false
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              kubernetes.io/os=linux
Tolerations:                 node-role.kubernetes.io/master:NoSchedule
                             node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                    From               Message
  ----     ------     ----                   ----               -------
  Normal   Scheduled  34m                    default-scheduler  Successfully assigned kubernetes-dashboard/dashboard-metrics-scraper-5d59dccf9b-7qs6h to minikube
  Warning  Failed     31m (x3 over 33m)      kubelet            Failed to pull image "docker.io/kubernetesui/metrics-scraper:v1.0.8@sha256:76049887f07a0476dc93efc2d3569b9529bf982b22d29f356092ce206e98765c": Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded
  Normal   Pulling    29m (x5 over 34m)      kubelet            Pulling image "docker.io/kubernetesui/metrics-scraper:v1.0.8@sha256:76049887f07a0476dc93efc2d3569b9529bf982b22d29f356092ce206e98765c"
  Warning  Failed     29m (x2 over 33m)      kubelet            Failed to pull image "docker.io/kubernetesui/metrics-scraper:v1.0.8@sha256:76049887f07a0476dc93efc2d3569b9529bf982b22d29f356092ce206e98765c": Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Warning  Failed     29m (x5 over 33m)      kubelet            Error: ErrImagePull
  Normal   BackOff    3m59s (x118 over 33m)  kubelet            Back-off pulling image "docker.io/kubernetesui/metrics-scraper:v1.0.8@sha256:76049887f07a0476dc93efc2d3569b9529bf982b22d29f356092ce206e98765c"
  Warning  Failed     3m44s (x119 over 33m)  kubelet            Error: ImagePullBackOff
[secure@DESKTOP-7I5OOBB ~]$ 
[secure@DESKTOP-7I5OOBB ~]$ kubectl get pods -n kubernetes-dashboard
NAME                                         READY   STATUS             RESTARTS   AGE
dashboard-metrics-scraper-5d59dccf9b-7qs6h   0/1     ImagePullBackOff   0          34m
kubernetes-dashboard-7779f9b69b-75tp2        0/1     ImagePullBackOff   0          34m
[secure@DESKTOP-7I5OOBB ~]$ kubectl get pods -n kubernetes-dashboard
NAME                                         READY   STATUS             RESTARTS   AGE
dashboard-metrics-scraper-5d59dccf9b-7qs6h   0/1     ImagePullBackOff   0          34m
kubernetes-dashboard-7779f9b69b-75tp2        0/1     ImagePullBackOff   0          34m
[secure@DESKTOP-7I5OOBB ~]$ 

[secure@DESKTOP-7I5OOBB ~]$ docker images
REPOSITORY                                         TAG        IMAGE ID       CREATED       SIZE
nginx                                              latest     9592f5595f2b   9 days ago    192MB
centos                                             latest     f33f23011f68   2 weeks ago   1.51GB
next-centos-raw                                    20250619   f33f23011f68   2 weeks ago   1.51GB
docker.xuanyuan.dev/kicbase/stable                 v0.0.47    795ea6a69ce6   6 weeks ago   1.31GB
gcr.io/k8s-minikube/kicbase                        v0.0.47    795ea6a69ce6   6 weeks ago   1.31GB
kubernetesui/dashboard                             v2.7.0     07655ddf2eeb   2 years ago   246MB
docker.xuanyuan.dev/kubernetesui/dashboard         v2.7.0     07655ddf2eeb   2 years ago   246MB
docker.xuanyuan.dev/kubernetesui/metrics-scraper   v1.0.8     115053965e86   3 years ago   43.8MB
kubernetesui/metrics-scraper                       v1.0.8     115053965e86   3 years ago   43.8MB
[secure@DESKTOP-7I5OOBB ~]$ 

#——》这里查看报错还是没有容器镜像闹得
1、首先我们需要edit下deployment中的镜像地址
2、接着按照报错6中的方法进行镜像导入才可以

在 Pod 或 Deployment 的 YAML 文件中指定镜像拉取策略为 IfNotPresent 或 Never:
spec:
  containers:
  - name: my-container
    image: my-local-image:latest
    imagePullPolicy: IfNotPresent  # 优先使用本地镜像

[secure@DESKTOP-7I5OOBB ~]$ kubectl get deployment -n kubernetes-dashboard
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
dashboard-metrics-scraper   1/1     1            1           170m
kubernetes-dashboard        0/1     1            0           170m
[secure@DESKTOP-7I5OOBB ~]$ 

[secure@DESKTOP-7I5OOBB ~]$ kubectl edit deployment/kubernetes-dashboard -n kubernetes-dashboard
deployment.apps/kubernetes-dashboard edited
[secure@DESKTOP-7I5OOBB ~]$ 
 41       containers:
 42       - args:
 43         - --namespace=kubernetes-dashboard
 44         - --enable-skip-login
 45         - --disable-settings-authorizer
 46         image: docker.io/kubernetesui/dashboard:v2.7.0@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93
 47         imagePullPolicy: IfNotPresent
#修改后
 46         image: kubernetesui/dashboard:v2.7.0
 47         imagePullPolicy: IfNotPresent

#修改完成之后再查看pod的状态就是正常的了
[secure@DESKTOP-7I5OOBB ~]$ kubectl get pods -n kubernetes-dashboard
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-7d79b4b879-nlk8w   1/1     Running   0          107m
kubernetes-dashboard-5965c785b7-rxmjm        1/1     Running   0          28s
[secure@DESKTOP-7I5OOBB ~]$ 

#接着检查还有一个pod是异常的
[secure@DESKTOP-7I5OOBB ~]$ kubectl get pods -A
NAMESPACE              NAME                                         READY   STATUS             RESTARTS        AGE
……
kube-system            metrics-server-7fbb699795-f8d76              0/1     ImagePullBackOff   0               3h7m
……

#老样子查看下deployment然后进入pod修改下容器名称
[secure@DESKTOP-7I5OOBB ~]$ kubectl get deployment -n kube-system
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
coredns          2/2     2            2           3h35m
metrics-server   0/1     1            0           3h8m
[secure@DESKTOP-7I5OOBB ~]$ 
[secure@DESKTOP-7I5OOBB ~]$ kubectl edit deployment/metrics-server -n kube-system
deployment.apps/metrics-server edited
[secure@DESKTOP-7I5OOBB ~]$ 

 49         image: registry.k8s.io/metrics-server/metrics-server:v0.7.2@sha256:ffcb2bf004d6aa0a17d90e0247cf94f2865c8901dcab4427034c341951c239f9
 50         imagePullPolicy: IfNotPresent

#修改后
 49         image: registry.k8s.io/metrics-server/metrics-server:v0.7.2
 50         imagePullPolicy: IfNotPresent

[root@DESKTOP-7I5OOBB secure]# docker pull docker.xuanyuan.dev/dyrnq/metrics-server:v0.7.2
[root@DESKTOP-7I5OOBB secure]# docker images
REPOSITORY                                         TAG        IMAGE ID       CREATED         SIZE
……
docker.xuanyuan.dev/dyrnq/metrics-server           v0.7.2     48d9cfaaf390   10 months ago   67.1MB
……
[root@DESKTOP-7I5OOBB secure]# 

[root@DESKTOP-7I5OOBB secure]# docker tag docker.xuanyuan.dev/dyrnq/metrics-server:v0.7.2 registry.k8s.io/metrics-server/metrics-server:v0.7.2
[root@DESKTOP-7I5OOBB secure]# docker images
REPOSITORY                                         TAG        IMAGE ID       CREATED         SIZE
……
docker.xuanyuan.dev/dyrnq/metrics-server           v0.7.2     48d9cfaaf390   10 months ago   67.1MB
registry.k8s.io/metrics-server/metrics-server      v0.7.2     48d9cfaaf390   10 months ago   67.1MB
……
[root@DESKTOP-7I5OOBB secure]# 

docker save -o /home/secure/metrics-server-metrics-server-v0.7.2.tar registry.k8s.io/metrics-server/metrics-server:v0.7.2
chown secure:secure /home/secure/metrics-server-metrics-server-v0.7.2.tar
chmod +x /home/secure/metrics-server-metrics-server-v0.7.2.tar
eval $(minikube docker-env)
#导入镜像时候不要用sudo不然会切换到root用户执行!!!
docker load -i /home/secure/metrics-server-metrics-server-v0.7.2.tar
#在minikube的docker守护进程中
[secure@DESKTOP-7I5OOBB ~]$ docker images
REPOSITORY                                      TAG        IMAGE ID       CREATED         SIZE
…………
registry.k8s.io/metrics-server/metrics-server   v0.7.2     48d9cfaaf390   10 months ago   67.1MB
registry.k8s.io/pause                           3.10       873ed7510279   13 months ago   736kB
kubernetesui/dashboard                          v2.7.0     07655ddf2eeb   2 years ago     246MB
kubernetesui/metrics-scraper                    v1.0.8     115053965e86   3 years ago     43.8MB
gcr.io/k8s-minikube/storage-provisioner         v5         6e38f40d628d   4 years ago     31.5MB
[secure@DESKTOP-7I5OOBB ~]$ 

报错4:设置默认编辑器否则edit无法打开deployment

[secure@DESKTOP-7I5OOBB ~]$ kubectl edit deployment dashboard-metrics-scraper -n kubernetes-dashboard
error: unable to launch the editor "vi"
[secure@DESKTOP-7I5OOBB ~]$ 

#Kubernetes 默认使用 vi 编辑器,但可能因环境变量未正确配置导致失败。通过以下命令检查当前编辑器设置:
[secure@DESKTOP-7I5OOBB ~]$ echo $EDITOR

[secure@DESKTOP-7I5OOBB ~]$ echo $KUBE_EDITOR

[secure@DESKTOP-7I5OOBB ~]$ 

EDITOR="vim"
KUBE_EDITOR="vim"
echo 'export EDITOR="vim"' >> ~/.bashrc
echo 'export KUBE_EDITOR="vim"' >> ~/.bashrc
echo 'export EDITOR="vim"' >> /etc/bashrc
echo 'export KUBE_EDITOR="vim"' >> /etc/bashrc

#若未设置,可临时指定编辑器(如 nano):
KUBE_EDITOR="vim" kubectl edit deployment/dashboard-metrics-scraper -n kubernetes-dashboard
export KUBE_EDITOR="nano"  # 添加到 ~/.bashrc 

#或直接通过 --editor 参数指定:
kubectl edit deployment/dashboard-metrics-scraper -n kubernetes-dashboard --editor=nano

若编辑器仍无法启动,可导出 YAML 手动编辑后重新应用:
kubectl get deployment/dashboard-metrics-scraper -n kubernetes-dashboard -o yaml > scraper.yaml
nano scraper.yaml  # 编辑后保存
kubectl apply -f scraper.yaml

若问题持续,进入调试模式检查环境变量:
kubectl run -it debug --image=busybox --restart=Never -- sh
echo $EDITOR

报错5:安装ingress组件报错

[secure@DESKTOP-7I5OOBB ~]$ 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.12.2
  - Using image registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.5.3
  - Using image registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.5.3
* Verifying ingress addon...

X Exiting due to MK_ADDON_ENABLE: enable failed: run callbacks: running callbacks: [waiting for app.kubernetes.io/name=ingress-nginx pods: context deadline exceeded]
* 
╭─────────────────────────────────────────────────────────────────────────────────────────────╮
│                                                                                             │
│    * If the above advice does not help, please let us know:                                 │
│      https://github.com/kubernetes/minikube/issues/new/choose                               │
│                                                                                             │
│    * Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.    │
│    * Please also attach the following file to the GitHub issue:                             │
│    * - /tmp/minikube_addons_eebdb8ec4c09648ff1b1f7987504468bfd87b467_0.log                  │
│                                                                                             │
╰─────────────────────────────────────────────────────────────────────────────────────────────╯

[secure@DESKTOP-7I5OOBB ~]$ 

[secure@DESKTOP-7I5OOBB ~]$ kubectl get pods -A
NAMESPACE              NAME                                         READY   STATUS              RESTARTS        AGE
……
ingress-nginx          ingress-nginx-admission-create-q4bng         0/1     ImagePullBackOff    0               28m
ingress-nginx          ingress-nginx-admission-patch-7tsxf          0/1     ImagePullBackOff    0               28m
ingress-nginx          ingress-nginx-controller-67c5cb88f-w2vth     0/1     ContainerCreating   0               28m
……
[secure@DESKTOP-7I5OOBB ~]$ kubectl get pods -n ingress-nginx
NAME                                       READY   STATUS              RESTARTS   AGE
ingress-nginx-admission-create-q4bng       0/1     ImagePullBackOff    0          29m
ingress-nginx-admission-patch-7tsxf        0/1     ImagePullBackOff    0          29m
ingress-nginx-controller-67c5cb88f-w2vth   0/1     ContainerCreating   0          29m
[secure@DESKTOP-7I5OOBB ~]$ kubectl get deployment -n ingress-nginx
NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
ingress-nginx-controller   0/1     1            0           29m
[secure@DESKTOP-7I5OOBB ~]$  
[secure@DESKTOP-7I5OOBB ~]$ kubectl edit deployment/ingress-nginx-controller -n ingress-nginx
deployment.apps/ingress-nginx-controller edited
[secure@DESKTOP-7I5OOBB ~]$ 

 70         image: registry.k8s.io/ingress-nginx/controller:v1.12.2@sha256:03497ee984628e95eca9b2279e3f3a3c1685dd48635479e627d219f00c8eefa9
 71         imagePullPolicy: IfNotPresent
#修改之后
 70         image: registry.k8s.io/ingress-nginx/controller:v1.12.2
 71         imagePullPolicy: IfNotPresent

[secure@DESKTOP-7I5OOBB ~]$ kubectl get pods -n ingress-nginx
NAME                                       READY   STATUS              RESTARTS   AGE
ingress-nginx-admission-create-q4bng       0/1     ImagePullBackOff    0          32m
ingress-nginx-admission-patch-7tsxf        0/1     ImagePullBackOff    0          32m
ingress-nginx-controller-f696496d4-mr5qq   0/1     ContainerCreating   0          48s
[secure@DESKTOP-7I5OOBB ~]$ kubectl describe pod ingress-nginx-admission-create-q4bng -n ingress-nginx
——》Pulling image "registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.5.3@sha256:2cf4ebfa82a37c357455458f6dfc334aea1392d508270b2517795a9933a02524"
[secure@DESKTOP-7I5OOBB ~]$ kubectl describe pod ingress-nginx-admission-patch-7tsxf -n ingress-nginx
——》Pulling image "registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.5.3@sha256:2cf4ebfa82a37c357455458f6dfc334aea1392d508270b2517795a9933a02524"

registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.5.3
registry.k8s.io/ingress-nginx/controller:v1.12.2

docker pull docker.xuanyuan.dev/dyrnq/kube-webhook-certgen:v1.5.3
registry.k8s.io/ingress-nginx/controller:v1.12.2——》相似的镜像太多了,网页搜索非常弱智找不到对应的官方源贼傻比不浪费时间了,有空再说!!!

报错6:使用root用户启动coredns的pod启动报错——》无法正常绑定53端口导致pod无法正常启动

[root@vlinux100010 preloaded-tarball]# kubectl get pods -A
NAMESPACE     NAME                               READY   STATUS             RESTARTS      AGE
kube-system   coredns-674b8bbfcf-8gkgm           0/1     CrashLoopBackOff   7 (44s ago)   12m
kube-system   etcd-minikube                      1/1     Running            0             12m
kube-system   kube-apiserver-minikube            1/1     Running            0             12m
kube-system   kube-controller-manager-minikube   1/1     Running            0             12m
kube-system   kube-proxy-8kcm2                   1/1     Running            0             12m
kube-system   kube-scheduler-minikube            1/1     Running            0             12m
kube-system   storage-provisioner                1/1     Running            1 (11m ago)   11m
[root@vlinux100010 preloaded-tarball]# 
[root@vlinux100010 preloaded-tarball]# kubectl get  deployment -A
NAMESPACE     NAME      READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   coredns   0/1     1            0           13m
[root@vlinux100010 preloaded-tarball]# kubectl logs deployment/coredns -n kube-system
maxprocs: Leaving GOMAXPROCS=4: CPU quota undefined
Listen: listen tcp :53: bind: permission denied
[root@vlinux100010 preloaded-tarball]# 

——》询问AI报错反馈
从日志来看,CoreDNS 容器无法正常启动,主要报错是 listen tcp :53: bind: permission denied,这通常是由于权限问题导致无法绑定到 53 端口(DNS 服务默认端口)。以下是可能的原因和解决方案:

‌1. 端口权限问题‌
‌原因‌:Linux 系统中,1024 以下端口需要 root 权限才能绑定。CoreDNS 默认以非 root 用户运行,因此无法直接监听 53 端口‌12。
‌解决方案‌:
‌方案一‌:修改 CoreDNS 的 Deployment 配置,允许以 root 用户运行:
securityContext:
  runAsUser: 0  # 以 root 用户运行
‌方案二‌:通过 setcap 命令赋予二进制文件绑定低端口的权限(适用于二进制部署):
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/coredns

——》选择方案一
[root@vlinux100010 preloaded-tarball]# kubectl edit deployment/coredns -n kube-system
deployment.apps/coredns edited
[root@vlinux100010 preloaded-tarball]# 
     90         securityContext:
     91           runAsUser: 0
     92           allowPrivilegeEscalation: false
     93           capabilities:
     94             add:
     95             - NET_BIND_SERVICE
     96             drop:
     97             - ALL
     98           readOnlyRootFilesystem: true

[root@vlinux100010 preloaded-tarball]# kubectl get pods -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS      AGE
kube-system   coredns-6f88766c9d-pw5d9           1/1     Running   0             17s
……
[root@vlinux100010 preloaded-tarball]# 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐