Mac 安装 Minikube 及解决 “[ERROR ImagePull]: failed to pull image“ 问题


1. 引言

Minikube 是一种轻量化的 Kubernetes 集群,旨在帮助开发者和学习者更好地学习和体验 Kubernetes 的功能。它可以在个人计算机的虚拟化环境中快速构建和启动 Kubernetes 集群,支持在 macOS、Linux 和 Windows 平台上运行,并利用本地虚拟化环境作为驱动。

通过 Minikube,用户可以在虚拟机上管理和运行 Kubernetes 集群,使用熟悉的 Kubectl 命令行工具进行操作。Minikube 在虚拟环境中创建虚拟机,并在虚拟机中构建 Kubernetes 集群,用户可以轻松地启动、停止、删除和获取虚拟机中的 Kubernetes 集群状态。

本文介绍如何在 Mac 上安装 Minikube 并且成功拉起 K8s 集群!

2. Mac 安装 Docker

对于 Mac/Window 安装 docker 的桌面版本,点开 docker 官网下载链接在这里插入图片描述
图中选择自己的版本下载,Mac 有 Intel/Apple(M1、M2) 芯片的,下载之后就是正常的 App 安装流程。

3. Mac 安装 Minikube

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
sudo install minikube-darwin-amd64 /usr/local/bin/minikube

检查是否安装成功

minikube --help
minikube 提供并管理针对开发工作流程优化的本地 Kubernetes 集群。

基本命令:
  start            启动本地 Kubernetes 集群
  status           获取本地 Kubernetes 集群状态
  stop             停止正在运行的本地 Kubernetes 集群
  delete           删除本地的 Kubernetes 集群
  dashboard        访问在 minikube 集群中运行的 kubernetes dashboard
  pause            暂停 Kubernetes
  unpause          恢复 Kubernetes

镜像命令
  docker-env       提供将终端的 docker-cli 指向 minikube 内部 Docker Engine 的说明。(用于直接在 minikube 内构建 docker 镜像)
  podman-env       配置环境以使用 minikube's Podman service
  cache            管理 images 缓存
  image            管理 images

配置和管理命令:
  addons           启用或禁用 minikube 插件
  config           修改持久配置值
  profile          获取或列出当前配置文件(集群)
  update-context   IP或端口更改的情况下更新 kubeconfig 配置文件

网络和连接命令:
  service          返回用于连接到 service 的 URL
  tunnel           连接到 LoadBalancer 服务

高级命令:
  mount            将指定的目录挂载到 minikube
  ssh              登录到 minikube 环境(用于调试)
  kubectl          运行与集群版本匹配的 kubectl 二进制文件
  node             添加,删除或者列出其他的节点
  cp               将指定的文件复制到 minikube

故障排除命令
  ssh-key          检索指定节点的 ssh 密钥路径
  ssh-host         检索指定节点的 ssh 主机密钥
  ip               检索指定节点的IP地址
  logs             返回用于调试本地 Kubernetes 集群的日志
  update-check     打印当前版本和最新版本
  version          打印 minikube 版本
  options          显示全局命令行选项列表 (应用于所有命令)。

Other Commands:
  completion       生成命令补全的 shell 脚本
  license          将依赖项的 licenses 输出到一个目录

Use "minikube <command> --help" for more information about a given command.

4. 拉起集群

4.1 启动

minikube start --driver=docker --image-mirror-country='cn' --image-repository='docker.io' --kubernetes-version=v1.21.2

如果报错如下,则说明无法拉取镜像,应该是无法访问远程镜像仓库:

	[ERROR ImagePull]: failed to pull image docker.io/kube-apiserver:v1.28.3: output: E1226 00:59:55.329389   47926 remote_image.go:242] "PullImage from image service failed" err="rpc error: code = Unknown desc = Error response from daemon: pull access denied for kube-apiserver, repository does not exist or may require 'docker login': denied: requested access to the resource is denied" image="docker.io/kube-apiserver:v1.28.3"
