簡體   English   中英

如何使用Java連接到現有的Kubernetes服務器並列出所有Pod?

[英]How to connect to an existing kubernetes server and list all pods using java?

我正在嘗試連接到在AWS上運行的現有kubernetes,並使用Java在其上運行任意命令。 具體來說,我們使用的是fabric8(盡管我可以使用其他api,但如果您可以使用一個API提供足夠的答案)。 我之所以需要在Java中執行此操作,是因為我們計划最終將其合並到我們現有的junit在線測試中。

現在,我只需要一個示例,說明如何連接到服務器並以字符串數組的形式獲取所有Pod名稱。 有人可以給我展示一個簡單,簡潔的示例。

即我想要使用Java api等效於此bash腳本(同樣最好使用fabric8,但如果您知道的話,我會接受另一種api)

#!bin/bash
kops export kubecfg --name $CLUSTER --state=s3://$STATESTORE

kubectl get pod -o=custom-colums=NAME:.metadata.name -n=$NAMESPACE

這是Kubernetes的官方Java客戶端。

https://github.com/kubernetes-client/java

它為您提供了一個干凈的接口,並用Java編寫了代碼以針對kubernetes執行。

如文檔頁面中所列,以列出所有Pod,

import io.kubernetes.client.ApiClient;
import io.kubernetes.client.ApiException;
import io.kubernetes.client.Configuration;
import io.kubernetes.client.apis.CoreV1Api;
import io.kubernetes.client.models.V1Pod;
import io.kubernetes.client.models.V1PodList;
import io.kubernetes.client.util.Config;

import java.io.IOException;

public class Example {
    public static void main(String[] args) throws IOException, ApiException{
        ApiClient client = Config.defaultClient();
        Configuration.setDefaultApiClient(client);

        CoreV1Api api = new CoreV1Api();
        V1PodList list = api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null);
        for (V1Pod item : list.getItems()) {
            System.out.println(item.getMetadata().getName());
        }
    }
}

希望能幫助到你。

這是kubernetes的fabric8 kubernetes客戶端:

https://github.com/fabric8io/kubernetes-client/

它帶有流暢的DSL,可與kubernetes / Openshift資源一起使用。 它也有分頁支持。 如果要列出某些命名空間中的資源,則可以在dsl中使用inNamespace("your namespace")參數。

String master = "https://192.168.42.20:8443/";

Config config = new ConfigBuilder().withMasterUrl(master).build();
try (final KubernetesClient client = new DefaultKubernetesClient(config)) {
  // Simple Listing:
  PodList simplePodList = client.pods().inAnyNamespace().list();      

  // List with limit and continue options:
  PodList podList = client.pods().inAnyNamespace().list(5, null);
  podList.getItems().forEach((obj) -> { System.out.println(obj.getMetadata().getName()); });

  podList = client.pods().inAnyNamespace().list(5, podList.getMetadata().getContinue());
  podList.getItems().forEach((obj) -> { System.out.println(obj.getMetadata().getName()); });

} catch (KubernetesClientException e) {
  logger.error(e.getMessage(), e);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM