【Karmada使用教程】使用 Karmada-search 来体验多集群检索

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

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

karmada-1.png本指南将涵盖以下内容:

✅ 在 Karmada 控制面上安装 karmada-search 组件

✅ 缓存多个集群的 Deployment 资源。

✅ 使用 OpenSearch 图形界面检索 Kubernetes 资源。


前提条件

在安装 karmada-search 之前,您必须先安装 Karmada 控制平面。要启动 Karmada,您可以参考安装概述。如果您只是想尝试 Karmada,我们建议使用 hack/local-up-karmada.sh 构建开发环境。

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


安装 karmada-search

如果您使用hack/local-up-karmada.sh,那 karmada-search 已经安装好了。

如果您通过 Helm 安装 Karmada,可以选择以下任意一种方式进行安装:

  •  host 模式下安装 karmada-search

helm upgrade --install karmada -n karmada-system --create-namespace --dependency-update \
     --cleanup-on-fail ./charts/karmada \
     --set components={"search"}
  •  component 模式下单独安装 karmada-search

为 karmada-search 编辑 values.yaml 文件:

installMode: "component"
components: [
  "search"
]
...

执行下述命令:

kubectl config use-context host
helm install karmada -n karmada-system ./charts/karmada

如果您通过 Karmada Operator 安装 Karmada,可以在安装 Karmada 组件时,执行下述命令:

kubectl create namespace test
kubectl apply -f - <<EOF
apiVersion: operator.karmada.io/v1alpha1
kind: Karmada
metadata:
  name: karmada-demo
  namespace: test
spec:
  components:
    karmadaSearch: {}
EOF

此外,karmadactl 支持一键安装 karmada-search

karmadactl addons enable karmada-search

karmadactl addons enable karmada-search

有关更多详细信息,您可以参考 karmadactl addons instruction


缓存多个集群的 Deployment 资源

在接下来的步骤中,我们将在缓存成员集群的 Deployment 资源。根据示例,我们已经将一个 nginx Deployment 分发到了 member1 和 member2。

1️⃣ 创建一个 ResourceRegistry,它将缓存目标集群中的 Deployment 资源。

### deployment-search.yaml
apiVersion: search.karmada.io/v1alpha1
kind: ResourceRegistry
metadata:
  name: deployment-search
spec:
  targetCluster:
    clusterNames:
      - member1
      - member2
  resourceSelectors:
    - apiVersion: apps/v1
      kind: Deployment
kubectl --kubeconfig $HOME/.kube/karmada.config --context karmada-apiserver create -f deployment-search.yaml

2️⃣ 通过 Kubernetes API 进行测试

您可以通过以下命令从 member1 和 member2 获取 deployment 资源。

kubectl --kubeconfig $HOME/.kube/karmada.config --context karmada-apiserver get --raw /apis/search.karmada.io/v1alpha1/search/cache/apis/apps/v1/deployments

输出类似于(忽略不相关的字段):

