【Karmada使用教程】通过 Karmada 分发 CRD

举报
云容器大未来 发表于 2025/12/16 14:46:03 2025/12/16
【摘要】 Karmada 是开放的多云多集群容器编排引擎,旨在帮助用户在多云环境下部署和运维业务应用。凭借兼容 Kubernetes 原生 API 的能力,Karmada 可以平滑迁移单集群工作负载,并且仍可保持与 Kubernetes 周边生态工具链协同。本系列文章将介绍Karmada的使用教程,本文介绍如何通过 Karmada 分发 CRD。

Karmada 是开放的多云多集群容器编排引擎,旨在帮助用户在多云环境下部署和运维业务应用。凭借兼容 Kubernetes 原生 API 的能力,Karmada 可以平滑迁移单集群工作负载,并且仍可保持与 Kubernetes 周边生态工具链协同。本系列文章将介绍Karmada的使用教程,本文介绍如何通过 Karmada 分发 CRD

karmada-1.png在本节中,我们将引导您完成以下内容:

✅ 安装 Karmada 控制平面。

✅ 将 CRD 分发到多个集群。

✅ 在特定集群中自定义 CRD。

启动 Karmada 集群

想要启动 Karmada,您可以参考安装概述。

如果您只想尝试 Karmada,请使用 hack/local-up-karmada.sh 构建开发环境。

git clone https://github.com/karmada-io/karmada
cd karmada
hack/local-up-karmada.sh

分发 CRD

📝 下面的步骤指导您如何分发 CRD Guestbook

假设您在 Karmada 仓库的 guestbook 目录下。

cd samples/guestbook

使用 Karmada 配置设置 KUBECONFIG 环境变量。

export KUBECONFIG=${HOME}/.kube/karmada.config

1️⃣ 在 Karmada 的控制平面上创建 Guestbook CRD

kubectl apply -f guestbooks-crd.yaml 

此 CRD 应该被应用到 karmada-apiserver

2️⃣ 创建 ClusterPropagationPolicy,将 Guestbook CRD 分发到 member1

kubectl apply -f guestbooks-clusterpropagationpolicy.yaml
# guestbooks-clusterpropagationpolicy.yaml
apiVersion: policy.karmada.io/v1alpha1
kind: ClusterPropagationPolicy
metadata:
  name: example-policy
spec:
  resourceSelectors:
    - apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      name: guestbooks.webapp.my.domain
  placement:
    clusterAffinity:
      clusterNames:
        - member1

根据 ClusterPropagationPolicy 中定义的规则,此 CRD 将分发到成员集群。

📌 注意:在这里我们只能使用 ClusterPropagationPolicy 而不是 PropagationPolicy。 更多详细信息,请参考 FAQ PropagationPolicy and ClusterPropagationPolicy

3️⃣ 在 Karmada 控制平面上创建名为 guestbook-sample 的 Guestbook CR

kubectl apply -f guestbook.yaml

4️⃣ 创建 PropagationPolicy,将 guestbook-sample分发到 member1

kubectl apply -f guestbooks-propagationpolicy.yaml
# guestbooks-propagationpolicy.yaml
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
  name: example-policy
spec:
  resourceSelectors:
    - apiVersion: webapp.my.domain/v1
      kind: Guestbook
  placement:
    clusterAffinity:
      clusterNames:
        - member1

5️⃣ 检查 Karmada  guestbook-sample 的状态

kubectl get guestbook -oyaml

输出类似于以下内容:

apiVersion: webapp.my.domain/v1
kind: Guestbook
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"webapp.my.domain/v1","kind":"Guestbook","metadata":{"annotations":{},"name":"guestbook-sample","namespace":"default"},"spec":{"alias":"Name","configMapName":"test","size":2}}
  creationTimestamp: "2022-11-18T06:56:24Z"
  generation: 1
  labels:
    propagationpolicy.karmada.io/name: example-policy
    propagationpolicy.karmada.io/namespace: default
  name: guestbook-sample
  namespace: default
  resourceVersion: "682895"
  uid: 2f8eda5f-35ab-4ac3-bcd4-affcf36a9341
spec:
  alias: Name
  configMapName: test
  size: 2

自定义 CRD

1️⃣ 创建 OverridePolicy,将覆盖 member1 中 guestbook-sample 的 size 字段。

kubectl apply -f guestbooks-overridepolicy.yaml
# guestbooks-overridepolicy.yaml
apiVersion: policy.karmada.io/v1alpha1
kind: OverridePolicy
metadata:
  name: guestbook-sample
spec: 
  resourceSelectors: 
  - apiVersion: webapp.my.domain/v1 
    kind: Guestbook
  overrideRules: 
  - targetCluster: 
      clusterNames:
      - member1
    overriders:
      plaintext:
      - path: /spec/size
        operator: replace
        value: 4
      - path: /metadata/annotations
        operator: add
        value: {"OverridePolicy":"test"}

2️⃣ 检查来自成员集群的 guestbook-sample 的 size 字段

kubectl --kubeconfig=${HOME}/.kube/members.config config use-context member1
kubectl --kubeconfig=${HOME}/.kube/members.config get guestbooks -o yaml

如果按预期工作,则 .spec.size 将被覆盖为 4

apiVersion: webapp.my.domain/v1
kind: Guestbook
metadata:
annotations:
OverridePolicy: test
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"webapp.my.domain/v1","kind":"Guestbook","metadata":{"annotations":{},"name":"guestbook-sample","namespace":"default"},"spec":{"alias":"Name","configMapName":"test","size":2}}
resourcebinding.karmada.io/name: guestbook-sample-guestbook
resourcebinding.karmada.io/namespace: default
resourcetemplate.karmada.io/uid: 2f8eda5f-35ab-4ac3-bcd4-affcf36a9341
creationTimestamp: "2022-11-18T06:56:37Z"
generation: 2
labels:
propagationpolicy.karmada.io/name: example-policy
propagationpolicy.karmada.io/namespace: default
resourcebinding.karmada.io/key: 6849fdbd59
work.karmada.io/name: guestbook-sample-6849fdbd59
work.karmada.io/namespace: karmada-es-member1
name: guestbook-sample
namespace: default
resourceVersion: "430024"
uid: 8818e33d-10bf-4270-b3b9-585977425bc9
spec:
alias: Name
configMapName: test
size: 4

更多Karmada云原生多云容器引擎使用教程与技术交流,欢迎关注Karmada社区公众号或添加社区小助手k8s2222,回复Karmada进群。

karmada公众号.jpg

Karmada 公众号

 


Karmada 是CNCF 首个多云多集群容器编排项目(孵化级),旨在帮助用户像使用单个集群一样轻松管理跨云多集群,让基于 Karmada 的多云方案无缝融入云原生技术生态。社区吸引了来自华为、道客、浙江大学、滴滴、腾讯、中国电子云等60多家公司的全球贡献者,广泛分布于22个国家和地区。Karmada 现已在华为云、道客、兴业数金、中国移动、中国联通、携程、360集团、新浪、中通快递等众多企业单位生产应用,为企业提供从单集群到多云架构的平滑演进方案。

Karmada官网:https://karmada.io/

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

Slack地址:https://slack.cncf.io/(#karmada)

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。