karmada-io/karmada

GitHub: karmada-io/karmada

一个开放的多云多集群 Kubernetes 编排系统,实现跨云统一管理与自动化运维。

Stars: 5412 | Forks: 1091

# Karmada ![Karmada-logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e6c111bf58193203.png) [![LICENSE](https://img.shields.io/github/license/karmada-io/karmada.svg)](/LICENSE) [![Releases](https://img.shields.io/github/v/release/karmada-io/karmada)](https://github.com/karmada-io/karmada/releases/latest) [![Slack](https://img.shields.io/badge/slack-join-brightgreen)](https://slack.cncf.io) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5301/badge)](https://bestpractices.coreinfrastructure.org/projects/5301) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/karmada-io/karmada/badge)](https://securityscorecards.dev/viewer/?uri=github.com/karmada-io/karmada) ![build](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/d7323278cf193204.svg) [![Go Report Card](https://goreportcard.com/badge/github.com/karmada-io/karmada)](https://goreportcard.com/report/github.com/karmada-io/karmada) [![codecov](https://codecov.io/gh/karmada-io/karmada/branch/master/graph/badge.svg?token=ROM8CMPXZ6)](https://codecov.io/gh/karmada-io/karmada) [![FOSSA Status](https://app.fossa.com/api/projects/custom%2B28176%2Fgithub.com%2Fkarmada-io%2Fkarmada.svg?type=shield)](https://app.fossa.com/projects/custom%2B28176%2Fgithub.com%2Fkarmada-io%2Fkarmada?ref=badge_shield) [![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/karmada)](https://artifacthub.io/packages/krew/krew-index/karmada) [![CLOMonitor](https://img.shields.io/endpoint?url=https://clomonitor.io/api/projects/cncf/karmada/badge)](https://clomonitor.io/projects/cncf/karmada) ## Karmada:开放、多云、多集群 Kubernetes 编排 Karmada (Kubernetes Armada) 是一个 Kubernetes 管理系统,它使您能够在多个 Kubernetes 集群和云上运行云原生应用程序,而无需对应用程序进行任何更改。通过使用 Kubernetes 原生 API 并提供高级调度能力,Karmada 实现了真正开放的、多云的 Kubernetes。 Karmada 旨在为多云和混合云场景中的多集群应用程序管理提供开箱即用的自动化, 具备集中式多云管理、高可用性、故障恢复和流量调度等关键功能。 ![cncf_logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/65951f8afc193205.png) Karmada 是 [Cloud Native Computing Foundation](https://cncf.io/) (CNCF) 的一个孵化项目。 ## 为什么要选择 Karmada: - __K8s 原生 API 兼容__ - 零变更升级,从单集群到多集群 - 无缝集成现有的 K8s 工具链 - __开箱即用__ - 内置场景策略集,包括:活动-活动、远程灾难恢复、地理冗余等。 - 跨集群应用自动伸缩、故障转移和负载均衡。 - __避免供应商锁定__ - 集成主流云提供商 - 自动分配、跨集群迁移 - 不依赖于专有供应商编排 - __集中管理__ - 与位置无关的集群管理 - 支持公有云、本地或边缘集群 - __丰富的多集群调度策略__ - 集群亲和性、多集群拆分/再平衡 - 多维度高可用:区域/可用区/集群/提供商 - __开放且中立__ - 由互联网、金融、制造、电信、云提供商等共同发起 - 以 CNCF 开放治理为目标 **注意:此项目是在 Kubernetes [联邦 v1](https://github.com/kubernetes-retired/federation) 和 [v2](https://github.com/kubernetes-sigs/kubefed) 的基础上继续开发的。一些基本概念继承自这两个版本。** ## 架构 ![Architecture](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/13dee5c08a193206.png) Karmada 控制平面由以下组件组成: - Karmada API Server - Karmada Controller Manager - Karmada Scheduler ETCD 存储 Karmada API 对象,API Server 是所有其他组件通信的 REST 端点,Karmada Controller Manager 根据您通过 API Server 创建的 API 对象执行操作。 Karmada Controller Manager 运行各种控制器,控制器监视 Karmada 对象,然后与底层集群的 API 服务器通信以创建常规的 Kubernetes 资源。 1. 集群控制器:将 Kubernetes 集群附加到 Karmada,通过创建集群对象来管理集群的生命周期。 2. 策略控制器:监视 PropagationPolicy 对象。当 PropagationPolicy 对象被添加时,它会选择与 resourceSelector 匹配的资源组,并为每个单个资源对象创建 ResourceBinding。 3. 绑定控制器:监视 ResourceBinding 对象,并为每个包含单个资源清单的集群创建 Work 对象。 4. 执行控制器:监视 Work 对象。当 Work 对象被创建时,它会将资源分发到成员集群。 ## 概念 **资源模板**:Karmada 使用 Kubernetes 原生 API 定义联邦资源模板,以便轻松集成已经采用 Kubernetes 的现有工具。 **传播策略**:Karmada 提供独立的传播(放置)策略 API,用于定义多集群调度和分散要求。 - 支持策略的 1:n 映射:工作负载,用户无需每次创建联邦应用程序时都指定调度约束。 - 使用默认策略,用户可以直接与 K8s API 交互。 **覆盖策略**:Karmada 提供独立的覆盖策略 API,用于专门化集群相关配置自动化。例如: - 根据成员集群区域覆盖镜像前缀 - 根据云提供商覆盖 StorageClass 下图展示了在将资源传播到成员集群时,Karmada 资源是如何关联的。 ![karmada-resource-relation](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/5aaf2e57af193207.png) ## 快速开始 本指南将涵盖: - 在作为 `host cluster` 的 Kubernetes 集群中安装 `karmada` 控制平面组件。 - 将成员集群加入 `karmada` 控制平面。 - 使用 `karmada` 传播应用程序。 ### 先决条件 - [Go](https://golang.org/) 版本遵循 [go.mod](https://github.com/karmada-io/karmada/blob/master/go.mod#L3) - [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) 版本 v1.19+ - [kind](https://kind.sigs.k8s.io/) 版本 v0.14.0+ ### 安装 Karmada 控制平面 #### 1. 将此仓库克隆到您的机器: ``` git clone https://github.com/karmada-io/karmada ``` #### 2. 切换到 karmada 目录: ``` cd karmada ``` #### 3. 部署并运行 Karmada 控制平面: 运行以下脚本: ``` hack/local-up-karmada.sh ``` 该脚本将为您完成以下任务: - 启动一个 Kubernetes 集群以运行 Karmada 控制平面,即 `host cluster`。 - 基于当前代码库构建 Karmada 控制平面组件。 - 在 `host cluster` 上部署 Karmada 控制平面组件。 - 创建成员集群并加入 Karmada。 如果一切顺利,在脚本输出的最后,您将看到类似以下的消息: ``` Local Karmada is running. To start using your Karmada environment, run: export KUBECONFIG="$HOME/.kube/karmada.config" Please use 'kubectl config use-context karmada-host/karmada-apiserver' to switch the host and control plane cluster. To manage your member clusters, run: export KUBECONFIG="$HOME/.kube/members.config" Please use 'kubectl config use-context member1/member2/member3' to switch to the different member cluster. ``` Karmada 中有两个上下文: - karmada-apiserver `kubectl config use-context karmada-apiserver` - karmada-host `kubectl config use-context karmada-host` `karmada-apiserver` 是与 Karmada 控制平面交互的主要 **kubeconfig**,而 `karmada-host` 仅用于调试 Karmada 安装的主机集群。您可以随时通过运行以下命令查看所有集群:`kubectl config view`。要切换集群上下文,请运行 `kubectl config use-context [CONTEXT_NAME]` ### 演示 ![Demo](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/0705cbb3f6193208.svg) ### 传播应用程序 在以下步骤中,我们将通过 Karmada 传播一个部署。 #### 1. 在 Karmada 中创建 nginx 部署。 首先,创建一个名为 `nginx` 的 [部署](samples/nginx/deployment.yaml): ``` kubectl create -f samples/nginx/deployment.yaml ``` #### 2. 创建将 nginx 传播到成员集群的传播策略 然后,我们需要创建一个策略,将部署传播到我们的成员集群。 ``` kubectl create -f samples/nginx/propagationpolicy.yaml ``` #### 3. 从 Karmada 检查部署状态 您可以从 Karmada 检查部署状态,无需访问成员集群: ``` $ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx 2/2 2 2 20s ``` ## Kubernetes 兼容性 Karmada 与广泛的 Kubernetes 版本兼容。详细的兼容性说明,请参考 [Kubernetes 兼容性](https://karmada.io/docs/administrator/compatibility/)。 下表显示了与最新 10 个 Kubernetes 版本的兼容性测试结果: | | Kubernetes 1.35 | Kubernetes 1.34 | Kubernetes 1.33 | Kubernetes 1.32 | Kubernetes 1.31 | Kubernetes 1.30 | 1.29 | Kubernetes 1.28 | Kubernetes 1.27 | Kubernetes 1.26 | Kubernetes 1.25 | Kubernetes 1.24 | |-----------------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------| | Karmada v1.15 | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | Karmada v1.16 | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | Karmada v1.17 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | | Karmada HEAD (master) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | 关键: * `✓` Karmada 与该 Kubernetes 版本完全兼容。 * `+` Karmada 具有该 Kubernetes 版本中可能不存在的功能或 API 对象。 * `-` 该 Kubernetes 版本具有 Karmada 无法使用的功能或 API 对象。 ## 会议 定期社区会议: * 每周二 14:30 UTC+8(中文)(隔周一次)。[转换到您的时区](https://dateful.com/convert/utc8?t=1430)。 * 每周二 15:00 UTC+0(英文)(隔周一次)。[转换到您的时区](https://dateful.com/convert/coordinated-universal-time-utc?t=15)。 资源: - [会议纪要与议程](https://docs.google.com/document/d/1y6YLVC-v7cmVAdbjedoyR5WL0-q45DBRXTvz5_I7bkA/edit) - [会议日历](https://calendar.google.com/calendar/embed?src=karmadaoss%40gmail.com&ctz=Asia%2FShanghai) | [订阅](https://calendar.google.com/calendar/u/1?cid=a2FybWFkYW9zc0BnbWFpbC5jb20) - [会议链接](https://zoom.com/my/karmada) ## 联系 如果您有任何问题,可以通过以下方式联系我们: - [邮件列表](https://groups.google.com/forum/#!forum/karmada) - [Slack](https://cloud-native.slack.com/archives/C02MUF8QXUN) | [加入](https://slack.cncf.io/) - [Twitter](https://twitter.com/karmada_io) ## 参考 - 要了解在生产中使用 Karmada 的公司和组织,请访问 [采用者页面](https://karmada.io/adopters)。 - 如需商业支持、专业服务和咨询,请访问 [合作伙伴页面](https://karmada.io/partners)。 - 如需了解关于 Karmada 的演讲和演示,请访问 [社区演讲](https://github.com/karmada-io/community/tree/main/talks)。 - 如需博客和文章,请访问 [网站](https://karmada.io/blog/)。 ## 贡献 如果您有兴趣成为贡献者并希望参与 开发 Karmada 代码,请参阅 [CONTRIBUTING](CONTRIBUTING.md) 以了解提交补丁和贡献工作流程的详细信息。 ## 许可证 Karmada 根据 Apache 2.0 许可证授权。有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
标签:API集成, API驱动, CNCF, EVTX分析, Karmada, Krew, NIDS, web渗透, 云中立, 分布式系统, 可观测性, 响应大小分析, 声明式配置, 多云, 多集群, 子域名突变, 容器化, 容器编排, 开源, 扩展性, 提示注入, 日志审计, 服务网格, 混合云, 特权提升, 监控, 编排, 联邦集群, 自动化部署, 调度, 跨云管理, 边缘计算, 镜像仓库, 集群管理