日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java api 操作 kubernetes

發布時間:2023/12/20 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java api 操作 kubernetes 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Java api 操作 kubernetes
    • 一、api接口訪問方式
      • 授權方式
      • 不授權方式
    • 二、Java api 操作 k8s
      • k8s初始化
      • 創建命名空間
      • 創建Deployment應用
      • 創建Service服務

Java api 操作 kubernetes

一、api接口訪問方式

授權方式

調用k8s使用rest api形式一個是安全的地址https:127.0.0.1:6443,這個地址需要有認證權限的,可以是token方式或者是證書,這個也是我一開始使用的方式,無奈沒有辦法知道token什么時候過期,但是目前實驗只要K8s正常啟動一直沒有換token也還是可以使用
查看kubernetes的token

不授權方式

第二個方式是不安全的地址http😕/127.0.0.1:8008,就是說可以不用認證權限就可以直接訪問K8s了,因為真的不知道token什么時候過期,2是k8s不穩定老是重裝我就得需要換token

輸入如下命令:

vim /etc/kubernetes/manifests/kube-apiserver.yaml

在下圖的地方添加以下,寫好以后保存退出,他就會重啟稍微等一下我們就可以訪問一下地址

- --enable-swagger-ui=true - --insecure-bind-address=0.0.0.0 - --insecure-port=8008

我們就可以訪問了

二、Java api 操作 k8s

<dependency><groupId>io.kubernetes</groupId><artifactId>client-java</artifactId><version>12.0.0</version><scope>compile</scope></dependency>

k8s初始化

