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

2023-12-26 11:55:41


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

文章来源:https://blog.csdn.net/qq_36803941/article/details/135214277
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。