4

我们正在尝试在 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 错误:代码 = 未知 desc = 来自守护进程的错误响应:获取 http://localhost:5000/v2/:拨打 tcp [::1] :5000:连接:连接被拒绝

据我所知,这就是我们没有初始化本地 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,但它只是从该图像中提取的。

4

1 回答 1

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自己使用。

于 2019-04-03T16:55:34.430 回答