private static ApiClient getApiClient(){String master = "https://127.0.0.1:6443";String oauthToken = "eyJhbGciOiJSUzI1NiIsImtpZCI6InNRRi1VVFpmUE9nQ3VNc25kcVFXV29nVGZWN0hJX1N5WndHX1p4STc2a3cifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrOHMtdG9rZW4tN3pmajIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpYdC5uYW1lIjoiazhzIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNWVlZjQ0MDQtYWY5OS00NDE4LTk2YTctZWFmYzlkNDJhNmYxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOms4cyJ9.npRtUn7_AM0yPmdHdwN76CKlNOkc8sWJcOuhCKHT-o58oRvg5_kDfCIZyfhV0UjepkLhq1xzP_mHbbUu8_u5SnTbpFhqslOoKywXsI17oDOIQk44nXyRkrGzsM4xNKN9kov4fzSpQqhHNGfXIMA1D0WGD2nZzh2CMklVhVzbWDDnLGgzhzBr9WNDuyBVXlJc40Tz_B0aTurxZ1yZ2P34VSK_vXW8mWWZxfCSRSf6L2vyHfKwhA4ogoqopHANwOpE0O1Fz8q50kclcyxc9a-GD3nPzYISLnGbDAsuKD4qEAi6QhnXVDdUEf9XYvzTvkBeTvL8g4YSGZrQ";ApiClient apiClient = new ClientBuilder()//設置 k8s 服務所在 ip地址.setBasePath(master)//是否開啟 ssl 驗證.setVerifyingSsl(false)//插入訪問 連接用的 Token.setAuthentication(new AccessTokenAuthentication(oauthToken)).build();io.kubernetes.client.openapi.Configuration.setDefaultApiClient(apiClient);return apiClient;}

創建命名空間

@RequestMapping("/create/namespace")public Map<String, String> testNamespace(@RequestBody V1Namespace namespace){Map<String, String> message = new HashMap<>();//初始化k8sApiClient apiClient = getApiClient();CoreV1Api coreV1Api = new CoreV1Api(apiClient);try {V1Namespace result = coreV1Api.createNamespace(namespace, null, null, null);message.put("success", "應用命名空間創建成功!");} catch (ApiException e) {if (e.getCode() == 409) {message.put("error", "命名空間已重復!");}if (e.getCode() == 200) {message.put("success", "應用命名空間創建成功!");}if (e.getCode() == 201) {message.put("error", "命名空間已重復!");}if (e.getCode() == 401) {message.put("error", "無權限操作!");}message.put("error", "應用命名空間創建失敗!");}return message;}

創建命名空間的參數值

{"apiVersion":"v1","kind":"Namespace","metadata":{"name":"test-namespace","labels":{"name":"test-namespace"}} }

創建Deployment應用

@Data @AllArgsConstructor @NoArgsConstructor public class DeploymentDTO {private String metadata_name;private String metadata_namespace;private String labels_workLayer;private Integer spec_replicas;private String containers_name;private String containers_image;private String containers_imagePullPolicy;private String remark; } @PostMapping("/create/deployments")public Map<String, String> createDeployments(@RequestBody DeploymentDTO deploymentDTO){Map<String, String> messages = new HashMap<>();// 賦值操作V1Deployment deployment = new V1Deployment();deployment.setApiVersion("apps/v1");deployment.kind("Deployment");// 賦值metadataV1ObjectMeta objectMeta = new V1ObjectMeta();objectMeta.name(deploymentDTO.getMetadata_name());objectMeta.namespace(deploymentDTO.getMetadata_namespace());Map<String, String> labels = new HashMap<>();labels.put("app","nginx");objectMeta.labels(labels);// 賦值specV1DeploymentSpec deploymentSpec = new V1DeploymentSpec();//賦值spec-selectorV1LabelSelector selector = new V1LabelSelector();Map<String, String> matchLabels = new HashMap<>();matchLabels.put("app","nginx");selector.matchLabels(matchLabels);//賦值templateV1PodTemplateSpec templateSpec = new V1PodTemplateSpec();V1ObjectMeta metadata = new V1ObjectMeta();metadata.labels(labels);templateSpec.metadata(metadata);// spec-Template下的SpecV1PodSpec podSpec = new V1PodSpec();// spec-Template-spec-containerList<V1Container> listContainer = new ArrayList<>();V1Container container = new V1Container();container.setName(deploymentDTO.getContainers_name());container.setImage(deploymentDTO.getContainers_image());container.setImagePullPolicy(deploymentDTO.getContainers_imagePullPolicy());// spec-Template-spec-container-portsList<V1ContainerPort> ports = new ArrayList<>();V1ContainerPort v1ContainerPort = new V1ContainerPort();v1ContainerPort.setContainerPort(88);container.setPorts(ports);listContainer.add(container);podSpec.setContainers(listContainer);templateSpec.setSpec(podSpec);deploymentSpec.setReplicas(deploymentDTO.getSpec_replicas());deploymentSpec.setTemplate(templateSpec);deploymentSpec.setSelector(selector);deployment.setMetadata(objectMeta);deployment.setSpec(deploymentSpec);ApiClient client = getApiClient();AppsV1Api apiInstance = new AppsV1Api(client);try {V1Deployment result = apiInstance.createNamespacedDeployment(objectMeta.getNamespace(), deployment, null, null, null);messages.put("success", "工作負載創建成功!");} catch (ApiException e) {if (e.getCode() == 409) {messages.put("error", "工作負載創建已重復!");} else if (e.getCode() == 200) {messages.put("success", "工作負載創建成功!");} else if (e.getCode() == 201) {messages.put("error", "工作負載創建已重復!");} else if (e.getCode() == 401) {messages.put("error", "無權限操作!");} else {messages.put("error", "工作負載創建失敗!");}}return messages;}

創建Deployment的參數值

{"metadata_name":"nginx-deployment","metadata_namespace":"test-hl2","labels_workLayer":"svc","spec_replicas":3,"containers_name":"ngninx-test","containers_image":"nginx:latest","containers_imagePullPolicy":"IfNotPresent","remark":"測試項目" }

創建Service服務

@Data @AllArgsConstructor @NoArgsConstructor public class ServiceDTO {private String metadata_name;private String metadata_namespace;private String labels_workLayer;private String spec_type;private Integer spec_ports_port;private Integer spec_ports_targetPort;private String spec_ports_protocol; } @PostMapping("/create/service")public Map<String, String> createService(@RequestBody ServiceDTO serviceDTO) {Map<String, String> message = new HashMap<>();ApiClient client = getApiClient();CoreV1Api apiInstance = new CoreV1Api(client);//賦值V1Service body = new V1Service();body.setApiVersion("v1");body.setKind("Service");V1ObjectMeta objectMeta = new V1ObjectMeta();objectMeta.setName(serviceDTO.getMetadata_name());objectMeta.setNamespace(serviceDTO.getMetadata_namespace());//賦值specV1ServiceSpec serviceSpec = new V1ServiceSpec();//spec-typeserviceSpec.setType(serviceDTO.getSpec_type());//spec-portsList<V1ServicePort> servicePorts = new ArrayList<>();V1ServicePort servicePort = new V1ServicePort();servicePort.setPort(serviceDTO.getSpec_ports_port());servicePort.setProtocol(serviceDTO.getSpec_ports_protocol());servicePort.setTargetPort(new IntOrString(serviceDTO.getSpec_ports_targetPort()));servicePorts.add(servicePort);serviceSpec.ports(servicePorts);// spec-selectorMap<String, String> selector = new HashMap<>();selector.put("app","nginx");serviceSpec.setSelector(selector);body.setMetadata(objectMeta);body.setSpec(serviceSpec);try {V1Service result = apiInstance.createNamespacedService(serviceDTO.getMetadata_namespace(), body, null, null, null);message.put("success", "工作負載服務創建成功!");} catch (ApiException e) {if (e.getCode() == 409) {message.put("error", "工作負載服務創建已重復!");} else if (e.getCode() == 200) {message.put("success", "工作負載服務創建成功!");} else if (e.getCode() == 201) {message.put("error", "工作負載服務創建已重復!");} else if (e.getCode() == 401) {message.put("error", "無權限操作!");} else if (e.getCode() == 400) {message.put("error", "后臺參數錯誤!");} else if (e.getCode() == 400) {message.put("error", "沒有命名空間或沒有Deployment!");} else {message.put("error", "工作負載服務創建失敗!");}}return message;} }

總結

以上是生活随笔為你收集整理的Java api 操作 kubernetes的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。