{
  "kind": "List",
  "apiVersion": "apps/v1",
  "metadata": {},
  "items": [{
    "apiVersion": "apps/v1",
    "kind": "Deployment",
    "metadata": {
      "annotations": {
        "deployment.kubernetes.io/revision": "1",
        "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"nginx\"},\"name\":\"nginx\",\"namespace\":\"default\"},\"spec\":{\"replicas\":2,\"selector\":{\"matchLabels\":{\"app\":\"nginx\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"nginx\"}},\"spec\":{\"containers\":[{\"image\":\"nginx\",\"name\":\"nginx\"}]}}}}\n",
        "resource.karmada.io/cached-from-cluster": "member1",
        "resourcebinding.karmada.io/name": "nginx-deployment",
        "resourcebinding.karmada.io/namespace": "default",
        "resourcetemplate.karmada.io/uid": "b46d2736-78d8-47db-b589-6e819139ba33"
      },
      "creationTimestamp": "2022-11-18T08:34:28Z",
      "generation": 1,
      "labels": {
        "app": "nginx",
        "propagationpolicy.karmada.io/name": "nginx-propagation",
        "propagationpolicy.karmada.io/namespace": "default",
        "resourcebinding.karmada.io/key": "687f7fb96f",
        "work.karmada.io/name": "nginx-687f7fb96f",
        "work.karmada.io/namespace": "karmada-es-member1"
      }
    }
  }, {
    "apiVersion": "apps/v1",
    "kind": "Deployment",
    "metadata": {
      "annotations": {
        "deployment.kubernetes.io/revision": "1",
        "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"nginx\"},\"name\":\"nginx\",\"namespace\":\"default\"},\"spec\":{\"replicas\":2,\"selector\":{\"matchLabels\":{\"app\":\"nginx\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"nginx\"}},\"spec\":{\"containers\":[{\"image\":\"nginx\",\"name\":\"nginx\"}]}}}}\n",
        "resource.karmada.io/cached-from-cluster": "member2",
        "resourcebinding.karmada.io/name": "nginx-deployment",
        "resourcebinding.karmada.io/namespace": "default",
        "resourcetemplate.karmada.io/uid": "e785db97-4d17-4871-99be-6d629c556b89"
      },
      "creationTimestamp": "2022-11-21T02:23:26Z",
      "generation": 1,
      "labels": {
        "app": "nginx",
        "propagationpolicy.karmada.io/name": "nginx-propagation",
        "propagationpolicy.karmada.io/namespace": "default",
        "resourcebinding.karmada.io/key": "687f7fb96f",
        "work.karmada.io/name": "nginx-687f7fb96f",
        "work.karmada.io/namespace": "karmada-es-member2"
      }
    }
  }]
}
 

使用 OpenSearch 图形界面检索 Kubernetes 资源

karmada-search 还支持将缓存资源同步到独立存储服务,如 Elasticsearch 或 OpenSearch。通过利用搜索引擎,您可以按字段和索引执行具有所有所需功能的全文搜索;根据分数对结果进行排名、按字段对结果进行排序,并聚合结果。

以下是使用 OpenSearch 以图形界面检索 Kubernetes 资源的示例。

1️⃣ 部署 OpenSearch 和 OpenSearch 仪表盘

使用以下脚本部署 OpenSearch 和 OpenSearch 仪表盘。

./hack/deploy-karmada-opensearch.sh $HOME/.kube/karmada.config karmada-host

验证安装结果:

kubectl --kubeconfig $HOME/.kube/karmada.config --context karmada-host get po -A

输出类似于:

NAMESPACE            NAME                                                   READY   STATUS    RESTARTS   AGE
karmada-system       karmada-opensearch-77454fbcf5-7rpvz                    1/1     Running   0          155m
karmada-system       karmada-opensearch-dashboards-596bf4d9dd-n9429         1/1     Running   0          156m
...

2️⃣ 更新 ResourceRegistry 与 backendStore

### deployment-search.yaml
apiVersion: search.karmada.io/v1alpha1
kind: ResourceRegistry
metadata:
  name: deployment-search
spec:
  backendStore:
    openSearch:
      addresses:
        - http://karmada-opensearch.karmada-system.svc:9200
  targetCluster:
    clusterNames:
      - member1
      - member2
  resourceSelectors:
    - apiVersion: apps/v1
      kind: Deployment
kubectl --kubeconfig $HOME/.kube/karmada.config --context karmada-apiserver apply -f deployment-search.yaml

3️⃣ 暴露仪表板的服务

您需要将 Web 服务暴露到主机端口,以便可以通过 HTTP 访问仪表板。

kubectl --kubeconfig $HOME/.kube/karmada.config --context karmada-host port-forward svc/karmada-opensearch-dashboards 5601:5601 -nkarmada-system --address=0.0.0.0

4️⃣ 访问仪表盘

访问 OpenSearch 仪表板(http://NodeIP:5601):

体验检索1.png

现在 Deployment 的数据已经上传到 OpenSearch 中的 member1 和 member2。您可以利用搜索引擎自己体验多集群检索。

更多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个月内不可修改。