Java源码示例:io.kubernetes.client.openapi.apis.CoreV1Api
示例1
public static void main(String[] args) throws IOException, ApiException {
// file path to your KubeConfig
String kubeConfigPath = "~/.kube/config";
// loading the out-of-cluster config, a kubeconfig from file-system
ApiClient client =
ClientBuilder.kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))).build();
// set the global default api-client to the in-cluster one from above
Configuration.setDefaultApiClient(client);
// the CoreV1Api loads default api-client from global configuration.
CoreV1Api api = new CoreV1Api();
// invokes the CoreV1Api client
V1PodList list =
api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null);
for (V1Pod item : list.getItems()) {
System.out.println(item.getMetadata().getName());
}
}
示例2
public static void main(String[] args) throws IOException, ApiException {
ApiClient client = Config.defaultClient();
// infinite timeout
OkHttpClient httpClient =
client.getHttpClient().newBuilder().readTimeout(0, TimeUnit.SECONDS).build();
client.setHttpClient(httpClient);
Configuration.setDefaultApiClient(client);
CoreV1Api api = new CoreV1Api();
Watch<V1Namespace> watch =
Watch.createWatch(
client,
api.listNamespaceCall(null, null, null, null, null, 5, null, null, Boolean.TRUE, null),
new TypeToken<Watch.Response<V1Namespace>>() {}.getType());
try {
for (Watch.Response<V1Namespace> item : watch) {
System.out.printf("%s : %s%n", item.type, item.object.getMetadata().getName());
}
} finally {
watch.close();
}
}
示例3
public static void main(String[] args) throws IOException, ApiException {
// loading the in-cluster config, including:
// 1. service-account CA
// 2. service-account bearer-token
// 3. service-account namespace
// 4. master endpoints(ip, port) from pre-set environment variables
ApiClient client = ClientBuilder.cluster().build();
// if you prefer not to refresh service account token, please use:
// ApiClient client = ClientBuilder.oldCluster().build();
// set the global default api-client to the in-cluster one from above
Configuration.setDefaultApiClient(client);
// the CoreV1Api loads default api-client from global configuration.
CoreV1Api api = new CoreV1Api();
// invokes the CoreV1Api client
V1PodList list =
api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null);
for (V1Pod item : list.getItems()) {
System.out.println(item.getMetadata().getName());
}
}
示例4
@Test
public void exactUrlOnly() throws IOException, ApiException {
ApiClient client = new ApiClient();
client.setBasePath("http://localhost:" + PORT);
Configuration.setDefaultApiClient(client);
V1Namespace ns1 = new V1Namespace().metadata(new V1ObjectMeta().name("name"));
stubFor(
get(urlEqualTo("/api/v1/namespaces/name"))
.willReturn(
aResponse()
.withHeader("Content-Type", "application/json")
.withBody(client.getJSON().serialize(ns1))));
CoreV1Api api = new CoreV1Api();
V1Namespace ns2 = api.readNamespace("name", null, null, null);
assertEquals(ns1, ns2);
}
示例5
@Test
public void testJsonPatchPod() throws ApiException {
CoreV1Api coreV1Api = new CoreV1Api(client);
stubFor(
patch(urlPathEqualTo("/api/v1/namespaces/default/pods/foo"))
.withHeader("Content-Type", containing(V1Patch.PATCH_FORMAT_JSON_PATCH))
.willReturn(
aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody("{}")));
PatchUtils.patch(
V1Pod.class,
() ->
coreV1Api.patchNamespacedPodCall(
"foo", "default", new V1Patch("[]"), null, null, null, null, null),
V1Patch.PATCH_FORMAT_JSON_PATCH,
client);
verify(1, patchRequestedFor(urlPathEqualTo("/api/v1/namespaces/default/pods/foo")));
}
示例6
@Test
public void testMergePatchPod() throws ApiException {
CoreV1Api coreV1Api = new CoreV1Api(client);
stubFor(
patch(urlPathEqualTo("/api/v1/namespaces/default/pods/foo"))
.withHeader("Content-Type", containing(V1Patch.PATCH_FORMAT_JSON_MERGE_PATCH))
.willReturn(
aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody("{}")));
PatchUtils.patch(
V1Pod.class,
() ->
coreV1Api.patchNamespacedPodCall(
"foo", "default", new V1Patch("[]"), null, null, null, null, null),
V1Patch.PATCH_FORMAT_JSON_MERGE_PATCH,
client);
verify(1, patchRequestedFor(urlPathEqualTo("/api/v1/namespaces/default/pods/foo")));
}
示例7
@Test
public void testStrategicMergePatchPod() throws ApiException {
CoreV1Api coreV1Api = new CoreV1Api(client);
stubFor(
patch(urlPathEqualTo("/api/v1/namespaces/default/pods/foo"))
.withHeader("Content-Type", containing(V1Patch.PATCH_FORMAT_STRATEGIC_MERGE_PATCH))
.willReturn(
aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody("{}")));
PatchUtils.patch(
V1Pod.class,
() ->
coreV1Api.patchNamespacedPodCall(
"foo", "default", new V1Patch("[]"), null, null, null, null, null),
V1Patch.PATCH_FORMAT_STRATEGIC_MERGE_PATCH,
client);
verify(1, patchRequestedFor(urlPathEqualTo("/api/v1/namespaces/default/pods/foo")));
}
示例8
@Test
public void testTokenProvided() throws IOException, ApiException {
stubFor(
get(urlPathEqualTo("/api/v1/pods")).willReturn(okForContentType("application/json", "{}")));
CoreV1Api api = new CoreV1Api();
api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null);
WireMock.verify(
1,
getRequestedFor(urlPathEqualTo("/api/v1/pods"))
.withHeader("Authorization", equalTo("Bearer token1")));
this.auth.setFile(SERVICEACCOUNT_TOKEN2_PATH);
api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null);
WireMock.verify(
2,
getRequestedFor(urlPathEqualTo("/api/v1/pods"))
.withHeader("Authorization", equalTo("Bearer token1")));
this.auth.setExpiry(Instant.now().minusSeconds(1));
api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null);
WireMock.verify(
1,
getRequestedFor(urlPathEqualTo("/api/v1/pods"))
.withHeader("Authorization", equalTo("Bearer token2")));
}
示例9
@Test
public void shutdownInformerFactoryInstantlyAfterStarting() {
CoreV1Api api = new CoreV1Api();
SharedInformerFactory factory = new SharedInformerFactory();
factory.sharedIndexInformerFor(
(CallGeneratorParams params) -> {
return api.listNamespaceCall(
null,
null,
null,
null,
null,
null,
params.resourceVersion,
params.timeoutSeconds,
params.watch,
null);
},
V1Namespace.class,
V1NamespaceList.class);
factory.startAllRegisteredInformers();
factory.stopAllRegisteredInformers();
}
示例10
/**
* Method used to create a namespace. This blocks until the namespace is created.
* @param namespace Namespace to be created.
* @return V1Namespace.
*/
@SneakyThrows(ApiException.class)
public V1Namespace createNamespace(final String namespace) {
CoreV1Api api = new CoreV1Api();
try {
V1Namespace existing = api.readNamespace(namespace, PRETTY_PRINT, Boolean.FALSE, Boolean.FALSE);
if (existing != null) {
log.info("Namespace {} already exists, ignoring namespace create operation.", namespace);
return existing;
}
} catch (ApiException ignore) {
// ignore exception and proceed with Namespace creation.
}
V1Namespace body = new V1Namespace();
// Set the required api version and kind of resource
body.setApiVersion("v1");
body.setKind("Namespace");
// Setup the standard object metadata
V1ObjectMeta meta = new V1ObjectMeta();
meta.setName(namespace);
body.setMetadata(meta);
return api.createNamespace(body, PRETTY_PRINT, DRY_RUN, FIELD_MANAGER);
}
示例11
/**
* Delete persistent volume claim.
* @param namespace Namespace.
* @param name Persistent volume claim name.
*/
@SneakyThrows(ApiException.class)
public void deletePVC(String namespace, String name) {
CoreV1Api api = new CoreV1Api();
try {
api.deleteNamespacedPersistentVolumeClaim(name, namespace, PRETTY_PRINT, DRY_RUN, null, null, null, new V1DeleteOptions());
} catch (JsonSyntaxException e) {
// https://github.com/kubernetes-client/java/issues/86
if (e.getCause() instanceof IllegalStateException) {
IllegalStateException ise = (IllegalStateException) e.getCause();
if (ise.getMessage() != null && ise.getMessage().contains("Expected a string but was BEGIN_OBJECT")) {
log.debug("Ignoring exception", e);
return;
}
}
throw e;
}
}
示例12
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());
}
}
示例13
public static void main(String[] args) throws IOException {
ApiClient client = Config.defaultClient();
OkHttpClient httpClient =
client.getHttpClient().newBuilder().readTimeout(60, TimeUnit.SECONDS).build();
client.setHttpClient(httpClient);
Configuration.setDefaultApiClient(client);
CoreV1Api api = new CoreV1Api();
int i = 0;
Pager<V1Namespace, V1NamespaceList> pager =
new Pager<V1Namespace, V1NamespaceList>(
(Pager.PagerParams param) -> {
try {
return api.listNamespaceCall(
null,
null,
param.getContinueToken(),
null,
null,
param.getLimit(),
null,
1,
null,
null);
} catch (Exception e) {
throw new RuntimeException(e);
}
},
client,
10,
V1NamespaceList.class);
for (V1Namespace namespace : pager) {
System.out.println(namespace.getMetadata().getName());
}
System.out.println("------------------");
}
示例14
public static void main(String[] args) throws IOException, ApiException {
ApiClient client = Config.defaultClient();
Configuration.setDefaultApiClient(client);
CoreV1Api api = new CoreV1Api();
V1Pod pod =
new V1PodBuilder()
.withNewMetadata()
.withName("apod")
.endMetadata()
.withNewSpec()
.addNewContainer()
.withName("www")
.withImage("nginx")
.endContainer()
.endSpec()
.build();
api.createNamespacedPod("default", pod, null, null, null);
V1Pod pod2 =
new V1Pod()
.metadata(new V1ObjectMeta().name("anotherpod"))
.spec(
new V1PodSpec()
.containers(Arrays.asList(new V1Container().name("www").image("nginx"))));
api.createNamespacedPod("default", pod2, null, null, null);
V1PodList list =
api.listNamespacedPod("default", null, null, null, null, null, null, null, null, null);
for (V1Pod item : list.getItems()) {
System.out.println(item.getMetadata().getName());
}
}
示例15
public static void main(String[] args) throws IOException, ApiException, InterruptedException {
ApiClient client = Config.defaultClient();
Configuration.setDefaultApiClient(client);
CoreV1Api coreApi = new CoreV1Api(client);
PodLogs logs = new PodLogs();
V1Pod pod =
coreApi
.listNamespacedPod("default", "false", null, null, null, null, null, null, null, null)
.getItems()
.get(0);
InputStream is = logs.streamNamespacedPodLog(pod);
ByteStreams.copy(is, System.out);
}
示例16
public Process execute() throws ApiException, IOException {
if (container == null) {
CoreV1Api api = new CoreV1Api(apiClient);
V1Pod pod = api.readNamespacedPod(name, namespace, "false", null, null);
container = pod.getSpec().getContainers().get(0).getName();
}
ExecProcess exec = new ExecProcess(apiClient);
WebSocketStreamHandler handler = exec.getHandler();
WebSockets.stream(makePath(), "GET", apiClient, handler);
return exec;
}
示例17
@Test
public void testBuildWatchShouldWorkIfInformerPresent() {
CoreV1Api api = new CoreV1Api();
informerFactory.sharedIndexInformerFor(
(CallGeneratorParams params) -> {
return api.listPodForAllNamespacesCall(
null,
null,
null,
null,
null,
null,
params.resourceVersion,
params.timeoutSeconds,
params.watch,
null);
},
V1Pod.class,
V1PodList.class);
ControllerBuilder.defaultBuilder(informerFactory)
.watch(
(workQueue) -> ControllerBuilder.controllerWatchBuilder(V1Pod.class, workQueue).build())
.withReconciler(
new Reconciler() {
@Override
public Result reconcile(Request request) {
return new Result(false);
}
})
.build();
}
示例18
private static void createApiInstances() {
try {
apiClient = io.kubernetes.client.util.Config.defaultClient();
} catch (IOException e) {
LOG.log(Level.SEVERE, "Exception when creating ApiClient: ", e);
throw new RuntimeException(e);
}
OkHttpClient httpClient =
apiClient.getHttpClient().newBuilder().readTimeout(0, TimeUnit.SECONDS).build();
apiClient.setHttpClient(httpClient);
Configuration.setDefaultApiClient(apiClient);
coreApi = new CoreV1Api(apiClient);
}
示例19
public static CoreV1Api getCoreApi() {
if (coreApi == null) {
createApiInstances();
}
return coreApi;
}
示例20
private static void initApiInstances() {
if (client == null) {
getApiClient();
}
Configuration.setDefaultApiClient(client);
coreApi = new CoreV1Api();
appsApi = new AppsV1Api(client);
}
示例21
/**
* create CoreV1Api that does not time out
*/
public static CoreV1Api createCoreV1Api() {
if (client == null) {
getApiClient();
}
OkHttpClient httpClient =
client.getHttpClient().newBuilder().readTimeout(0, TimeUnit.SECONDS).build();
client.setHttpClient(httpClient);
Configuration.setDefaultApiClient(client);
return new CoreV1Api(client);
}
示例22
public WorkerLogger(String namespace,
String podName,
String containerName,
String id,
String logsDir,
CoreV1Api coreV1Api,
JobLogger jobLogger) {
this.namespace = namespace;
this.podName = podName;
this.containerName = containerName;
this.id = id;
this.logsDir = logsDir;
this.coreV1Api = coreV1Api;
this.jobLogger = jobLogger;
}
示例23
@Inject
public DefaultKubeApiFacade(DirectKubeConfiguration configuration, ApiClient apiClient, TitusRuntime titusRuntime) {
this.configuration = configuration;
this.apiClient = apiClient;
this.coreV1Api = new CoreV1Api(apiClient);
this.customObjectsApi = new CustomObjectsApi(apiClient);
this.titusRuntime = titusRuntime;
}
示例24
@RequestMapping(value = "/hello")
public String hello() throws Exception {
ApiClient client = Config.defaultClient();
Configuration.setDefaultApiClient(client);
CoreV1Api api = new CoreV1Api();
V1PodList list = api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null);
List<String> rlt = new ArrayList<>();
rlt.add(new Date().toString());
rlt.addAll(list.getItems().stream().map(value -> value.getMetadata().getNamespace() + ":" + value.getMetadata().getName()).collect(Collectors.toList()));
return new Gson().toJson(rlt);
}
示例25
/**
* Deploy a pod. This ignores exception when the pod has already been deployed.
* @param namespace Namespace.
* @param pod Pod details.
* @return Future which is completed once the deployemnt has been triggered.
*/
@SneakyThrows(ApiException.class)
public CompletableFuture<V1Pod> deployPod(final String namespace, final V1Pod pod) {
CoreV1Api api = new CoreV1Api();
K8AsyncCallback<V1Pod> callback = new K8AsyncCallback<>("createPod");
api.createNamespacedPodAsync(namespace, pod, PRETTY_PRINT, DRY_RUN, FIELD_MANAGER, callback);
return exceptionallyExpecting(callback.getFuture(), isConflict, null);
}
示例26
/**
* Method used to fetch the status of a Pod. V1PodStatus also helps to indicate the container status.
* @param namespace Namespace.
* @param podName Name of the pod.
* @return A future representing the status of the pod.
*/
@SneakyThrows(ApiException.class)
public CompletableFuture<V1PodStatus> getStatusOfPod(final String namespace, final String podName) {
CoreV1Api api = new CoreV1Api();
K8AsyncCallback<V1PodList> callback = new K8AsyncCallback<>("listPods");
api.listNamespacedPodAsync(namespace, PRETTY_PRINT, ALLOW_WATCH_BOOKMARKS, null, null, "POD_NAME=" + podName, null,
null, null, false, callback);
return callback.getFuture()
.thenApply(v1PodList -> {
Optional<V1Pod> vpod = v1PodList.getItems().stream().filter(v1Pod -> v1Pod.getMetadata().getName().equals(podName) &&
v1Pod.getMetadata().getNamespace().equals(namespace)).findFirst();
return vpod.map(V1Pod::getStatus).orElseThrow(() -> new RuntimeException("pod not found" + podName));
});
}
示例27
/**
* Method to fetch all pods which match a set of labels.
* @param namespace Namespace on which the pod(s) reside.
* @param labels Name of the label.
* @return Future representing the list of pod status.
*/
@SneakyThrows(ApiException.class)
public CompletableFuture<V1PodList> getPodsWithLabels(String namespace, Map<String, String> labels) {
CoreV1Api api = new CoreV1Api();
log.debug("Current number of http interceptors {}", api.getApiClient().getHttpClient().networkInterceptors().size());
String labelSelector = labels.entrySet().stream().map(entry -> entry.getKey() + "=" + entry.getValue()).collect(Collectors.joining());
K8AsyncCallback<V1PodList> callback = new K8AsyncCallback<>("listPods");
api.listNamespacedPodAsync(namespace, PRETTY_PRINT, ALLOW_WATCH_BOOKMARKS, null, null, labelSelector, null,
null, null, false, callback);
return callback.getFuture();
}
示例28
/**
* Create a service account.
* @param namespace The namespace.
* @param account Service Account.
* @return A future indicating the status of create service account operation.
*/
@SneakyThrows(ApiException.class)
public CompletableFuture<V1ServiceAccount> createServiceAccount(String namespace, V1ServiceAccount account) {
CoreV1Api api = new CoreV1Api();
K8AsyncCallback<V1ServiceAccount> callback = new K8AsyncCallback<>("createServiceAccount");
api.createNamespacedServiceAccountAsync(namespace, account, PRETTY_PRINT, DRY_RUN, FIELD_MANAGER, callback);
return exceptionallyExpecting(callback.getFuture(), isConflict, null);
}
示例29
@SneakyThrows({ApiException.class, IOException.class})
private Optional<V1ContainerStateTerminated> createAWatchAndReturnOnTermination(String namespace, String podName) {
log.debug("Creating a watch for pod {}/{}", namespace, podName);
CoreV1Api api = new CoreV1Api();
K8AsyncCallback<V1ServiceAccount> callback = new K8AsyncCallback<>("createAWatchAndReturnOnTermination");
@Cleanup
Watch<V1Pod> watch = Watch.createWatch(
client,
api.listNamespacedPodCall(namespace, PRETTY_PRINT, ALLOW_WATCH_BOOKMARKS, null, null, "POD_NAME=" + podName, null,
null, null, Boolean.TRUE, callback),
new TypeToken<Watch.Response<V1Pod>>() {
}.getType());
for (Watch.Response<V1Pod> v1PodResponse : watch) {
List<V1ContainerStatus> containerStatuses = v1PodResponse.object.getStatus().getContainerStatuses();
log.debug("Container status for the pod {} is {}", podName, containerStatuses);
if (containerStatuses == null || containerStatuses.size() == 0) {
log.debug("Container status is not part of the pod {}/{}, wait for the next update from KUBERNETES Cluster", namespace, podName);
continue;
}
// We check only the first container as there is only one container in the pod.
V1ContainerState containerStatus = containerStatuses.get(0).getState();
log.debug("Current container status is {}", containerStatus);
if (containerStatus.getTerminated() != null) {
log.info("Pod {}/{} has terminated", namespace, podName);
return Optional.of(containerStatus.getTerminated());
}
}
return Optional.empty();
}
示例30
public static void main(String[] args) throws IOException, ApiException, ClassNotFoundException {
V1Pod pod =
new V1PodBuilder()
.withNewMetadata()
.withName("apod")
.endMetadata()
.withNewSpec()
.addNewContainer()
.withName("www")
.withImage("nginx")
.withNewResources()
.withLimits(new HashMap<>())
.endResources()
.endContainer()
.endSpec()
.build();
System.out.println(Yaml.dump(pod));
V1Service svc =
new V1ServiceBuilder()
.withNewMetadata()
.withName("aservice")
.endMetadata()
.withNewSpec()
.withSessionAffinity("ClientIP")
.withType("NodePort")
.addNewPort()
.withProtocol("TCP")
.withName("client")
.withPort(8008)
.withNodePort(8080)
.withTargetPort(new IntOrString(8080))
.endPort()
.endSpec()
.build();
System.out.println(Yaml.dump(svc));
// Read yaml configuration file, and deploy it
ApiClient client = Config.defaultClient();
Configuration.setDefaultApiClient(client);
// See issue #474. Not needed at most cases, but it is needed if you are using war
// packging or running this on JUnit.
Yaml.addModelMap("v1", "Service", V1Service.class);
// Example yaml file can be found in $REPO_DIR/test-svc.yaml
File file = new File("test-svc.yaml");
V1Service yamlSvc = (V1Service) Yaml.load(file);
// Deployment and StatefulSet is defined in apps/v1, so you should use AppsV1Api instead of
// CoreV1API
CoreV1Api api = new CoreV1Api();
V1Service createResult = api.createNamespacedService("default", yamlSvc, null, null, null);
System.out.println(createResult);
V1Status deleteResult =
api.deleteNamespacedService(
yamlSvc.getMetadata().getName(),
"default",
null,
null,
null,
null,
null,
new V1DeleteOptions());
System.out.println(deleteResult);
}