如何使脚手架和头盔图表与本地图像存储库一起使用?

时间:2019-04-03 13:51:59

标签: kubernetes kubernetes-helm skaffold

我们正在尝试通过Skaffold下的几个微服务应用程序来建立本地开发环境。我们使用https://github.com/ahmetb/skaffold-from-laptop-to-cloud上的(略过时)教程,使用基本Skaffold做到了这一点。为了使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: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,但这只是从该映像中提取的。

1 个答案:

答案 0 :(得分: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。服务器是可配置的,但是不幸的是,因为我自己使用cri-o,所以我不知道如何为“ docker”配置服务器。