我们有一个多租户kubernetes集群,承载各种客户环境。Kubernetes名称空间用于隔离这些客户环境。每个名称空间都配置了一组相似的k8s资源(部署、configmap等)。这些资源中有些在名称空间之间是相同的,而有些则不是相同的。
从持续交付的角度来看,我正在探索以无缝的方式对这些相同的组件(跨名称空间)进行更改的选项。Git/基于拉式的连续交付似乎是一种很好的方法,它将使我们能够无缝地管理跨不同集群的100多个名称空间。
探讨了一些Git-操作工具,如ArgoCD、Fluxv2等.但不知道这些工具是否允许您同时(或在可预测的时间窗口内)对多个名称空间进行更改。如果您能够指导/建议我选择正确的工具/方法来执行多个命名空间的扩展,这将是很有帮助的。了解这些Git工具是否可以定制来处理这样的场景也是很好的。
说明如何在我们的k8s集群中设置名称空间。
Namespace: customer1
Deployments: app1, common-app, common-service
Configmaps: cm1, common-cm
Namespace: customer2
Deployments: app2, common-app, common-service
Configmaps: cm2, common-cmcommon-app、common-service、common-cm在不同的环境/名称空间中是相同的。
app1,cm1,app2,cm2是不一样的。他们有不同的图像标签,标签等。
发布于 2021-06-18 01:07:54
我在用Fluxv2。我的方法是用相同的值为common-app、common-service等创建图表,并在单独的HelmReleases上定义名称空间。
因此,您可以将common-app图表放在clusters/production/charts/common-apps上,并在多个HelmReleases上引用图表路径,如
---
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

更新
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;这将产生必要的清单,无论如何,应该与你的回购同步。

发布于 2021-06-17 22:18:48
我们使用Flux将资源部署到我们的K8s集群。
这些工具将允许您同时(或在可预测的时间窗口内)对多个名称空间进行更改。
是的,Flux基本上监视您的git是否有任何更改,并将它们应用到集群中。默认情况下,每5分钟检查一次流量变化是可以减少的(虽然我记得我读到任何低于一分钟的东西都可能有问题)。
如果对多个名称空间进行更改,它将在一次执行中应用所有这些名称空间。我从来没有看过对多个名称空间的所有更改是否同时应用,因为它们通常是相当快的。不过,我必须说,在您编写名称空间时,我们还没有在“100多个名称空间”中测试它,但是它在少数几个名称空间中运行得很好。
https://stackoverflow.com/questions/68026272
复制相似问题