当前位置:网站首页>使用Karmada实现Helm应用的跨集群部署
使用Karmada实现Helm应用的跨集群部署
2022-06-28 16:28:00 【华为云开发者联盟】
摘要:借助Karmada原生API的支持能力,Karmada可以借助Flux轻松实现Helm应用的跨集群部署。
本文分享自华为云社区《 使用Karmada实现Helm应用的跨集群部署【云原生开源】》,作者:华为云云原生开源团队。
背景
通过使用 Kubernetes 原生 API 并提供高级调度功能,Karmada已经实现了多集群场景下的Kubernetes资源(包括CRD)的分发以及管理。但当前多集群应用往往不是单一的资源形式,使用Helm对应用进行打包的使用场景也非常常见。
借助Karmada原生API的支持能力,Karmada可以借助Flux轻松实现Helm应用的跨集群部署。
部署Karmada
要部署Karmada,你可以参考社区的安装文档(https://github.com/karmada-io/karmada/blob/master/docs/installation/installation.md)。如果想快速体验Karmada,我们建议通过hack/local-up-karmada.sh构建一个Karmada的开发环境。
部署Flux
在Karmada控制面中,你需要安装Flux的CRD,但不需要安装Flux控制器来调和基于CRD创建的CR对象,它们被视为资源模板,而不是特定的资源实例。基于Karmada的work 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
你可以参考此处的文档(https://fluxcd.io/docs/installation/)来获得更详细的安装Flux的细节。
提示:如果你想在你所有的集群上管理基于HelmRelease的应用,你需要在你的所有成员集群中安装Flux。
Helm release分发
准备工作就绪,下面将以一个podinfo的简单应用为例演示如何完成Helm chart分发。
1.在 Karmada 控制平面中定义一个 Flux 的HelmRepository CR对象和一个 HelmRelease CR对象。它们将视作资源模板。
apiVersion: source.toolkit.fluxcd.io/v1beta2kind: HelmRepositorymetadata: name: podinfospec: interval: 1m url: https://stefanprodan.github.io/podinfo
---
apiVersion: 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社区技术交流地址
添加Karmada社区助手微信k8s2222进入社区交流群,和Maintainer零距离。
项目地址:https://github.com/karmada-io/karmada
Slack地址:https://slack.cncf.io/
边栏推荐
- 数字藏品热潮之下,你必须知道的那些事儿
- 【世界海洋日】TcaplusDB号召你一同保护海洋生物多样性
- 【杂谈】2021/01/31 哦豁
- Subscription publishing mode bus in JS
- LTspice 电路仿真入门
- 天翼云Web应用防火墙(边缘云版)通过首批可信认证
- Cross cluster deployment of helm applications using karmada
- Zuckerberg to investors: don't expect anything from metauniverse
- Tongziping, partner of Tongchuang Weiye: "what should yuan universe invest in?"
- Noip1998-2018 csp-s2 2019 2021 improvement group problem solving report and video
猜你喜欢
Cardinality sorting - common sorting method (2/8)
岛屿类问题通用解法与DFS框架
Use open connector to integrate hubspot and SAP systems
The first place on the list - brake by wire "new cycle", the market competitiveness of local suppliers is TOP10
You have a chance to collect wool. Click "earn" and you will have a chance to earn a high commission
云上竞技,360°见证速度与激情
QQ appears large-scale number theft, why is this? Is there no solution?
【Hot100】1. 两数之和
Lucky draw animation - Carp jumps over the dragon's gate
Curve 替换 Ceph 在网易云音乐的实践
随机推荐
js中订阅发布模式bus
WPF 视频硬解码渲染播放(无空域)(支持4K、8K、高帧率视频)
A 24-year-old bald programmer teaches you how to continuously integrate and deliver microservice delivery. You can't learn how to cut me off
Coding Devops helps Sinochem information to build a new generation of research efficiency platform and drive the new future of "online Sinochem"
Solve the problem that subcomponents will not be destroyed through setTimeout
Noip1998-2018 csp-s2 2019 2021 improvement group problem solving report and video
[proteus simulation] L297 driving stepping motor
C#/VB.NET 将PDF转为Excel
[tcaplusdb knowledge base] view tcapdir directory server
如何备份 WordPress 数据库
Inspur network wins step by step
【世界海洋日】TcaplusDB号召你一同保护海洋生物多样性
Cardinality sorting - common sorting method (2/8)
Interview with wangyuntao of China Academy of information technology: digital and real integration enables the prosperity and development of cultural industry
General solution of island problems and DFS framework
[laravel] about the composer installation of laravel8
使用 Open Connector 进行 HubSpot 和 SAP 系统的集成工作
You have a chance to collect wool. Click "earn" and you will have a chance to earn a high commission
中国SSD行业企业势力全景图
How to log in to your WordPress admin dashboard