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

文章目录

  • [1. 引言](#1. 引言)
  • [2. Mac 安装 Docker](#2. Mac 安装 Docker)
  • [3. Mac 安装 Minikube](#3. Mac 安装 Minikube)
  • [4. 拉起集群](#4. 拉起集群)
    • [4.1 启动](#4.1 启动)
    • [4.2 验证](#4.2 验证)
  • [5. 参考](#5. 参考)

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

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

检查是否安装成功

bash 复制代码
minikube --help
bash 复制代码
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 启动

bash 复制代码
minikube start --driver=docker --image-mirror-country='cn' --image-repository='docker.io' --kubernetes-version=v1.21.2

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

bash 复制代码
	[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

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

然后执行:

bash 复制代码
chmod +x download-k8s-image.sh
./download-k8s-image.sh

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

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

然后执行:

bash 复制代码
chmod +x download-core-dns.sh
./download-core-dns.sh

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

bash 复制代码
docker images

重新启动 K8s 集群:

bash 复制代码
minikube start --driver=docker --kubernetes-version=v1.21.2

启动结果如下:

bash 复制代码
😄  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 验证

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

bash 复制代码
kubectl get node
bash 复制代码
kubectl get pod -A

5. 参考

MAC上安装minikube

相关推荐
。puppy13 分钟前
HCIP--3实验- 链路聚合,VLAN间通讯,Super VLAN,MSTP,VRRPip配置,OSPF(静态路由,环回,缺省,空接口),NAT
运维·服务器
颇有几分姿色23 分钟前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
光芒再现dev40 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
daqinzl1 小时前
java获取机器ip、mac
java·mac·ip
小李飞刀李寻欢1 小时前
Mac电脑如何解压rar压缩包
macos·rar·解压
Java小白笔记1 小时前
Mac中禁用系统更新
macos
AndyFrank1 小时前
mac crontab 不能使用问题简记
linux·运维·macos
Mac新人1 小时前
一招解决Mac没有剪切板历史记录的问题
macos·mac
ZHOU西口1 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
王拴柱1 小时前
Mac保护电池健康,延长电池使用寿命的好方法
macos·mac