如何获取 Skaffold 和 Helm 图表以与本地图像存储库配合使用?

Fer*_*etz 5 kubernetes kubernetes-helm skaffold

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

但是对于 Helm,嗯...我设置了一个非常粗糙的 Helm 安装(免责声明:我对 Helm 还不太熟悉),只需更改 skaffold YAML 以使用 Helm 并将所有 .YAML 部署和服务文件转储到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
Run Code Online (Sandbox Code Playgroud)

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

lge*_*man 1

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

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

  image: k8s-skaffold/php-test:v0.1
Run Code Online (Sandbox Code Playgroud)

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