本文主要是介绍java操作k8s api示例:通过java完成对kubenetes原生资源对象(pod、node、namespace、servcie、deployment)和自定义资源对象CRD的增删改查或事件监听,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文目标
基于官方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 格式相同
图片来自 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 整体划分图 (红星符号代表常用资源)
kubernetes-client/java客户端API接口识别
打开kubernetes-client/java,只要是以Api结尾,一般就是我们可以调用的Api接口
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} | 替换指定服务内容 |
操作示例
@Testpublic 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);// JSONGson 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://github.com/kubernetes-client/java/tree/master/kubernetes
https://k8smeetup.github.io/docs/reference/client-libraries
https://glory.blog.csdn.net/article/details/101345091
这篇关于java操作k8s api示例:通过java完成对kubenetes原生资源对象(pod、node、namespace、servcie、deployment)和自定义资源对象CRD的增删改查或事件监听的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!