使用Karmada实现Helm应用的跨集群部署

网友投稿 292 2022-09-09

使用Karmada实现Helm应用的跨集群部署

摘要:借助Karmada原生API的支持能力,Karmada可以借助Flux轻松实现Helm应用的跨集群部署。

本文分享自华为云社区《 ​​使用Karmada实现Helm应用的跨集群部署【云原生开源】​​》,作者:华为云云原生开源团队。

背景

通过使用 Kubernetes 原生 API 并提供高级调度功能,Karmada已经实现了多集群场景下的Kubernetes资源(包括CRD)的分发以及管理。但当前多集群应用往往不是单一的资源形式,使用Helm对应用进行打包的使用场景也非常常见。

借助Karmada原生API的支持能力,Karmada可以借助Flux轻松实现Helm应用的跨集群部署。

部署Karmada

要部署Karmada,你可以参考社区的安装文档(API,它们将被封装为一个work对象下发给成员集群,最终由成员集群中的Flux控制器进行调和。

kubectl apply -k github.com/fluxcd/flux2/manifests/crds?ref=main --kubeconfig ~/.kube/karmada.config

在成员集群中,你可以基于以下命令安装完整的Flux组件。

flux install --kubeconfig ~/.kube/members.config --context member1flux install --kubeconfig ~/.kube/members.config --context member2

你可以参考此处的文档​(​​release分发

准备工作就绪,下面将以一个podinfo的简单应用为例演示如何完成Helm chart分发。

1.在 Karmada 控制平面中定义一个 Flux 的HelmRepository CR对象和一个 HelmRelease CR对象。它们将视作资源模板。

apiVersion: source.toolkit.fluxcd.io/v1beta2kind: HelmRepositorymetadata: name: podinfospec: interval: 1m url: helm.toolkit.fluxcd.io/v2beta1kind: HelmReleasemetadata: name: podinfospec: interval: 5m chart: spec: chart: podinfo version: 5.0.3 sourceRef: kind: HelmRepository name: podinfo

2. 定义一个 Karmada的PropagationPolicy 对象将它们的资源实例下发到成员集群:

apiVersion: policy.karmada.io/v1alpha1kind: PropagationPolicymetadata: name: helm-repospec: resourceSelectors: - apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: HelmRepository name: podinfo placement: clusterAffinity: clusterNames: - member1 - member2

---

apiVersion: policy.karmada.io/v1alpha1kind: PropagationPolicymetadata: name: helm-releasespec: resourceSelectors: - apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease name: podinfo placement: clusterAffinity: clusterNames: - member1 - member2

上述配置将会把Flux的资源对象下发到成员集群member1和member2中。

3. 将上述对象提交给Karmada-apiserver:

kubectl apply -f ../helm/ --kubeconfig ~/.kube/karmada.config

你将会得到以下的输出结果:

helmrelease.helm.toolkit.fluxcd.io/podinfo createdhelmrepository.source.toolkit.fluxcd.io/podinfo createdpropagationpolicy.policy.karmada.io/helm-release createdpropagationpolicy.policy.karmada.io/helm-repo created

4. 切换至成员集群验证应用是否成功下发

helm --kubeconfig ~/.kube/members.config --kube-context member1 list

你将会得到以下的输出结果:

基于 Karmada 的 PropagationPolicy,你可以灵活地将 Helm应用发布到你期望的集群。

为特定集群定制 Helm 应用

上述的示例显示了如何将同一个Helm应用分发到 Karmada 中的多个集群。此外,你还可以使用 Karmada 的 OverridePolicy 为特定集群定制Helm应用。例如,上述应用包括了一个Pod副本,如果你只想更改 member1集群中的应用所包含的Pod副本数,你可以参考以下的 OverridePolicy策略。

1.定义一个Karmada的OverridePolicy对象。

apiVersion: policy.karmada.io/v1alpha1kind: OverridePolicymetadata: name: example-override namespace: defaultspec: resourceSelectors: - apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease name: podinfo overrideRules: - targetCluster: clusterNames: - member1 overriders: plaintext: - path: "/spec/values" operator: add value: replicaCount: 2

2. 将上述对象提交给Karmada-apiserver:

kubectl apply -f example-override.yaml --kubeconfig ~/.kube/karmada.config

你将会得到以下的输出结果:

overridepolicy.policy.karmada.io/example-override created

3. 在 Karmada 控制平面中应用上述策略后,你会发现 member1成员集群中的Pod实例数已变更为 2,但 member2 集群中的那些保持不变。

kubectl --kubeconfig ~/.kube/members.config --context member1 get po

你将会得到以下的输出结果:

NAME READY STATUS RESTARTS AGEpodinfo-68979685bc-6wz6s 1/1 Running 0 6m28spodinfo-68979685bc-dz9f6 1/1 Running 0 7m42s

参考文档:

​​https://github.com/karmada-io/karmada/blob/master/docs/working-with-flux.md​​​​​​

附:Karmada社区技术交流地址

项目地址:​​https://github.com/karmada-io/karmada​

Slack地址:​​https://slack.cncf.io/​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Kubernetes容器运行时-Containerd常用操作
下一篇:王一博刚走又请蔡徐坤 掉队的燕京啤酒深陷“追星”式营销!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~