使用 Java 操作 Kubernetes API

2023年 7月 9日 80.9k 0

本文目标

基于官方kubernetes-client/java类库,实现通过java完成对kubenetes原生资源对象(pod、node、namespace、servcie、deployment)和自定义资源对象(如:cluster)的增删改查或事件监听(watch)

k8s-client-java选型

目前通过java操作k8s,开源版本共有两个:

  • kubernetes-client/java
  • fabric8io/kubernetes-client

kubernetes-client/java和fabric8io/kubernetes-client对比

和官网API一致性 社区活跃度 代码生成
kubernetes-client/java 根据k8s-openapi随之更新,一致性和更新频率高 目前不活跃 kubernetes-client/java提供了生成代码的通用跨语言工具,该工具托管在 kubernetes-client / gen存储库中
fabric8io/kubernetes-client 一致性低,更新慢;其中不支持k8s1.8和1.13 社区活跃,目前使用者多 暂无

鉴于kubernetes-client/java和官网API一致性好,本文决定采用它

kubernetes-client/java的使用

REST API

API 资源使用REST模式。

kube-apiserver 支持同时提供 https(默认监听在 6443 端口)和 http API(默认监听在 127.0.0.1 的 8080 端口),其中 http API 是非安全接口,不做任何认证授权机制,不建议生产环境启用。两个接口提供的 REST API 格式相同

img

