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

相关推荐
程序猿小三1 小时前
Linux下基于关键词文件搜索
linux·运维·服务器
虚拟指尖1 小时前
Ubuntu编译安装COLMAP【实测编译成功】
linux·运维·ubuntu
椎4952 小时前
苍穹外卖前端nginx错误之一解决
运维·前端·nginx
刘某的Cloud2 小时前
parted磁盘管理
linux·运维·系统·parted
极验3 小时前
iPhone17实体卡槽消失?eSIM 普及下的安全挑战与应对
大数据·运维·安全
爱倒腾的老唐3 小时前
24、Linux 路由管理
linux·运维·网络
yannan201903133 小时前
Docker容器
运维·docker·容器
_清浅3 小时前
计算机网络【第六章-应用层】
运维·服务器·计算机网络
书弋江山3 小时前
iOS一直讲的单元格优化
macos·ios·cocoa
正在努力的小河3 小时前
Linux 自带的 LED 灯驱动实验
linux·运维·服务器