文档首页/ 华为云UCS/ API参考/ 使用Karmada API
更新时间:2024-04-30 GMT+08:00

使用Karmada API

Karmada API说明

Karmada API 是提供 Karmada 功能服务并负责其状态存储的基于资源 (RESTful) 的编程接口。它支持通过标准HTTP请求方法(POST、PUT、PATCH、DELETE、GET)进行查询、创建、更新和删除各类联邦资源。了解详细的Karmada API信息请参见Karmada API

UCS支持通过API网关调用Karmada API。

通过API网关调用Karmada API

Karmada API 可以通过API网关调用,其URL格式为:https://{fleetname}.fleet.ucs.{Region}-dev.myhuaweicloud.com/{uri},其中有三个参数。
表1 URL中的参数说明

参数

描述

{fleetname}

舰队名称,可在控制台内舰队基本信息中获取。

{Region}

服务应用区域的URL,可以通过终端节点(Endpoint)获取。

示例:华北-北京四的Region为cn-north-4

{uri}

资源路径,也即API访问路径。从具体接口的URI模块获取,请参见Karmada API

示例:根据需要调用的接口设置,例如需要查看一个Deployment的详情,则请求方法为GET,接口uri为apis/apps/v1/namespaces/default/deployments,其中{namespace}为集群命名空间名称,本示例为default。

  1. 登录UCS控制台,单击目标容器舰队名进入“容器舰队信息”页面,在“舰队基本信息”中单击“kubectl”。
  2. 参照页面中的提示信息,选择对应的项目名称、虚拟私有云(VPC)、控制节点子网以及有效期,单击“下载”,下载kubectl配置文件。

    下载下来的文件名为kubeconfig.json。

    kubeconfig.json文件中存在安全泄露风险,请您务必妥善保存。

    kubectl配置文件有效期可根据实际需求选择,下拉列表内可选范围为:5年、1年、6个月、30天、15天、14天、13天...1天,最短为1天。

  3. 在执行机上安装和配置kubectl。

    1. 拷贝kubectl及其配置文件到上述所选的vpc和子网下的执行机的/home目录下。
    2. 登录到您的执行机,配置kubectl

      cd /home

      chmod +x kubectl

      mv -f kubectl /usr/local/bin

      mkdir -p $HOME/.kube

      mv -f kubeconfig.json $HOME/.kube/config

  4. 根据URL格式进行拼接,确定请求的URL。

    • {fleetname}为舰队名称,可在控制台内舰队基本信息中获取。
    • region为Web服务入口点的URL,可以通过终端节点(Endpiont)获取。
    • {uri}为资源路径,也即API访问的路径,从具体接口的URI模块获取,请参见Karmada API

    则调用接口查看联邦内所有deployment信息的URL示例如下:

    https://r******.fleet.ucs.cn-north-4-dev.myhuaweicloud.com/apis/apps/v1/namespaces/default/deployments

  5. 创建Admin Role 获取请求对应Beartoken。

    1. 将如下内容保存为admin-role.yaml文件。
      kind: ClusterRoleBinding
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        name: admin
        annotations:
          rbac.authorization.kubernetes.io/autoupdate: "true"
      roleRef:
        kind: ClusterRole
        name: cluster-admin
        apiGroup: rbac.authorization.k8s.io
      subjects:
      - kind: ServiceAccount
        name: admin
        namespace: kube-system
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: admin
        namespace: kube-system
        labels:
          kubernetes.io/cluster-service: "true"
          addonmanager.kubernetes.io/mode: Reconcile
    2. 使用kubectl apply -f admin-role.yaml 创建对应的service-account及权限。
    3. 使用kubectl create token admin --namespace kube-system 获取账户对应Beartoken。
    4. 设置环境变量token,其值为上一步获取的Beartoken。

  6. 使用接口指定的请求方法,并设置请求Header参数。如果接口要求添加Body参数,可参考Karmada API添加接口对应的结构体。

    例如使用curl命令调用创建Deployment接口,请求方法为POST,并添加对应的Body体。

    示例:本示例将使用nginx.json文件,创建一个名为nginx的deployment负载,该工作负载使用nginx:latest镜像并包含两个Pod,每个Pod占用100mCPU、200Mi内存。在该工作负载创建完成后,您可以继续参考上述步骤,从Karmada API获取PropagationPolicy对应的URI,创建分发策略。

    curl --location --request POST 'https://r*****.fleet.ucs.cn-north-4-dev.myhuaweicloud.com/apis/apps/v1/deployments' \
    --header 'Content-Type: application/json' \
    --header 'Authorization: Bearer $token' \
    --data @nginx.json
    请求中包含的Header参数如下:
    表2 请求Header参数

    参数

    是否必选

    参数类型

    描述

    Content-Type

    String

    消息体的类型(格式),例如application/json

    Authorization

    String

    获取Beartoken的方式请参见5

    nginx.json文件内容如下:

    {
        "apiVersion": "apps/v1",
        "kind": "Deployment",
        "metadata": {
            "name": "nginx"
        },
        "spec": {
            "replicas": 2,
            "selector": {
                "matchLabels": {
                    "app": "nginx"
                }
            },
            "template": {
                "metadata": {
                    "labels": {
                        "app": "nginx"
                    }
                },
                "spec": {
                    "containers": [
                        {
                            "image": "nginx:latest",
                            "name": "container-0",
                            "resources": {
                                "limits": {
                                    "cpu": "100m",
                                    "memory": "200Mi"
                                },
                                "requests": {
                                    "cpu": "100m",
                                    "memory": "200Mi"
                                }
                            }
                        }
                    ],
                    "imagePullSecrets": [
                        {
                            "name": "default-secret"
                        }
                    ]
                }
            }
        }
    }