问题标签 [skaffold]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker-compose - 使用 docker compose 配置的 skaffold init 失败并出现“Nil Pointer Dereference”错误
我正在尝试使用以下 init 命令为 docker-compose 配置生成 skaffold 配置
预期行为:
该命令应基于 docker-compose 配置生成 k8s 清单,并应在发出“skaffold init”命令时生成 skaffold 配置
实际行为:
这失败并出现以下“无指针引用”错误
信息:
Skaffold 版本:v0.37.0 操作系统:RHEL skaffold.yaml 内容:无 skaffold.yaml
重现行为的步骤:
使用基本的 docker compose 文件运行“skaffold init --compose-file docker-compose.yml --verbosity=info”。
请建议我解决此问题
kubernetes - 将脚本或命令与 Skaffold 开发部署一起运行到 Kubernetes 集群
我想在运行之前运行一个命令从远程存储库克隆一个脚本,skaffold dev
我需要以某种方式注入一个git clone
命令或将 git clone 命令和相应的参数放在 shell 脚本中,然后使用 Skaffold 运行 shell 脚本。
从 Skaffold 工作流程的角度来看,此步骤应在构建之前运行。我在构建阶段使用 Jib,看来 Jib 状态并没有给我任何在实际构建之前运行脚本的能力。我不知道是否可以在 Skaffold 生命周期中添加一个新阶段,例如pre-build
. 我想到的一种解决方案是使用custom
build 而不是Jib
将所有预构建命令以及与 jib 相关的命令放在一个脚本中运行。这种方法可能有效,但不会很方便。我想知道是否有更好的方法来使用 Skaffold 做到这一点。
kubernetes - 带有 minikube 和本地注册表的 Skaffold 无法获取图像名称
由于我已将 helm、Skaffold 和 Minikube 升级到最新版本,我的本地项目未能部署到 minikube,并出现以下警告:
我的脚手架.yml
我不确定我是否遗漏了什么,或者这只是我遇到的一个错误。
kubernetes - Skaffold 以什么顺序启动部署,有没有办法指定顺序?
基本上,我需要在 API 部署之前启动数据库部署。如果数据库没有运行,它会在 API 中引发错误。
我已经弄乱了订单artifacts:
和:
但这似乎与他们启动的顺序没有任何关系。
我唯一能想到的是它是按字母顺序排列的。我以前没有问题:数据库会在 api 之前 49/50 启动。现在情况正好相反。我唯一改变的是一台新计算机,我将它重命名为按字母顺序排列在第一位server
的计算机。api
所以两个问题:
- Skaffold 中的部署顺序是如何确定的?
- 有没有办法设置顺序?
docker - 设置就绪、活跃度或启动探测
我很难理解哪个最适合我的情况以及如何实际实施它。
简而言之,问题是这样的:
- 我正在使用 Skaffold 启动我的 DB (Postgres)、BE (Django) 和 FE (React) 部署
- 大约 50% 的时间 BE 在 DB 之前启动
- Django 尝试做的第一件事就是连接到数据库
- 它只尝试一次(根据设计,不能更改),如果不能,它会失败并且应用程序被破坏
- 因此,我需要确保每次启动部署时,在开始 BE 部署之前数据库部署正在运行
我遇到了readiness、liveness 和 starup probes。我已经阅读了几次,就绪探测听起来就像我需要的那样:我不希望 BE 部署在数据库部署准备好接受连接之前开始。
我想我不明白如何设置它。这是我尝试过的,但我仍然遇到一个在另一个之前加载的实例。
postgres.yaml
api.yaml
客户端.yaml
我不认为ingress.yaml
和skaffold.yaml
会有帮助,但如果我应该添加这些,请告诉我。
那么我在这里做错了什么?
编辑:
因此,我根据 David Maze 的回应尝试了一些方法。这有助于我更好地了解正在发生的事情,但我仍然遇到一些我不太了解如何解决的问题。
第一个问题是,即使使用 default restartPolicy: Always
,即使 Django 失败,Pod 本身也不会失败。即使 Django 失败了,Pod 仍认为它们非常健康。
第二个问题是显然需要让 Pod 了解 Django 的状态。那是我不太关心的部分,特别是探测器应该检查其他部署的状态还是它们本身?
昨天我的想法是前者,但今天我认为是后者:Pod 需要知道其中包含的程序已经失败。但是,我尝试过的所有操作都会导致探测失败、连接被拒绝等:
所以显然我设置了错误的探针,尽管它是一个“超级简单”的实现(正如一些博客所描述的那样)。例如,/health
和/healthz
路由:这些是内置在 Kubernetes 中还是需要设置?重读文档以希望澄清这一点。
kubernetes - 将 skaffold 配置文件绑定到命名空间
有没有办法将 skaffold 配置文件绑定到命名空间?我想确保 dev、staging 和 prod 部署总是进入正确的命名空间。我知道我可以添加一个命名空间来skaffold run
喜欢skaffold run -p dev -n dev
,但这有点容易出错。我想通过将配置文件绑定到命名空间来使我的构建更加安全。
我已经尝试将以下内容添加到我skaffold.yaml
的基础上,因为其中有一条路径,skaffold.yaml
但build/cluster/namespace
我怀疑我误解了集群规范的目的。
但我得到了错误
我尝试了其他更改集群命名空间的变体,但都失败了。
kubernetes - 将 skaffold 配置文件绑定到集群
建立我关于将配置文件绑定到名称空间的另一个问题,有没有办法将配置文件绑定到集群?
现在我发现有几次我不小心运行了命令,比如skaffold run -p local -n skeleton
当我当前的 kubernetes 上下文指向docker-desktop
. 我想防止自己和团队中的其他人犯同样的错误。
我发现有一种指定上下文的方法,但如果开发人员使用自定义上下文(如kubeclt set-context custom --user=custom --cluster=custom
. 我还在参考资料中找到了一个集群字段,skaffold.yaml
但它似乎不能满足我的需要,因为它不允许我指定集群名称。
kubernetes-helm - 带有 helm 图表的 skaffold init
我正在尝试执行skaffold init
。我收到这条消息:
FATA[0000] 运行 skaffold 需要一个或多个有效的 Kubernetes 清单
我想skaffold
正在寻找 Kubernetes 清单。但是,我使用 helm 图表在 kubernetes 上运行和部署我的工件。
我的意思是,我没有也不会有任何"valid"
kubernetes 清单,因为我使用的是 helm 图表。
我怎么能继续初始化?
kubernetes - skaffold 是否尊重滚动更新?
使用该选项时,skaffold 是否尊重滚动更新--force
?当我skaffold run --force
执行
似乎从未发生过激增。
在我运行的另一个终端窗口中watch kubectl get pods
,我从来没有看到我的部署的副本数量超过 3。我怀疑这是因为--force
标志,但我不确定。
在人们告诉我不要使用武力之前,请参阅https://github.com/GoogleContainerTools/skaffold/issues/3171。如果部署的资源已经存在,Skaffold 会自动更改导致部署失败的运行 ID。话虽如此,如果有办法告诉 skaffold 更新部署而不抱怨不匹配的运行 ID,我很想听听。我不喜欢使用--force
.
编辑:
看着 skaffold 帮助我看到:
这个Recreate
词表明 RollingDeployment 策略可能不受尊重。