当前位置:网站首页>使用Karmada实现Helm应用的跨集群部署
使用Karmada实现Helm应用的跨集群部署
2022-06-28 18:35: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 member1
flux 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/v1beta2
kind: HelmRepository
metadata:
name: podinfo
spec:
interval: 1m
url: https://stefanprodan.github.io/podinfo ---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: podinfo
spec:
interval: 5m
chart:
spec:
chart: podinfo
version: 5.0.3
sourceRef:
kind: HelmRepository
name: podinfo2. 定义一个 Karmada的PropagationPolicy 对象将它们的资源实例下发到成员集群:
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: helm-repo
spec:
resourceSelectors:
- apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
name: podinfo
placement:
clusterAffinity:
clusterNames:
- member1
- member2---
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: helm-release
spec:
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 created
helmrepository.source.toolkit.fluxcd.io/podinfo created
propagationpolicy.policy.karmada.io/helm-release created
propagationpolicy.policy.karmada.io/helm-repo created4. 切换至成员集群验证应用是否成功下发
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/v1alpha1
kind: OverridePolicy
metadata:
name: example-override
namespace: default
spec:
resourceSelectors:
- apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
name: podinfo
overrideRules:
- targetCluster:
clusterNames:
- member1
overriders:
plaintext:
- path: "/spec/values"
operator: add
value:
replicaCount: 22. 将上述对象提交给Karmada-apiserver:
kubectl apply -f example-override.yaml --kubeconfig ~/.kube/karmada.config你将会得到以下的输出结果:
overridepolicy.policy.karmada.io/example-override created3. 在 Karmada 控制平面中应用上述策略后,你会发现 member1成员集群中的Pod实例数已变更为 2,但 member2 集群中的那些保持不变。
kubectl --kubeconfig ~/.kube/members.config --context member1 get po你将会得到以下的输出结果:
NAME READY STATUS RESTARTS AGE
podinfo-68979685bc-6wz6s 1/1 Running 0 6m28s
podinfo-68979685bc-dz9f6 1/1 Running 0 7m42s参考文档:
karmada/working-with-flux.md at master · karmada-io/karmada · GitHub
附:Karmada社区技术交流地址
添加Karmada社区助手微信k8s2222进入社区交流群,和Maintainer零距离。
项目地址:
GitHub - karmada-io/karmada: Open, Multi-Cloud, Multi-Cluster Kubernetes Orchestration
Slack地址:https://slack.cncf.io/
边栏推荐
- 微信小程序接入百度统计报错 Cannot read property ‘mtj‘ of undefined
- 做跨境电商一定要学会用PRA软件,解放双手提高效率!
- C语言指针的一些易错点
- CVPR2022 | 浙大、蚂蚁集团提出基于标签关系树的层级残差多粒度分类网络,建模多粒度标签间的层级知识
- Oom out of memory memory overflow
- 闭包的理解
- Lumiprobe非荧光叠丨氮化物研究丨3-叠丨氮丙醇
- 618 activity season - the arrival of special discounts for hundreds of low code platforms
- 记一次Emotet木马处理案例
- 如何使用 SAP CDS view 中的 currency conversion 功能
猜你喜欢

Yixin Huachen: real estate enterprises want to grasp the opportunity of the times for digital transformation

Unity about oculus quest2 developing 002-ui interaction based on XR interaction Toolkit

324. swing sequencing II

Alist+RaiDrive 给电脑整个80亿GB硬盘

About Significance Tests

解析机器人主持教学的实践发展

Lumiprobe非荧光炔烃研究丨DBCO NHS 酯

【Unity3D】发射(RayCast)物理射线(Ray)

618活动季——百数低代码平台特享折扣来临

Learning notes: how to time 10ms for 51 single chip microcomputer (STC89C52)
随机推荐
Steam education to break the barriers between disciplines
Unity about oculus quest2 developing 002-ui interaction based on XR interaction Toolkit
1 invalid import format(s) Postman Collection Format v1 is no longer supported and can not be import
手动备份和还原DHCP服务器
Lumiprobe 蛋白质标记研究方案
启牛学堂的vip证券账户是真的安全正规吗?怎么说
微信小程序接入百度统计报错 Cannot read property ‘mtj‘ of undefined
刷题分析工具
Easyexcel learning notes
Lumiprobe ProteOrange 蛋白质凝胶染料说明书
Voice network VQA: make the user's subjective experience of unknown video quality in real-time interaction known
原生实现.NET5.0+ 自定义日志
Sharing-JDBC分布式事务之Seata实现
PMP怎么补考?补考费用是多少?
从理论到实践增强STEAM和工程教育
深入解析kubernetes中的选举机制
推荐两款超高质量的壁纸软件
业务层修改--根据现有框架的反推修改
数据资产为王,如何解析企业数字化转型与数据资产管理的关系?
Upload file list (repeated file names are marked with brackets)