问题标签 [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.
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-restart
了kubectl apply
。我想使用上述方法。有什么办法吗?
jenkins - 使用 Jenkins 从 Gitlab 管理 K8s 集群
我正在尝试从 gitlab 存储库(存储所有清单)管理我们的 k8s 集群。当 gitlab 收到提交时,将 webhook 发送到 jenkins 服务器并触发此管道:
应用更改可以正常工作,但是当提交包含删除文件时会出现问题。我想使用命令kubectl delete -f
,但我想删除的文件在存储库中不存在。
当存储库没有清单文件时,有什么方法可以删除 kubernetes 对象?
我试图在詹金斯容器中恢复以前的提交,kubectl delete -f
但它不起作用。
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 部署方式)。
回答评论中的问题之一的错误示例:
kubernetes - 如何从 ArgoCD CLI 添加外部集群进行部署
我在本地设置了几个集群(Minikube 和 Kubeadm)。我已经在我的 Minikube 集群中安装了 ArgoCD。我能够在其上执行部署并且它可以工作。现在我需要从 Minikube 中安装的 ArgoCD 部署到 kubeadm 集群设置。如何在它们之间添加或建立连接!
argocd cluster add CONTEXT
另外如何在 CLI 中使用此命令?
kubernetes - 如何在 GitOps 设置中保护环境存储库?
在 GitOps 设置中,通常有两个存储库 - 代码存储库和环境存储库。我的理解是,分离 repos 有一些安全优势,因此开发人员只需要获得对代码 repo 的访问权限,并且环境 repo 的写访问权限可以仅限于 CI/CD 工具。由于环境 repo 是 GitOps 中的真实来源,因此据称这更安全,因为它最大限度地减少了人对过程的参与。
我的问题是:
如果上述假设是正确的,应该授予哪些 CI/CD 工具访问环境 repo 的权限?是只是Tekton(CI)、Flux(CD)等流水线工具,还是流水线调用的其他工具也可以包含在这个“信任圈”中?在 GitOps 中保护环境存储库的最佳实践是什么?
将集群的中间/动态状态同步回环境存储库的思考过程是什么,例如,由 HPA 控制的部署中的副本数量、由服务网格提供商(例如,Istio)控制的网络路由等.? 据我所见,大多数 CD 管道只进行从环境 repo 到集群的单向同步,而不是相反。但是保留一些中间状态可能会有好处,例如,如果需要从环境 repo 重新创建其他集群。
jenkins - Jenkins替换存储在另一个存储库中的yaml文件中的图像标签
我有两个不同的应用程序和清单存储库。在清单存储库中,我有values.yaml
每个微服务的文件。我正在寻找一种image.tag
使用 ${BUILD_NUMBER} 更新值的方法,然后将这些更改从应用程序管道提交/合并到清单存储库,如下所示。
这样做的最佳方法是什么?
这是 jenkinsfile 中用于应用程序 repo 的阶段。
azure-devops - 将变量组移动到代码存储库并从 YAML 管道中引用它
我们正在寻找一种解决方案,如何将非机密变量从变量组移动到代码存储库中。 我们希望有以下可能性:
- 跟踪代码库中所有设置的更改
- 变量的版本值连同源代码、管道代码版本
问题:我们定义了 100 多个变量组,这些变量组被 100 多个 YAML 管道引用。它们在不同的管道/阶段/作业级别注入取决于它们正在运行的环境/组件/阶段。
示例问题:
- 某些变量可以更改其名称,可以删除某些变量,并且在以 PROD 环境为目标的管道中它仍然被引用,而在 DEV 上部署的管道上它不存在
- 特定管道运行在过去某个日期使用了变量的版本,很高兴知道它过去部署了哪些设置
可能的解决方案:
- 应该可以使用简单的 yaml 模板变量文件来模拟变量组,并使用以下方法将带有变量组的 yaml 模板包含到主 yaml 中:变量重用。
理论上,将变量组转换为 YAML 模板文件并从 YAML 引用它们而不是使用对变量组的引用应该很容易。
然而,即使没有实施这种方法,我们在管道中也遇到了以下限制:“最多可以包含 100 个单独的 YAML 文件(直接或间接) ”
考虑到我们希望变量组在逻辑上粒度和分离并且不存储在一个大的 yml 文件中的要求(为了不达到工作代理中变量数量的另一个限制),我们不能这样做。
- 第二种方法是添加一个简单的脚本(PowerShell?),它将使用一些带有变量(variableName/variableValue)记录的键/值元数据文件,并使用命令执行作业步骤
但它只能在初始作业级别完成,作为第一步,它看起来像 Azure DevOps 中原生提供的重新设计变量组机制。
当当前使用变量时,我们不确定这种方法是否适用于 YAML 管道中的任何地方。它们在某处作为参数传递给任务。等等。
- 将所有变量移入密钥保管库机密?我们在一开始就放弃了这个选项,因为密钥库是存储敏感数据的地方,而不是任何人都可以看到的设置。此外,将其存储在机密中会导致管道日志放置 * 而不是真实的配置设置,并混淆管道运行日志信息。
问题:
Q1。对于如何在 Azure DevOps YAML 管道中实现变量版本控制/更改跟踪,您有任何其他建议/替代方案吗?
Q2。您在 2. 可能的解决方案中看到任何问题,或者有更好的想法吗?
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
不相同。它们有不同的图像标签、标签等。
kubernetes - 只在配置 Map 更改 argocd 的情况下在 K8s 中部署 Container
我想使用 GitOps(ArgoCD) 在 k8s 中重新部署一个应用程序,以防只有配置映射发生变化,ArgoCD 如何理解重启容器,正如我们都知道的那样,不重启容器新的配置映射不会生效。
场景 - 如果一个容器从 ArgoCD 运行,我必须在 GitHub 中修改 configmap yaml 文件,ArgoCD 将自动理解并同步更新的值,但容器不会重新启动,因为我们没有在部署 Yaml 文件中进行修改,所以配置映射将如何容器中的效果