time="2023-12-26T00:59:55Z" level=fatal msg="pulling image: rpc error: code = Unknown desc = Error response from daemon: pull access denied for kube-apiserver, repository does not exist or may require 'docker login': denied: requested access to the resource is denied"
, error: exit status 1
	[ERROR ImagePull]: failed to pull image docker.io/kube-controller-manager:v1.28.3: output: E1226 01:00:13.993456   48056 remote_image.go:242] "PullImage from image service failed" err="rpc error: code = Unknown desc = Error response from daemon: pull access denied for kube-controller-manager, repository does not exist or may require 'docker login': denied: requested access to the resource is denied" image="docker.io/kube-controller-manager:v1.28.3"
time="2023-12-26T01:00:13Z" level=fatal msg="pulling image: rpc error: code = Unknown desc = Error response from daemon: pull access denied for kube-controller-manager, repository does not exist or may require 'docker login': denied: requested access to the resource is denied"
, error: exit status 1
	[ERROR ImagePull]: failed to pull image docker.io/kube-scheduler:v1.28.3: output: E1226 01:00:30.366920   48182 remote_image.go:242] "PullImage from image service failed" err="rpc error: code = Unknown desc = Error response from daemon: pull access denied for kube-scheduler, repository does not exist or may require 'docker login': denied: requested access to the resource is denied" image="docker.io/kube-scheduler:v1.28.3"
time="2023-12-26T01:00:30Z" level=fatal msg="pulling image: rpc error: code = Unknown desc = Error response from daemon: pull access denied for kube-scheduler, repository does not exist or may require 'docker login': denied: requested access to the resource is denied"
, error: exit status 1
	[ERROR ImagePull]: failed to pull image docker.io/kube-proxy:v1.28.3: output: E1226 01:00:46.715282   48315 remote_image.go:242] "PullImage from image service failed" err="rpc error: code = Unknown desc = Error response from daemon: pull access denied for kube-proxy, repository does not exist or may require 'docker login': denied: requested access to the resource is denied" image="docker.io/kube-proxy:v1.28.3"
time="2023-12-26T01:00:46Z" level=fatal msg="pulling image: rpc error: code = Unknown desc = Error response from daemon: pull access denied for kube-proxy, repository does not exist or may require 'docker login': denied: requested access to the resource is denied"
, error: exit status 1
	[ERROR ImagePull]: failed to pull image docker.io/pause:3.9: output: E1226 01:01:03.233069   48467 remote_image.go:242] "PullImage from image service failed" err="rpc error: code = Unknown desc = Error response from daemon: pull access denied for pause, repository does not exist or may require 'docker login': denied: requested access to the resource is denied" image="docker.io/pause:3.9"
time="2023-12-26T01:01:03Z" level=fatal msg="pulling image: rpc error: code = Unknown desc = Error response from daemon: pull access denied for pause, repository does not exist or may require 'docker login': denied: requested access to the resource is denied"
, error: exit status 1

解决方法:
将下面的脚本内容保存到 download-k8s-image.sh

set -o errexit
set -o nounset
set -o pipefail

KUBE_VERSION=v1.21.2
KUBE_PAUSE_VERSION=3.4.1
ETCD_VERSION=3.4.13-0
DNS_VERSION=v1.8.0

GCR_URL=registry.k8s.io
DOCKERHUB_URL=k8smx

images=(
kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${DNS_VERSION}
)

for imageName in ${images[@]} ; do
  docker pull $DOCKERHUB_URL/$imageName
  docker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageName
  docker rmi $DOCKERHUB_URL/$imageName
done

然后执行:

chmod +x download-k8s-image.sh
./download-k8s-image.sh

如果 core-dns 没有下载成功,则将下面的脚本内容保存到 download-core-dns.sh

set -o errexit
set -o nounset
set -o pipefail

DNS_VERSION=v1.8.0

GCR_URL=registry.k8s.io/coredns
DOCKERHUB_URL=gotok8s

images=(
coredns:${DNS_VERSION}
)

for imageName in ${images[@]} ; do
  docker pull $DOCKERHUB_URL/$imageName
  docker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageName
  docker rmi $DOCKERHUB_URL/$imageName
done

然后执行:

chmod +x download-core-dns.sh
./download-core-dns.sh

检查 K8s 核心组件是否下载成功:

docker images

在这里插入图片描述
重新启动 K8s 集群:

minikube start --driver=docker --kubernetes-version=v1.21.2

