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 .
$IMAGE
由skaffold
提供。
所以我需要先构建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
将这些步骤组合成一个命令。
【讨论】:
我真的,真的很高兴你来到这里。在执行 exactbuild/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 集群时删除 --name
。 kind
当前 创建名称 kubernetes-admin@<cluster-name>
的上下文(过去使用不同的名称)。如果未指定集群名称,则集群名称默认为kind
。不幸的是,除了检查其名称之外,没有可靠的方法来确定集群是否为 Kind 集群,我们希望名称以 kind
开头或结尾。
我应该说我已经尝试过了,结果相同。您认为如果我提供一个可重现的示例 GitHub 存储库,会有所帮助吗?以上是关于skaffold 错过配置或如何设置一个简单的 helm 示例的主要内容,如果未能解决你的问题,请参考以下文章
如何导航到相同的URL但更改(或添加,如果错过)其中一个查询参数
谷歌发布Skaffold,简化Kubernetes应用程序持续开发