在 GKE 集群中安装 Velero 时无法拉取映像"velero/velero-plugin-for-gcp:v1.1.0"



我正在尝试为kubernetes备份安装和配置Velero。我已经按照链接在我的GKE集群中配置了它。安装进行得很顺利,但velero无法工作。

我使用谷歌云外壳来运行我的所有命令(我已经在我的谷歌云外壳中安装并配置了velero客户端(

在对velero部署和velero pods进行进一步检查时,我发现它无法从docker存储库中提取图像。

kubectl get pods -n velero
NAME                      READY   STATUS              RESTARTS   AGE
velero-5489b955f6-kqb7z   0/1     Init:ErrImagePull   0          20s

来自velero pod(kubectl describe pod(的错误(为了可读性,对输出进行了编辑-仅相关信息如下所示(

Events:
Type     Reason     Age               From                                                  Message
----     ------     ----              ----                                                  -------
Normal   Scheduled  38s               default-scheduler                                     Successfully assigned velero/velero-5489b955f6-kqb7z to gke-gke-cluster1-default-pool-a354fba3-8674
Warning  Failed     22s               kubelet, gke-gke-cluster1-default-pool-a354fba3-8674  Failed to pull image "velero/velero-plugin-for-gcp:v1.1.0": rpc error: code = Unknown desc = 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     22s               kubelet, gke-gke-cluster1-default-pool-a354fba3-8674  Error: ErrImagePull
Normal   BackOff    21s               kubelet, gke-gke-cluster1-default-pool-a354fba3-8674  Back-off pulling image "velero/velero-plugin-for-gcp:v1.1.0"
Warning  Failed     21s               kubelet, gke-gke-cluster1-default-pool-a354fba3-8674  Error: ImagePullBackOff
Normal   Pulling    8s (x2 over 37s)  kubelet, gke-gke-cluster1-default-pool-a354fba3-8674  Pulling image "velero/velero-plugin-for-gcp:v1.1.0"

用于安装velero的命令:(一些值作为变量给出(

velero install 
--provider gcp 
--plugins velero/velero-plugin-for-gcp:v1.1.0 
--bucket $storagebucket 
--secret-file ~/velero-backup-storage-sa-key.json

Velero版本

velero version
Client:
Version: v1.4.2
Git commit: 56a08a4d695d893f0863f697c2f926e27d70c0c5
<error getting server version: timed out waiting for server status request to be processed>

GKE版本

v1.15.12-gke.2

这不是私有集群吗?–马里奥31分钟前

@mario这是一个私有集群,但我可以毫无问题地部署其他服务(例如:我已经成功部署了nginx(-Sreesan 15分钟前

好吧,这是GKE私有集群的已知限制。正如您在文档中所读到的:

无法从公共Docker Hub提取图像

症状

集群中运行的Pod在kubectl describe中显示警告,例如Failed to pull image: rpc error: code = Unknown desc = 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)

潜在原因

专用群集中的节点没有对公用的出站访问权限互联网他们对谷歌API和服务的访问权限有限,包括Container Registry。

分辨率

您无法直接从Docker Hub获取图像。而是使用图像托管在Container Registry上。请注意,虽然Container RegistryDocker集线器镜子可以从专用群集访问,不应以独占方式访问依赖。镜像只是一个缓存,因此图像是周期性的删除,并且私有集群无法回退到Docker Hub。

您也可以将其与此答案进行比较。

只需做一个简单的实验就可以很容易地验证它。尝试运行两种不同的nginx部署。第一个基于图像nginx(等于nginx:latest(,第二个基于nginx:1.14.2

虽然第一种情况是完全可行的,因为nginx:latest映像可以从容器注册表的Docker Hub镜像中提取,该镜像可以从专用集群访问,但任何提取nginx:1.14.2的尝试都将失败,您将在Pod事件中看到这一点。之所以会发生这种情况,是因为kubelet无法在GCR中找到此版本的映像,并且它试图将其从公共docker注册表(https://registry-1.docker.io/v2/(中提取,而在私有集群中将不可能";镜像只是一个缓存,所以镜像会被定期删除,私有集群无法回退到Docker Hub">-正如你在文档中看到的。

如果您仍然有疑问,只需将ssh放入您的节点,并尝试运行以下命令:

curl https://cloud.google.com/container-registry/
curl https://registry-1.docker.io/v2/

虽然第一个工作得很好,但第二个最终会失败:

curl: (7) Failed to connect to registry-1.docker.io port 443: Connection timed out

原因?-";专用群集中的节点没有对公共internet的出站访问权限">

解决方案

您可以在GCR中搜索当前可用的内容。

在许多情况下,如果您没有指定所需图像的确切版本(默认情况下使用latest标记(,您应该能够获得所需图像。虽然它可以帮助nginx,但不幸的是,谷歌容器注册中心的Docker Hub镜像中目前没有适用于gcp的velero/velero插件版本。

通过使用云NAT授予私有节点出站互联网访问权限似乎是唯一合理的解决方案,可以应用于您的情况。

我通过实现的版本解决了这个问题

velero/velero-plugin-for-gcp

不遵循以下版本:

velero/velero

例如,现在的最新版本是:velero/velero:v1.9.1velero/velero-plugin-for-gcp:v1.5.0

相关内容

  • 没有找到相关文章

最新更新