问题标签 [gitops]

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.

0 投票
3 回答
220 浏览

git - 如果对 deployment.yml 没有更改,则无法使用 Jenkins 将 Docker 映像部署到 Kubernetes

我有一个包含 Dockerfile 和 github 触发器的存储库,每次将提交推送到分支时都会触发。每当我提交任何更改时,它都会创建一个带有标签的新 docker 映像:分支名称和 git hash(是的,两者都是)并将其推送到注册表。在我的工作负载中,图像被描述为 image:branch_name。如果我手动重新部署,它会提取最新的图像并且一切正常。但是当我和詹金斯一起做的时候问题就出现了。因为,在deployment.yml 中,image 是imagename:branch_name,它一直是静态的。

现在,我已经配置了一个 jenkins 工作来做kubectl apply -f deployment.yml. 但是,这不会每次都提取最新的图像,因为 yml 文件没有变化(图像和分支名称相同)。我怎样才能让 Kubernetes 每次都拉出最新的图像?

我的一个想法是将 githash 传递给 deployment.yml,以便将更改推送到文件中,触发部署。我怎样才能做到这一点?

PS:我已经知道kubectl rolling-restartkubectl apply。我想使用上述方法。有什么办法吗?

0 投票
1 回答
1514 浏览

continuous-deployment - Flux v2 是 Argo Flux 的替代品吗

我已经用Flux v2建立了一个持续交付管道(因为 Flux v1 已被弃用),它工作正常。另一方面,我看到 Argo 和 Flux 在 2019 年底开始合并(请查看此链接)。

我想知道 Flux v2 是 Argo-Flux 合并的演变,还是它们是两个独立的 GitOps 实现选项。

我的印象是 Flux v2 非常活跃,所以我想这是一个真正的选择,至少会存在一段时间。但我对 Argo-Flux 一无所知,在那里找不到太多信息。

谢谢!

0 投票
1 回答
37 浏览

jenkins - 使用 Jenkins 从 Gitlab 管理 K8s 集群

我正在尝试从 gitlab 存储库(存储所有清单)管理我们的 k8s 集群。当 gitlab 收到提交时,将 webhook 发送到 jenkins 服务器并触发此管道:

应用更改可以正常工作,但是当提交包含删除文件时会出现问题。我想使用命令kubectl delete -f,但我想删除的文件在存储库中不存在。

当存储库没有清单文件时,有什么方法可以删除 kubernetes 对象?

我试图在詹金斯容器中恢复以前的提交,kubectl delete -f但它不起作用。

0 投票
0 回答
124 浏览

kubernetes - 使用 yaml 文件进行 Istio 金丝雀更新

阅读有关谁为 Istio 本身执行 [金丝雀升级][1] 的 Istio 文档令人困惑。我不明白该过程应该如何进行以及在每个步骤中会发生什么,此外,它不包括在使用运算符时通过 yaml 文件进行的升级。

仅使用 yamls 在 Kubernetes 集群中更新 IsitioOperator CR 的步骤的高级摘要是什么。例如考虑 Kubernetes 1.18 和 Istio 1.7.x 到 1.9.x 的更新。yamls 可以通过“helm”或“istioctl”生成,但最终,更新应通过“kubectl apply”命令执行(因为 ArgoCD 已用于应用 GitOps 部署方式)。

回答评论中的问题之一的错误示例:

0 投票
1 回答
1250 浏览

kubernetes - 如何从 ArgoCD CLI 添加外部集群进行部署

我在本地设置了几个集群(Minikube 和 Kubeadm)。我已经在我的 Minikube 集群中安装了 ArgoCD。我能够在其上执行部署并且它可以工作。现在我需要从 Minikube 中安装的 ArgoCD 部署到 kubeadm 集群设置。如何在它们之间添加或建立连接!

argocd cluster add CONTEXT另外如何在 CLI 中使用此命令?

0 投票
1 回答
59 浏览

kubernetes - 如何在 GitOps 设置中保护环境存储库?

在 GitOps 设置中,通常有两个存储库 - 代码存储库和环境存储库。我的理解是,分离 repos 有一些安全优势,因此开发人员只需要获得对代码 repo 的访问权限,并且环境 repo 的写访问权限可以仅限于 CI/CD 工具。由于环境 repo 是 GitOps 中的真实来源,因此据称这更安全,因为它最大限度地减少了人对过程的参与。

我的问题是:

  1. 如果上述假设是正确的,应该授予哪些 CI/CD 工具访问环境 repo 的权限?是只是Tekton(CI)、Flux(CD)等流水线工具,还是流水线调用的其他工具也可以包含在这个“信任圈”中?在 GitOps 中保护环境存储库的最佳实践是什么?

  2. 将集群的中间/动态状态同步回环境存储库的思考过程是什么,例如,由 HPA 控制的部署中的副本数量、由服务网格提供商(例如,Istio)控制的网络路由等.? 据我所见,大多数 CD 管道只进行从环境 repo 到集群的单向同步,而不是相反。但是保留一些中间状态可能会有好处,例如,如果需要从环境 repo 重新创建其他集群。

