skaffold 错过配置或如何设置一个简单的 helm 示例

Posted

技术标签:

【中文标题】skaffold 错过配置或如何设置一个简单的 helm 示例【英文标题】:skaffold miss configuration or how to set up a simple helm example 【发布时间】:2021-09-25 13:56:45 【问题描述】:

我有点困惑如何正确设置skaffold。这是我的skaffold.yaml

apiVersion: skaffold/v2beta17
kind: Config
build:
  tagPolicy:
    gitCommit: 
  artifacts:
    - image: zero-x/spring-cloud-kubernetes/config-map-it
      custom:
        buildCommand: ./build.sh
  local:
    useDockerCLI: false
    useBuildkit: false
    push: false


deploy:
  helm:
    releases:
      - name: config-map-it
        chartPath: src/main/helm
        artifactOverrides:
          # skaffold will override this with a different tag
          image: zero-x/spring-cloud-kubernetes/config-map-it
        valuesFiles:
          - src/main/helm/values.yaml
        wait: true
        setValues:
          namespace: spring-k8s

build.sh:

#!/usr/bin/env bash

# build jar only, no tests, no chart
.././gradlew clean build bootjar -x test -x helmChartBuild --quiet
docker build --quiet --build-arg JAR_FILE='build/libs/*.jar'  -t $IMAGE .

$IMAGEskaffold 提供。

所以我需要先构建jar,将其打包到映像中并进行部署。我依次调用两件事:

skaffold build // builds the image just fine
skaffold deploy

失败:

 You either need to:
 run [skaffold deploy] with [--images TAG] for each pre-built artifact
 or [skaffold run] instead, to let Skaffold build, tag and deploy artifacts.
 no tag provided for image [zero-x/spring-cloud-kubernetes/config-map-it]

这里发生了什么?没有太多的抨击,我无法让这个工作。至少可以说,关于 skaffold 以及如何正确做事的教程和文档很少。

编辑

所以我确实在做:

kind create cluster --name spring-k8s --wait 5m

在那个程度上我认为如果我这样做:

deploy:
   kubeContext: kind-spring-k8s
   helm:
   ...

事情会奏效,但他们不会。

如果我从头开始一切并运行:

skaffold deploy --file-output=images.json -vdebug

我确实看到了:

Tags used in deployment:
 - zero-x/spring-cloud-kubernetes/config-map-it -> zero-x/spring-cloud-kubernetes/config-map-it:78da248b669d2fafacbd144cf22d7251dfde57c664c70a5fd7d53793d9d5efd7
DEBU[0000] Local images can't be referenced by digest.
They are tagged and referenced by a unique, local only, tag instead.
See https://skaffold.dev/docs/pipeline-stages/taggers/#how-tagging-works

或以后:

helm --kube-context kind-spring-k8s dep build src/main/helm

所以这很令人困惑。我还缺少什么

【问题讨论】:

【参考方案1】:

你需要将skaffold build构建的镜像传递给skaffold deploy

skaffold build --file-output=images.json
skaffold deploy --build-artifacts=images.json

skaffold deploy 不会(重新)构建镜像:它只是部署一组镜像。所以deploy 需要知道要部署的镜像。

skaffold run 将这些步骤组合成一个命令。

【讨论】:

我真的,真的很高兴你来到这里。在执行 exact build/deploy 命令后,我得到:Helm release config-map-it not installed. Installing... 永无止境。所以,我发出:kubectl get events -n spring-k8s,结果:Failed to pull image "zero-x/spring-cloud-kubernetes/config-map-it:22952eb842cd392409d4fdeb318668338f83f5407ef5d3d48a3d1bd5d27a5b76"... 好的。 docker ps 怎么样:找到spring-k8s-control-plane,执行到它:docker exec -it spring-k8s-control-plane bash 并做crictl images 惊喜!图片根本不在这里。 这就是原因,我最终做了:skaffold_it() chmod +x build.sh; skaffold build --file-output=images.json; deploy_tag="$(cat images.json | jq '.builds[].tag' | cut -d '"' -f 2)"; kind load docker-image "$deploy_tag" --name spring-k8s; skaffold deploy -a images.json; cd .. Skaffold 应该会检测到您正在部署到 kind 并自动使用`kind image load`,但听起来好像没有发生这种情况。 Skaffold 通过上下文名称检测种类集群:你的上下文名称是什么? 在创建 kind 集群时删除 --namekind 当前 创建名称 kubernetes-admin@<cluster-name> 的上下文(过去使用不同的名称)。如果未指定集群名称,则集群名称默认为kind。不幸的是,除了检查其名称之外,没有可靠的方法来确定集群是否为 Kind 集群,我们希望名称以 kind 开头或结尾。 我应该说我已经尝试过了,结果相同。您认为如果我提供一个可重现的示例 GitHub 存储库,会有所帮助吗?

以上是关于skaffold 错过配置或如何设置一个简单的 helm 示例的主要内容,如果未能解决你的问题,请参考以下文章

一款让K8S开发变得简单的工具!

如何导航到相同的URL但更改(或添加,如果错过)其中一个查询参数

使用Skaffold构建多体系结构docker映像

谷歌发布Skaffold,简化Kubernetes应用程序持续开发

Skaffold Kubernetes 不显示 React 更改

Skaffold-简化本地开发kubernetes应用的神器