图片来自 OpenShift Blog 

  • GET /:获得某一类型的资源列表,例如GET /pods 返回一个Pod资源列表。
  • POST /:创建一个资源,该资源来自用户提供的JSON对象。
  • GET //:通过给出的名称(Name)获得单个资源,例如GET /pods/first 返回一个名称为“first”的Pod。
  • DELETE //:通过给出的名字删除单个资源,删除选项(DeleteOptions)中可以指定的优雅删除(Grace Deletion)的时间(GracePeriodSeconds),该可选项表明了从服务端接收到删除请求到资源被删除的时间间隔(单位为秒)。
  • PUT //:通过给出的资源名和客户端提供的JSON对象来更新或创建资源。
  • PATCH //:选择修改资源详细指定的域。
  • GET /watch/:随时间变化,不断接收一连串的JSON对象,这些JSON对象记录了给定资源类别内所有资源对象的变化情况。
  • GET /watch//:随时间变化,不断接收一连串的JSON对象,这些JSON对象记录了某个给定资源对象的变化情况。
  • REST API版本说明

    为了在兼容旧版本的同时不断升级新的API,Kubernetes支持多种API版本,每种API版本都有不同的API路径,例如/api/v1或 /apis/extensions/v1beta1。

    Alpha级别:

    • 包含alpha名称的版本(例如v1alpha1)。
    • 该软件可能包含错误。启用一个功能可能会导致bug。默认情况下,功能可能会被禁用。

    Beta级别:

    • 包含beta名称的版本(例如v2beta3)。
    • 该软件经过很好的测试。启用功能被认为是安全的。默认情况下功能是开启的。
    • 大家使用过的Beta版本后,可以多给社区反馈,如果此版本在后续更新后将不会有太大变化。

    Stable级别:

    • 该版本名称命名方式:vX这里X是一个整数。
    • Stable版本的功能特性,将出现在后续发布的软件版本中。

    Alpha、Beta、RC、GA版本的区别

    • Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只有测试人员使用。
    • Beta:也是测试版,这个阶段的版本会一直加入新的功能。在Alpha版之后推出。
    • RC:(Release Candidate) 顾名思义么 ! 用在软件上就是候选版本。系统平台上就是发行候选版本。RC版不会再加入新的功能了,主要着重于除错。
    • GA:General Availability,正式发布的版本,在国外都是用GA来说明release版本的。

    kubectl api-versions

    查看 apiserver暴露的接口

    kubectl api-versions

    或者

    curl -H’Authorization: Bearer token’ https://192.168.1.122:6443/apis –insecure

    [root@fly]# kubectl api-versions
    admissionregistration.k8s.io/v1beta1
    apiextensions.k8s.io/v1beta1
    apiregistration.k8s.io/v1beta1
    apps/v1
    apps/v1beta1
    apps/v1beta2
    authentication.istio.io/v1alpha1
    authentication.k8s.io/v1
    authentication.k8s.io/v1beta1
    authorization.k8s.io/v1
    authorization.k8s.io/v1beta1
    autoscaling/v1
    autoscaling/v2beta1
    batch/v1
    batch/v1beta1
    certificates.k8s.io/v1beta1
    config.istio.io/v1alpha2
    events.k8s.io/v1beta1
    extensions/v1beta1
    networking.istio.io/v1alpha3
    networking.k8s.io/v1
    policy/v1beta1
    rbac.authorization.k8s.io/v1
    rbac.authorization.k8s.io/v1beta1
    rbac.istio.io/v1alpha1
    storage.k8s.io/v1
    storage.k8s.io/v1beta1
    v1

    REST API 实例:

    https://10.10.124.199:6443/apis/apps/v1/deployment

  • https : kube-apiserver 支持同时提供https(默认监听在 6443 端口)和 http API(默认监听在 127.0.0.1 的 8080 端口),由于http api 是不会经过认证授权的,在生产环境中,为了安全性考虑,推荐是不启用。
  • 10.10.124.199 : 该ip地址为kubernetes master 地址,在集群为高可用设置的场景下,该ip地址为 vip 地址。
  • apis :kubernetes在这一层级只有api 与 apis ,api只有初步核心资源,包含pod,node,namespace等基本资源
  • apps : 为api group 名,api group 是kubernetes 对资源类型特性相近的整合。
  • v1: 是作为api group version, 在新资源类型的加入到kubernetes,会经历版本变迁: v1alpha1–>v1alpha2–>….–>v1alphaN–>v1beta1–>v1beta2–>v1 。
  • deployment : 是kubernetes 的资源名
  • API Object 整体划分图 (红星符号代表常用资源)

    img

    kubernetes-client/java客户端API接口识别

    打开kubernetes-client/java,只要是以Api结尾,一般就是我们可以调用的Api接口

    img

    API接口识别

    ApiClient初始化&认证

    ApiClient client = new ClientBuilder().setBasePath("ApiServer地址").setVerifyingSsl(false)
                    .setAuthentication(new AccessTokenAuthentication("Token")).build();
            Configuration.setDefaultApiClient(client);

    在生产环境,建议放在 程序启动前的初始化方法中

    CRD资源增删改查

    使用 CustomObjectsApi apiInstance = new CustomObjectsApi(); 操作

    Method HTTP request Description
    createClusterCustomObject POST /apis/{group}/{version}/{plural} 创建集群范围CRD资源对象
    createNamespacedCustomObject POST /apis/{group}/{version}/namespaces/{namespace}/{plural} 创建分区范围CRD资源对象
    deleteClusterCustomObject DELETE /apis/{group}/{version}/{plural}/{name} 删除集群范围CRD资源对象
    deleteNamespacedCustomObject DELETE/apis/{group}/{version}/namespaces/{namespace}/{plural}/{name} 删除分区范围CRD资源对象
    getClusterCustomObject GET /apis/{group}/{version}/{plural}/{name} 获取集群范围CRD资源对象
    getClusterCustomObjectScale GET /apis/{group}/{version}/{plural}/{name}/scale 获取集群范围CRD资源对象-scale
    getClusterCustomObjectStatus GET /apis/{group}/{version}/{plural}/{name}/status 获取集群范围CRD资源对象-状态
    getNamespacedCustomObject GET /apis/{group}/{version}/namespaces/{namespace}/{plural}/{name} 获取分区范围CRD资源对象
    getNamespacedCustomObjectScale GET/apis/{group}/{version}/namespaces/{namespace}/{plural}/{name}/scale 获取分区范围CRD资源对象-scale
    getNamespacedCustomObjectStatus GET/apis/{group}/{version}/namespaces/{namespace}/{plural}/{name}/status 获取分区范围CRD资源对象-状态
    listClusterCustomObject GET /apis/{group}/{version}/{plural} 集群范围CRD资源对象列表
    listNamespacedCustomObject GET /apis/{group}/{version}/namespaces/{namespace}/{plural} 分区范围CRD资源对象列表
    patchClusterCustomObject PATCH /apis/{group}/{version}/{plural}/{name} 更新集群范围CRD资源对象
    patchClusterCustomObjectScale PATCH /apis/{group}/{version}/{plural}/{name}/scale 更新集群范围CRD资源对象-scale
    patchClusterCustomObjectStatus PATCH /apis/{group}/{version}/{plural}/{name}/status 更新集群范围CRD资源对象-状态
    patchNamespacedCustomObject PATCH/apis/{group}/{version}/namespaces/{namespace}/{plural}/{name} 更新分区范围CRD资源对象
    patchNamespacedCustomObjectScale PATCH/apis/{group}/{version}/namespaces/{namespace}/{plural}/{name}/scale 更新分区范围CRD资源对象-scale
    patchNamespacedCustomObjectStatus PATCH/apis/{group}/{version}/namespaces/{namespace}/{plural}/{name}/status 更新分区范围CRD资源对象-状态
    replaceClusterCustomObject PUT /apis/{group}/{version}/{plural}/{name} 替换集群范围CRD资源对象
    replaceClusterCustomObjectScale PUT /apis/{group}/{version}/{plural}/{name}/scale 替换集群范围CRD资源对象-scale
    replaceClusterCustomObjectStatus PUT /apis/{group}/{version}/{plural}/{name}/status 替换集群范围CRD资源对象-状态
    replaceNamespacedCustomObject PUT /apis/{group}/{version}/namespaces/{namespace}/{plural}/{name} 替换分区范围CRD资源对象
    replaceNamespacedCustomObjectScale PUT/apis/{group}/{version}/namespaces/{namespace}/{plural}/{name}/scale 替换分区范围CRD资源对象-scale
    replaceNamespacedCustomObjectStatus PUT/apis/{group}/{version}/namespaces/{namespace}/{plural}/{name}/status 替换分区范围CRD资源对象-状态

    操作示例

    简要描述:

    集群列表接口

    请求方式:

    • GET

    请求URL:

    • /apis/{group}/{version}/{plural}

    请求URL示例:

    • /apis/flycloud.cn/v1/clusters

    请求java示例:

            CustomObjectsApi apiInstance = new CustomObjectsApi();
            String group = "flycloud.cn"; 
            String version = "v1";
            String plural = "clusters";
            String pretty = "ture";
            try {
                Object result = apiInstance.listClusterCustomObject(group,version,plural,pretty,null,null,null,null);
                String listCluster = JSON.toJSONString(result);
                System.out.println(listCluster);
            } catch (ApiException e) {
                System.err.println("Exception when calling CustomObjectsApi#listClusterCustomObject");
                e.printStackTrace();
            }

    返回结果:

     {
        "apiVersion": "flycloud.cn/v1",
        "items": [{
            "apiVersion": "flycloud.cn/v1",
            "kind": "Cluster",
            "metadata": {
                "annotations": {
                    "name": "top"
                },
                "creationTimestamp": "2019-08-12T07:03:23Z",
                "generation": 1.0,
                "labels": {
                    "template": "platform"
                },
                "name": "top",
                "namespace": "cluster-top",
                "resourceVersion": "277020",
                "selfLink": "/apis/flycloud.cn/v1/namespaces/cluster-top/clusters/top",
                "uid": "46528941-bccf-11e9-bfeb-005056bc7cff"
            },
            "spec": {
                "info": {
                    "address": "192.168.103.60",
                    "harbor": {
                        "address": "192.168.103.65",
                        "password": "123456",
                        "port": 443.0,
                        "protocol": "https",
                        "user": "admin"
                    },
                    "jenkins": {
                        "password": "admin",
                        "type": "jenkins",
                        "username": "admin"
                    },
                    "mysql": {
                        "connectionProperties": "druid.stat.mergeSql=true druid.stat.slowSqlMillis=5000",
                        "driverClass": "com.mysql.jdbc.Driver",
                        "filters": "stat",
                        "initialSize": 0.0,
                        "logAbandoned": true,
                        "maxActive": 100.0,
                        "maxOpenPreparedStatements": 50.0,
                        "maxWait": 60000.0,
                        "minIdle": 0.0,
                        "minPoolSize": 2.0,
                        "password": "123456",
                        "poolPreparedStatements": false,
                        "removeAbandoned": true,
                        "removeAbandonedTimeout": 900.0,
                        "type": "api-mysql",
                        "username": "root"
                    },
                    "network": {
                        "networkFlag": "calico",
                        "version": 1.0
                    },
                    "nfs": [{
                        "capacity": "1",
                        "ip": "192.168.103.65",
                        "name": "nfs",
                        "path": "/nfs/top",
                        "type": "nfs"
                    }],
                    "port": 6443.0,
                    "prometheusPort": 30003.0,
                    "protocol": "https",
                    "redis": {
                        "maxTotal": 500.0,
                        "maxWaitMillis": 15000.0,
                        "minIdle": 10.0,
                        "password": "123456",
                        "testOnBorrow": true,
                        "testWhileIdle": true,
                        "timeBetweenEvictionRunsMillis": 600000.0,
                        "type": "api-redis"
                    }
                },
                "template": [{
                    "namespace": "kube-system",
                    "serviceName": "heapster",
                    "servicePort": [{
                        "port": 80.0,
                        "protocol": "TCP",
                        "type": "check"
                    }],
                    "type": "heapster"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "influxdb",
                    "servicePort": [{
                        "port": 80.0,
                        "protocol": "TCP",
                        "type": "web"
                    }, {
                        "port": 8086.0,
                        "protocol": "TCP",
                        "type": "api"
                    }],
                    "type": "influxdb"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "elasticsearch-logging-v1",
                    "servicePort": [{
                        "port": 9200.0,
                        "protocol": "TCP",
                        "type": "web"
                    }, {
                        "port": 9300.0,
                        "protocol": "TCP",
                        "type": "api"
                    }],
                    "type": "es"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "oam-api-service",
                    "servicePort": [{
                        "port": 8081.0,
                        "protocol": "TCP",
                        "type": "api"
                    }],
                    "type": "oam-api"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "oam-task-service",
                    "type": "oma-task"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "webapi-service",
                    "servicePort": [{
                        "port": 8080.0,
                        "protocol": "TCP",
                        "type": "api"
                    }],
                    "type": "webapi"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "webpage-service",
                    "servicePort": [{
                        "port": 8887.0,
                        "protocol": "TCP",
                        "type": "web"
                    }],
                    "type": "webpage"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "terminal-service",
                    "servicePort": [{
                        "port": 8888.0,
                        "protocol": "TCP",
                        "type": "api"
                    }],
                    "type": "terminal"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "api-mysql-service",
                    "servicePort": [{
                        "nodePort": 30306.0,
                        "port": 3306.0,
                        "protocol": "TCP",
                        "type": "api"
                    }],
                    "type": "api-mysql"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "api-redis-service",
                    "servicePort": [{
                        "nodePort": 30379.0,
                        "port": 6379.0,
                        "protocol": "TCP",
                        "type": "api"
                    }],
                    "type": "api-redis"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "jenkins",
                    "servicePort": [{
                        "nodePort": 30080.0,
                        "port": 8080.0,
                        "protocol": "TCP",
                        "type": "api"
                    }],
                    "type": "jenkins"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "nfs-controller",
                    "type": "nfs-controller"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "auto-scale",
                    "type": "auto-scale"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "node-up-down",
                    "type": "node-up-down"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "calico-node",
                    "type": "calico-node"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "calico-kube-controller",
                    "type": "calico-cotnroller"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "kube-apiserver",
                    "type": "kube-apiserver"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "kube-controller-manager",
                    "type": "kube-controller-manager"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "kube-scheduler",
                    "type": "kube-scheduler"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "kube-proxy",
                    "type": "kube-proxy"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "etcd",
                    "type": "etcd"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "cluster-controller",
                    "type": "cluster-controller"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "kube-dns",
                    "servicePort": [{
                        "port": 53.0,
                        "protocol": "TCP",
                        "type": "check"
                    }, {
                        "port": 53.0,
                        "protocol": "UDP",
                        "type": "dns"
                    }],
                    "type": "kube-dns"
                }]
            },
            "status": {
                "conditions": [{
                    "status": false,
                    "type": "Ready"
                }]
            }
        }, {
            "apiVersion": "flycloud.cn/v1",
            "kind": "Cluster",
            "metadata": {
                "annotations": {
                    "name": "test"
                },
                "creationTimestamp": "2019-09-13T15:54:57Z",
                "generation": 1.0,
                "labels": {
                    "template": "dev"
                },
                "name": "test",
                "namespace": "flycloud",
                "resourceVersion": "7687403",
                "selfLink": "/apis/flycloud.cn/v1/namespaces/flycloud/clusters/test",
                "uid": "d5bddb21-d63e-11e9-b5a7-005056bc7cff"
            },
            "spec": {
                "info": {
                    "address": "192.168.103.60",
                    "domain": [],
                    "external": [{
                        "labels": {
                            "lb": "nginx"
                        },
                        "maxPort": 35000.0,
                        "minPort": 33000.0,
                        "tcpConfig": "system-expose-nginx-config-tcp",
                        "topLb": "192.168.103.61",
                        "type": "nginx",
                        "udpConfig": "system-expose-nginx-config-udp"
                    }],
                    "harbor": {
                        "address": "192.168.103.59",
                        "password": "Harbor12345",
                        "port": 443.0,
                        "protocol": "https",
                        "user": "admin"
                    },
                    "network": {
                        "networkFlag": "calico",
                        "version": "1"
                    },
                    "nfs": [{
                        "capacity": "1",
                        "ip": "192.168.103.65",
                        "name": "nfs",
                        "path": "/nfs/top",
                        "type": "nfs"
                    }],
                    "port": 6443.0,
                    "prometheusPort": 30003.0,
                    "protocol": "https",
                    "storages": []
                },
                "template": [{
                    "namespace": "kube-system",
                    "serviceName": "auto-scale",
                    "type": "auto-scale"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "calico-kube-controller",
                    "type": "calico-cotnroller"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "calico-node",
                    "type": "calico-node"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "default-http-backend",
                    "servicePort": [{
                        "port": 80.0,
                        "protocol": "TCP",
                        "type": "web"
                    }],
                    "type": "default-http-backend"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "elasticsearch-logging-v1",
                    "servicePort": [{
                        "port": 9200.0,
                        "protocol": "TCP",
                        "type": "web"
                    }, {
                        "port": 9300.0,
                        "protocol": "TCP",
                        "type": "api"
                    }],
                    "type": "es"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "etcd",
                    "type": "etcd"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "heapster",
                    "servicePort": [{
                        "port": 80.0,
                        "protocol": "TCP",
                        "type": "check"
                    }],
                    "type": "heapster"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "influxdb",
                    "servicePort": [{
                        "port": 80.0,
                        "protocol": "TCP",
                        "type": "web"
                    }, {
                        "port": 8086.0,
                        "protocol": "TCP",
                        "type": "api"
                    }],
                    "type": "influxdb"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "kube-apiserver",
                    "type": "kube-apiserver"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "kube-controller-manager",
                    "type": "kube-controller-manager"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "kube-dns",
                    "servicePort": [{
                        "port": 54.0,
                        "protocol": "TCP",
                        "type": "check"
                    }, {
                        "port": 53.0,
                        "protocol": "UDP",
                        "type": "dns"
                    }],
                    "type": "kube-dns"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "kube-proxy",
                    "type": "kube-proxy"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "kube-scheduler",
                    "type": "kube-scheduler"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "nfs-controller",
                    "type": "nfs-controller"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "nginx-controller",
                    "servicePort": [{
                        "port": 80.0,
                        "protocol": "TCP",
                        "type": "web"
                    }],
                    "type": "nginx-controller"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "node-up-down",
                    "type": "node-up-down"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "oam-api-service",
                    "servicePort": [{
                        "port": 8081.0,
                        "protocol": "TCP",
                        "type": "api"
                    }],
                    "type": "oam-api"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "oam-task-service",
                    "type": "oma-task"
                }, {
                    "namespace": "kube-system",
                    "serviceName": "terminal-service",
                    "servicePort": [{
                        "port": 8888.0,
                        "protocol": "TCP",
                        "type": "api"
                    }],
                    "type": "terminal"
                }]
            },
            "status": {
                "conditions": [{
                    "status": true,
                    "type": "Ready"
                }]
            }
        }],
        "kind": "ClusterList",
        "metadata": {
            "continue": "",
            "resourceVersion": "7758294",
            "selfLink": "/apis/flycloud.cn/v1/clusters"
        }
    }

    Namespaces增删改查

    使用 CoreV1Api apiInstance = new CoreV1Api(); 操作

    Method HTTP request Description
    createNamespace POST /api/v1/namespaces 创建分区
    deleteNamespace DELETE/api/v1/namespaces/{name} 删除分区
    listNamespace GET /api/v1/namespaces 分区列表
    patchNamespace PATCH/api/v1/namespaces/{name} 更新分区内容
    readNamespace GET/api/v1/namespaces/{name} 查询指定分区详情
    replaceNamespace PUT/api/v1/namespaces/{name} 替换分区内容

    Node增删改查

    使用 CoreV1Api apiInstance = new CoreV1Api(); 操作

    Method HTTP request Description
    createNode POST /api/v1/nodes 创建节点
    deleteCollectionNode DELETE /api/v1/nodes 删除多个节点
    deleteNode DELETE/api/v1/nodes/{name} 删除节点
    listNode GET /api/v1/nodes 节点列表
    patchNode PATCH/api/v1/nodes/{name} 更新节点
    readNode GET /api/v1/nodes/{name} 查询指定节点
    replaceNode PUT /api/v1/nodes/{name} 替换指定节点内容
    replaceNodeStatus PUT/api/v1/nodes/{name}/status 修改节点状态

    Pod增删改查

    使用 CoreV1Api apiInstance = new CoreV1Api(); 操作

    Method HTTP request Description
    createNamespacedPod POST /api/v1/namespaces/{namespace}/pods 创建pod
    deleteCollectionNamespacedPod DELETE/api/v1/namespaces/{namespace}/pods 删除多个pod
    deleteNamespacedPod DELETE/api/v1/namespaces/{namespace}/pods/{name} 删除pod
    listNamespacedPod GET /api/v1/namespaces/{namespace}/pods pod列表
    patchNamespacedPod PATCH/api/v1/namespaces/{namespace}/pods/{name} 更新pod
    readNamespacedPod GET/api/v1/namespaces/{namespace}/pods/{name} 查询指定pod
    replaceNamespacedPod PUT/api/v1/namespaces/{namespace}/pods/{name} 替换指定pod内容

    优先级增删改查

    Method HTTP request Description
    createPriorityClass POST /apis/scheduling.k8s.io/v1beta1/priorityclasses 创建优先级
    deleteCollectionPriorityClass DELETE /apis/scheduling.k8s.io/v1beta1/priorityclasses 删除多个优先级
    deletePriorityClass DELETE /apis/scheduling.k8s.io/v1beta1/priorityclasses/{name} 删除优先级
    getAPIResources GET /apis/scheduling.k8s.io/v1beta1/ 获取可用资源
    listPriorityClass GET /apis/scheduling.k8s.io/v1beta1/priorityclasses 优先级列表
    patchPriorityClass PATCH /apis/scheduling.k8s.io/v1beta1/priorityclasses/{name} 修改优先级
    readPriorityClass GET /apis/scheduling.k8s.io/v1beta1/priorityclasses/{name} 查询指定优先级
    replacePriorityClass PUT /apis/scheduling.k8s.io/v1beta1/priorityclasses/{name} 替换优先级

    Services增删改查

    使用 CoreV1Api apiInstance = new CoreV1Api(); 操作

    Method HTTP request Description
    createNamespacedService POST /api/v1/namespaces/{namespace}/services 创建服务
    deleteNamespacedService DELETE/api/v1/namespaces/{namespace}/services/{name} 删除服务
    listNamespacedService GET /api/v1/namespaces/{namespace}/services 服务列表
    patchNamespacedService PATCH/api/v1/namespaces/{namespace}/services/{name} 修改指定服务内容
    readNamespacedService GET/api/v1/namespaces/{namespace}/services/{name} 查询指定服务内容
    replaceNamespacedService PUT/api/v1/namespaces/{namespace}/services/{name} 替换指定服务内容

    操作示例

    @Test
        public void CoreV1ApiTest(){
    ​
            CoreV1Api apiInstance = new CoreV1Api();
            String pretty = "true"; 
            String _continue = "_continue_example"; 
            String fieldSelector = "fieldSelector_example"; 
            String labelSelector = "labelSelector_example"; 
            Integer limit = 56; 
            String resourceVersion = "resourceVersion_example"; 
            Integer timeoutSeconds = 56; 
            Boolean watch = true; 
            try {
    ​
                // Namespace列表
                V1NamespaceList result = apiInstance.listNamespace(null,pretty,null,null,null,null,null,null,null);
    ​
                // Node列表
                // V1NodeList result = apiInstance.listNode(null,pretty,null,null,null,null,null,null,null);
    ​
               // Service列表
                // V1ServiceList result = apiInstance.listNamespacedService("kube-system", null, null, null, null, null, null, null, null, null);
    ​
                // Service 详情
                // /api/v1/namespaces/kube-system/services/webapi-service
                // V1Service result = apiInstance.readNamespacedService("flyapi-service", "kube-system", null, null, null);
    ​
                System.out.println(result);
    ​
                // JSON
                Gson gson=new Gson();
                String s = gson.toJson(result);
                System.out.println(s);
    ​
            } catch (ApiException e) {
                System.err.println("Exception when calling CoreV1Api#listNode");
                e.printStackTrace();
            }
        }

    Deployment增删改查

    使用 ExtensionsV1beta1Api apiInstance = new ExtensionsV1beta1Api(); 操作

    Method HTTP request Description
    createNamespacedDeployment POST /apis/extensions/v1beta1/namespaces/{namespace}/deployments 创建应用
    deleteCollectionNamespacedDeployment DELETE/apis/extensions/v1beta1/namespaces/{namespace}/deployments 删除多个应用
    deleteNamespacedDeployment DELETE/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name} 删除应用
    listNamespacedDeployment GET /apis/extensions/v1beta1/namespaces/{namespace}/deployments 应用列表
    patchNamespacedDeployment PATCH/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name} 更新应用
    readNamespacedDeployment GET/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name} 查询指定应用
    replaceNamespacedDeployment PUT/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name} 替换指定应用内容

    参考链接:

    https://k8smeetup.github.io/docs/reference/client-libraries/

    原文链接:https://glory.blog.csdn.net/article/details/101345091

    相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论