启动结果如下:

😄  Darwin 14.2 上的 minikube v1.32.0
🆕  Kubernetes 1.28.3 现在可用。如果您想要升级,请指定:--kubernetes-version=v1.28.3
✨  根据现有的配置文件使用 docker 驱动程序
👍  正在集群 minikube 中启动控制平面节点 minikube
🚜  正在拉取基础镜像 ...
💾  正在下载 Kubernetes v1.21.2 的预加载文件...
    > preloaded-images-k8s-v18-v1...:  393.86 MiB / 393.86 MiB  100.00% 2.23 Mi
🏃  正在更新运行中的 docker "minikube" container ...
❗  This container is having trouble accessing https://registry.k8s.io
💡  To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
🐳  正在 Docker 24.0.7 中准备 Kubernetes v1.21.2…
    ▪ 正在生成证书和密钥...
    ▪ 正在启动控制平面...
    ▪ 配置 RBAC 规则 ...
🔎  正在验证 Kubernetes 组件...
    ▪ 正在使用镜像 gcr.io/k8s-minikube/storage-provisioner:v5
🌟  启用插件: storage-provisioner, default-storageclass

❗  /usr/local/bin/kubectl 的版本为 1.28.2,可能与 Kubernetes 1.21.2 不兼容。
    ▪ 想要使用 kubectl v1.21.2 吗?尝试使用 'minikube kubectl -- get pods -A' 命令
🏄  完成!kubectl 现在已配置,默认使用"minikube"集群和"default"命名空间

如果中间还有地方卡住,导致下载一些 Minikube 基础依赖镜像失败,可以考虑连上联通/电信卡的热点,移动宽带和流量限制的很严格!

4.2 验证

当启动成功之后,可以用以下命令开验证集群是否正常运行:

kubectl get node

在这里插入图片描述

kubectl get pod -A

在这里插入图片描述

5. 参考

MAC上安装minikube

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.22.17: output: Error response from daemon: Ge t "https://k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.22.17: output: Error response from d aemon: Get "https://k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.22.17: output: Error response from daemon: Ge t "https://k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.22.17: output: Error response from daemon: Get "h ttps://k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/pause:3.5: output: Error response from daemon: Get "https://k8s .gcr.io/v2/": context deadline exceeded, error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.5.0-0: output: Error response from daemon: Get "https:// k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), error: exit status 1 [ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns/coredns:v1.8.4: output: Error response from daemon: Get "https://k8s.gcr.io/v2/": context deadline exceeded, error: exit status 1 [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...` To see the stack trace of this error execute with --v=5 or higher
07-12
这个错误是由于在安装 Kubernetes 期间无法拉取所需的镜像引起的。它表明在尝试从 k8s.gcr.io 拉取镜像时出现了连接超时的问题。 这个问题可能是由于网络连接问题、防火墙设置或者代理配置引起的。以下是一些解决问题的常见步骤: 1. 确保您的网络连接正常,尝试通过浏览器访问 `https://k8s.gcr.io/v2/` 确认是否可以访问。 2. 如果您使用了代理,请确保已正确配置 Docker 的代理设置。您可以通过编辑 `/etc/systemd/system/docker.service.d/http-proxy.conf`(如果不存在则创建它)文件来设置代理。例如,如果您使用 HTTP 代理,可以添加以下内容: ``` [Service] Environment="HTTP_PROXY=http://proxy.example.com:8080/" Environment="HTTPS_PROXY=http://proxy.example.com:8080/" ``` 3. 如果您在防火墙后面,确保防火墙允许 Docker 访问所需的资源。您可以尝试临时禁用防火墙并重新运行安装命令,以验证是否与防火墙有关。 4. 如果您使用的是私有网络或内部网络,请确保您的网络环境正确配置,以允许 Docker 访问所需的资源。 5. 您还可以尝试使用其他镜像源或加速器来拉取所需的镜像。例如,您可以使用阿里云容器镜像服务(https://cr.console.aliyun.com/)或其他可靠的镜像源。 尝试上述步骤后,如果问题仍然存在,请确保您的环境满足 Kubernetes 的最低要求,并尝试在不同的网络环境下重新运行安装命令。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SmallerFL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值