使用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
参数 |
描述 |
---|---|
{fleetname} |
舰队名称,可在控制台内舰队基本信息中获取。 |
{Region} |
服务应用区域的URL,可以通过终端节点(Endpoint)获取。 示例:华北-北京四的Region为cn-north-4 |
{uri} |
资源路径,也即API访问路径。从具体接口的URI模块获取,请参见Karmada API。 示例:根据需要调用的接口设置,例如需要查看一个Deployment的详情,则请求方法为GET,接口uri为apis/apps/v1/namespaces/default/deployments,其中{namespace}为集群命名空间名称,本示例为default。 |
- 登录UCS控制台,单击目标容器舰队名进入“容器舰队信息”页面,在“舰队基本信息”中单击“kubectl”。
图1 kubectl连接信息
- 参照页面中的提示信息,选择对应的项目名称、虚拟私有云(VPC)、控制节点子网以及有效期,单击“下载”,下载kubectl配置文件。
下载下来的文件名为kubeconfig.json。
图2 kubectl连接联邦实例
kubeconfig.json文件中存在安全泄露风险,请您务必妥善保存。
kubectl配置文件有效期可根据实际需求选择,下拉列表内可选范围为:5年、1年、6个月、30天、15天、14天、13天...1天,最短为1天。
- 在执行机上安装和配置kubectl。
- 根据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
- 创建Admin Role 获取请求对应Beartoken。
- 将如下内容保存为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
- 使用kubectl apply -f admin-role.yaml 创建对应的service-account及权限。
- 使用kubectl create token admin --namespace kube-system 获取账户对应Beartoken。
- 设置环境变量token,其值为上一步获取的Beartoken。
- 将如下内容保存为admin-role.yaml文件。
- 使用接口指定的请求方法,并设置请求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" } ] } } } }