首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GitOps:跨多个命名空间展开对k8s资源的更改

GitOps:跨多个命名空间展开对k8s资源的更改
EN

Stack Overflow用户
提问于 2021-06-17 20:39:11
回答 2查看 437关注 0票数 0

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

从持续交付的角度来看,我正在探索以无缝的方式对这些相同的组件(跨名称空间)进行更改的选项。Git/基于拉式的连续交付似乎是一种很好的方法,它将使我们能够无缝地管理跨不同集群的100多个名称空间。

探讨了一些Git-操作工具,如ArgoCD、Fluxv2等.但不知道这些工具是否允许您同时(或在可预测的时间窗口内)对多个名称空间进行更改。如果您能够指导/建议我选择正确的工具/方法来执行多个命名空间的扩展,这将是很有帮助的。了解这些Git工具是否可以定制来处理这样的场景也是很好的。

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

代码语言:javascript
复制
Namespace: customer1
Deployments: app1, common-app, common-service
Configmaps: cm1, common-cm

Namespace: customer2
Deployments: app2, common-app, common-service
Configmaps: cm2, common-cm

common-appcommon-servicecommon-cm在不同的环境/名称空间中是相同的。

app1cm1app2cm2是不一样的。他们有不同的图像标签,标签等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-18 01:07:54

我在用Fluxv2。我的方法是用相同的值为common-appcommon-service等创建图表,并在单独的HelmReleases上定义名称空间。

因此,您可以将common-app图表放在clusters/production/charts/common-apps上,并在多个HelmReleases上引用图表路径,如

代码语言:javascript
复制
---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: common-apps-customer1
  namespace: customer1
  labels:
    chart: common-apps
spec:
  interval: 1m
  releaseName: common-apps
  chart:
    spec:
      chart: clusters/production/charts/common-apps
      sourceRef:
        kind: GitRepository
        name: manifests
        namespace: flux-system
  values:
    some_key: some_value
---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: common-apps-customer2
  namespace: customer2
  labels:
    chart: common-apps
spec:
  interval: 1m
  releaseName: common-apps
  chart:
    spec:
      chart: clusters/production/charts/common-apps
      sourceRef:
        kind: GitRepository
        name: manifests
        namespace: flux-system
  values:
    some_key: some_value

更新

代码语言:javascript
复制
for ns in $(kubectl get ns --no-headers | cut -d " " -f1); do    
    flux create helmrelease common-apps-$ns \
    --source=GitRepository/manifests \
    --chart=common-apps \
    --release-name=common-apps \
    --target-namespace=$ns \
    --interval=1m0s \
    --export > ./clusters/production/common-apps-$ns.yaml     
done;

这将产生必要的清单,无论如何,应该与你的回购同步。

票数 1
EN

Stack Overflow用户

发布于 2021-06-17 22:18:48

我们使用Flux将资源部署到我们的K8s集群。

这些工具将允许您同时(或在可预测的时间窗口内)对多个名称空间进行更改。

是的,Flux基本上监视您的git是否有任何更改,并将它们应用到集群中。默认情况下,每5分钟检查一次流量变化是可以减少的(虽然我记得我读到任何低于一分钟的东西都可能有问题)。

如果对多个名称空间进行更改,它将在一次执行中应用所有这些名称空间。我从来没有看过对多个名称空间的所有更改是否同时应用,因为它们通常是相当快的。不过,我必须说,在您编写名称空间时,我们还没有在“100多个名称空间”中测试它,但是它在少数几个名称空间中运行得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68026272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档