【问题标题】:How Do I Get Skaffold And Helm Charts To Work With A Local Image Repository?如何让 Skaffold 和 Helm 图表与本地图像存储库一起使用?
【发布时间】:2019-08-25 01:57:21
【问题描述】:

我们正在尝试在 Skaffold 下建立一个包含多个微服务应用的本地开发环境。我们使用https://github.com/ahmetb/skaffold-from-laptop-to-cloud 上的(稍微过时的)教程设法使用基本的 Skaffold 来做到这一点。为了让 Skaffold 在没有 Helm 的情况下将图像推送到本地存储库,我所要做的就是将 imageName 设置为使用 localhost:5000/image_name 之类的东西。

但是使用 Helm,嗯....文件进入 Helm 图表的 /templates 目录,然后就被炸毁了。

Skaffold 然后成功地创建了任何依赖于股票外部图像(如 redis)的 pod,但是每当任何东西使用从本地 Dockerfile 生成的图像时,它就会卡住并抛出此错误:

无法拉取图像“localhost:5000/k8s-skaffold/php-test”:rpc 错误:代码=未知描述=来自守护程序的错误响应:获取 http://localhost:5000/v2/: 拨号 tcp [::1]:5000: connect: 连接 拒绝

据我所知,这是我们没有初始化本地 Docker 镜像存储库时出现的错误——但是对于非 Helm 版本,我们不需要启动本地镜像存储库,Skaffold 只是让魔法发生。这是 Skaffold 吸引力的一部分。

那么我们如何自动让 Skaffold 创建 Helm 图表,从本地存储库创建和拉取? (如前所述,这可能是我对 Helm 的不熟悉。如果是这样,我深表歉意。)

Skaffold YAML 是这样的:

apiVersion: skaffold/v1beta7
kind: Config
build:
  tagPolicy:
    sha256: {}
  artifacts:
  - image: localhost:5000/k8s-skaffold/php-test
    context: voting-app/php-test  
deploy:
  helm:
    releases:
    - name: php-help-test
      chartPath: helm
      #wait: true
      #valuesFiles:
      #- helm-skaffold-values.yaml
      values:
        image: localhost:5000/k8s-skaffold/php-test
      #recreatePods will pass --recreate-pods to helm upgrade
      #recreatePods: true
      #overrides builds an override values.yaml file to run with the helm deploy
      #overrides:
      # some:
      #   key: someValue
      #setValues get appended to the helm deploy with --set.  
      #setValues:
        #some.key: someValue

Helm Chart values.yaml 是生成的图表提供的默认值。如果需要,我也可以提供 Dockerfile,但它只是从该映像中提取。

【问题讨论】:

    标签: kubernetes kubernetes-helm skaffold


    【解决方案1】:

    您不能在图像定义中使用localhost。为了测试,您可以尝试使用运行私有注册表的主机的 ip,假设主机的地址为 222.0.0.2,然后使用 image: 222.0.0.2:5000/k8s-skaffold/php-test

    对地址进行硬编码当然是不可取的,因此更好的方法是完全省略“主机”部分;

      image: k8s-skaffold/php-test:v0.1
    

    在这种情况下,您的 CRI(容器运行时接口)插件将尝试一系列服务器,例如 docker.io。服务器是可配置的,但不幸的是我不知道如何为“docker”配置它,因为我自己使用cri-o

    【讨论】:

    • 嗯...我们可以在没有 Helm 的情况下在 Skaffold 中使用 localhost,然后执行此操作。这很完美,似乎是 Skaffold 的重点。使用没有 Helm 的 Skaffold,我们不必启动私有注册表,它会自动创建一个并上传图像,而无需任何更多的预配置。所以我不确定这个答案是否是 Skaffold 特定的,或者只是讨论你如何使用基线 Kubernetes/Docker 和普通的本地存储库。
    猜你喜欢
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2013-06-06
    • 2020-09-29
    相关资源
    最近更新 更多