有没有一种方法可以使用skaffold配置加载私有图像而不构建它?

问题描述

我创建了一个只包含一行的模拟文件

FROM eu.gcr.io/some-org/mock-service:0.2.0

使用该配置及其对构建部分的引用,skaffold使用私有GCR注册表构建该dockerfile。但是,如果我删除了该Dockerfile,则skaffold不会构建该文件,而在启动skaffold时,它只会加载该build部分中引用的映像(公共映像,例如postgres也可以工作)。因此,在该本地kubernetes配置(如minikube)中,会导致

ImagePullBackOff
Failed to pull image "eu.gcr.io/some-org/mock-service:0.2.0": rpc error: code = UnkNown desc = Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation,and you may have invalid credentials 

因此,基本上,当我创建一个单行Dockerfile并将其包括在内时,skaffold会构建该映像并将其加载到minikube中。现在可以更改minikube的配置,以使对GCR的请求成功,但是目标是开发人员不必更改其minikube的配置...

还有其他方法可以将该映像加载到Minikube中,而无需更改配置并且没有该单行Dockerfile吗?

skaffold.yaml:

apiVersion: skaffold/v2beta8
kind: Config
Metadata:
  name: some-service
build:
  artifacts:
    - image: eu.gcr.io/some-org/some-service
      docker:
        dockerfile: Dockerfile
    - image: eu.gcr.io/some-org/mock-service
      docker:
        dockerfile: mock.Dockerfile
  local: { }

profiles:
  - name: mock
    activation:
      - kubeContext: (minikube|kind-.*|k3d-(.*))
    deploy:
      helm:
        releases:
          - name: postgres
            chartPath: test/postgres
          - name: mock-service
            chartPath: test/mock-service
          - name: skaffold-some-service
            chartPath: helm/some-service
            artifactOverrides:
              image: eu.gcr.io/some-org/some-service
            setValues:
              serviceAccount.create: true


解决方法

尽管GKE已预先配置为从同一项目中的注册表中提取,但Kubernetes集群通常需要special configuration at the pod level才能从私有注册表中提取。有点涉及。

幸运的是,minikube引入了registry-creds add-on,它将使用适当的凭据配置minikube实例以提取图像。