0 投票
1 回答
564 浏览

jenkins - Jenkins替换存储在另一个存储库中的yaml文件中的图像标签

我有两个不同的应用程序和清单存储库。在清单存储库中,我有values.yaml每个微服务的文件。我正在寻找一种image.tag使用 ${BUILD_NUMBER} 更新值的方法,然后将这些更改从应用程序管道提交/合并到清单存储库,如下所示。

这样做的最佳方法是什么?

这是 jenkinsfile 中用于应用程序 repo 的阶段。

0 投票
1 回答
89 浏览

azure-devops - 将变量组移动到代码存储库并从 YAML 管道中引用它

我们正在寻找一种解决方案,如何将非机密变量从变量组移动到代码存储库中。 我们希望有以下可能性:

  • 跟踪代码库中所有设置的更改
  • 变量的版本值连同源代码、管道代码版本

问题:我们定义了 100 多个变量组,这些变量组被 100 多个 YAML 管道引用。它们在不同的管道/阶段/作业级别注入取决于它们正在运行的环境/组件/阶段。

示例问题:

  • 某些变量可以更改其名称,可以删除某些变量,并且在以 PROD 环境为目标的管道中它仍然被引用,而在 DEV 上部署的管道上它不存在
  • 特定管道运行在过去某个日期使用了变量的版本,很高兴知道它过去部署了哪些设置

可能的解决方案

  1. 应该可以使用简单的 yaml 模板变量文件来模拟变量组,并使用以下方法将带有变量组的 yaml 模板包含到主 yaml 中:变量重用

理论上,将变量组转换为 YAML 模板文件并从 YAML 引用它们而不是使用对变量组的引用应该很容易。

然而,即使没有实施这种方法,我们在管道中也遇到了以下限制:“最多可以包含 100 个单独的 YAML 文件(直接或间接)

YAML 模板限制

考虑到我们希望变量组在逻辑上粒度和分离并且不存储在一个大的 yml 文件中的要求(为了不达到工作代理中变量数量的另一个限制),我们不能这样做。

  1. 第二种方法是添加一个简单的脚本(PowerShell?),它将使用一些带有变量(variableName/variableValue)记录的键/值元数据文件,并使用命令执行作业步骤

但它只能在初始作业级别完成,作为第一步,它看起来像 Azure DevOps 中原生提供的重新设计变量组机制。

当当前使用变量时,我们不确定这种方法是否适用于 YAML 管道中的任何地方。它们在某处作为参数传递给任务。等等。

  1. 将所有变量移入密钥保管库机密?我们在一开始就放弃了这个选项,因为密钥库是存储敏感数据的地方,而不是任何人都可以看到的设置。此外,将其存储在机密中会导致管道日志放置 * 而不是真实的配置设置,并混淆管道运行日志信息。

问题

Q1。对于如何在 Azure DevOps YAML 管道中实现变量版本控制/更改跟踪,您有任何其他建议/替代方案吗?

Q2。您在 2. 可能的解决方案中看到任何问题,或者有更好的想法吗?

0 投票
2 回答
237 浏览

kubernetes - GitOps:跨多个命名空间推出对 k8s 资源的更改

我们有一个多租户 kubernetes 集群,托管各种客户环境。Kubernetes 命名空间用于隔离这些客户环境。这些命名空间中的每一个都配置了一组类似的 k8s 资源(部署、配置映射等)。其中一些资源在命名空间中是相同的,而另一些则不相同。

从持续交付的角度来看,我正在探索以无缝方式对这些相同组件(跨命名空间)进行更改的选项。Git-Ops/Pull-based-Continuous-Delivery 似乎是一种很好的方法,它可以让我们无缝地管理各种集群中的 100 个命名空间。

探索了几个 Git-Ops 工具,例如 ArgoCD、Fluxv2 等……但无法弄清楚这些工具是否可以让您同时(或在可预测的时间窗口内)对多个命名空间进行更改。如果您可以指导/建议我选择正确的工具/方法来执行向多个命名空间的部署,这将很有帮助。了解这些 Git-Ops 工具是否可以定制以处理此类场景也将是一件好事。

说明如何在我们的 k8s 集群中设置命名空间。

common-app, common-service,common-cm在环境/命名空间中是相同的。

app1, cm1, app2,cm2不相同。它们有不同的图像标签、标签等。

0 投票
2 回答
827 浏览

kubernetes - 只在配置 Map 更改 argocd 的情况下在 K8s 中部署 Container

我想使用 GitOps(ArgoCD) 在 k8s 中重新部署一个应用程序,以防只有配置映射发生变化,ArgoCD 如何理解重启容器,正如我们都知道的那样,不重启容器新的配置映射不会生效。

场景 - 如果一个容器从 ArgoCD 运行,我必须在 GitHub 中修改 configmap yaml 文件,ArgoCD 将自动理解并同步更新的值,但容器不会重新启动,因为我们没有在部署 Yaml 文件中进行修改,所以配置映射将如何容器中的效果