
Este cliente proporciona acceso a todas las API REST de Kubernetes y OpenShift mediante un DSL fluido.
La forma más sencilla de crear un cliente es:```java KubernetesClient client = new DefaultKubernetesClient();
`DefaultOpenShiftClient` implementa tanto la interfaz `KubernetesClient` como la `OpenShiftClient`, así que si necesitas las
extensiones de OpenShift, como `Build`s, etc., entonces simplemente haz:```java
OpenShiftClient osClient = new DefaultOpenShiftClient();
Esto utilizará configuraciones de diferentes fuentes en el siguiente orden de prioridad:
Las propiedades del sistema tienen prioridad sobre las variables de entorno. Las siguientes propiedades del sistema y variables de entorno se pueden utilizar para la configuración:
Alternativamente, puedes usar ConfigBuilder para crear un objeto de configuración para el cliente de Kubernetes:```java
Config config = new ConfigBuilder().withMasterUrl("https://mymaster.com").build();
KubernetesClient client = new DefaultKubernetesClient(config);
El uso del DSL es el mismo para todos los recursos.
Listar recursos:```java
NamespaceList myNs = client.namespaces().list();
ServiceList myServices = client.services().list();
ServiceList myNsServices = client.services().inNamespace("default").list();
Obtener un recurso:```java Namespace myns = client.namespaces().withName("myns").get();
Service myservice = client.services().inNamespace("default").withName("myservice").get();
Eliminar:```java
Namespace myns = client.namespaces().withName("myns").delete();
Service myservice = client.services().inNamespace("default").withName("myservice").delete();
La edición de recursos utiliza los constructores en línea del Kubernetes Model:```java Namespace myns = client.namespaces().withName("myns").edit(n -> new NamespaceBuilder(n) .editMetadata() .addToLabels("a", "label") .endMetadata() .build());
Service myservice = client.services().inNamespace("default").withName("myservice").edit(s -> new ServiceBuilder(s) .editMetadata() .addToLabels("another", "label") .endMetadata() .build());
Con el mismo espíritu, puedes incorporar builders en línea para crear:```java
Namespace myns = client.namespaces().create(new NamespaceBuilder()
.withNewMetadata()
.withName("myns")
.addToLabels("a", "label")
.endMetadata()
.build());
Service myservice = client.services().inNamespace("default").create(new ServiceBuilder()
.withNewMetadata()
.withName("myservice")
.addToLabels("another", "label")
.endMetadata()
.build());
También puedes establecer la apiVersion del recurso como en el caso de SecurityContextConstraints :```java SecurityContextConstraints scc = new SecurityContextConstraintsBuilder() .withApiVersion("v1") .withNewMetadata().withName("scc").endMetadata() .withAllowPrivilegedContainer(true) .withNewRunAsUser() .withType("RunAsAny") .endRunAsUser() .build();
### Siguiendo eventos
Usa `io.fabric8.kubernetes.api.model.Event` como T para Watcher:```java
client.events().inAnyNamespace().watch(new Watcher<Event>() {
@Override
public void eventReceived(Action action, Event resource) {
System.out.println("event " + action.name() + " " + resource.toString());
}
@Override
public void onClose(KubernetesClientException cause) {
System.out.println("Watcher close due to " + cause);
}
});
La API de kubernetes define un conjunto de extensiones como daemonSets, jobs, ingresses y demás, todas utilizables en el DSL de extensions():
p. ej. para listar los jobs...``` jobs = client.batch().jobs().list();
### Cargando recursos desde fuentes externas
Hay casos en los que quieres leer un recurso desde una fuente externa, en lugar de definirlo usando el DSL de los clientes.
Para esos casos, el cliente te permite cargar el recurso desde:
- Un archivo *(Soporta tanto java.io.File como java.lang.String)*
- Una URL
- Un flujo de entrada
Una vez que el recurso está cargado, puedes tratarlo como lo harías si lo hubieras creado tú mismo.
Por ejemplo, leamos un pod desde un archivo yml y trabajemos con él:
Pod refreshed = client.load('/path/to/a/pod.yml').fromServer().get();
Boolean deleted = client.load('/workspace/pod.yml').delete();
LogWatch handle = client.load('/workspace/pod.yml').watchLog(System.out);
### Pasando una referencia de un recurso al cliente
En el mismo sentido, puedes usar un objeto creado externamente (ya sea una referencia o usando su representación como cadena).
Por ejemplo:
Pod pod = someThirdPartyCodeThatCreatesAPod();
Boolean deleted = client.resource(pod).delete();
### Adaptando el cliente
El cliente admite adaptadores conectables. Un ejemplo de adaptador es el [Adaptador OpenShift](https://github.com/shoucheng3/fabric8io__kubernetes-client_cve-2021-4178_5-0-2/blob/HEAD/openshift-client/src/main/java/io/fabric8/openshift/client/OpenShiftExtensionAdapter.java)
que permite adaptar una instancia existente de [KubernetesClient](https://github.com/shoucheng3/fabric8io__kubernetes-client_cve-2021-4178_5-0-2/blob/HEAD/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/KubernetesClient.java) a una de [OpenShiftClient](https://github.com/shoucheng3/fabric8io__kubernetes-client_cve-2021-4178_5-0-2/blob/HEAD/openshift-client/src/main/java/io/fabric8/openshift/client/OpenShiftClient.java).
Por ejemplo:```java
KubernetesClient client = new DefaultKubernetesClient();
OpenShiftClient oClient = client.adapt(OpenShiftClient.class);
El cliente también admite el método isAdaptable(), que comprueba si la adaptación es posible y devuelve true si es así.```java KubernetesClient client = new DefaultKubernetesClient(); if (client.isAdaptable(OpenShiftClient.class)) { OpenShiftClient oClient = client.adapt(OpenShiftClient.class); } else { throw new Exception("Adapting to OpenShiftClient not support. Check if adapter is present, and that env provides /oapi root path."); }
#### Adaptación y cierre
Ten en cuenta que al usar adapt(), tanto el adaptado como el destino compartirán los mismos recursos (cliente http subyacente, grupos de hilos, etc.).
Esto significa que no es necesario utilizar close() en cada instancia creada mediante adapt().
Llamar a close() en cualquiera de las instancias gestionadas por adapt(), o en la instancia original, limpiará correctamente todos los recursos y, por lo tanto, ninguna de las instancias podrá seguir utilizándose.
## Simulación de Kubernetes
Además del cliente, este proyecto también proporciona un servidor mock de Kubernetes que puedes usar con fines de prueba.
El servidor mock está basado en `https://github.com/square/okhttp/tree/master/mockwebserver` pero está potenciado por el DSL y las funcionalidades proporcionadas por `https://github.com/fabric8io/mockwebserver`.
El Mock Web Server tiene dos modos de funcionamiento:
- Modo de expectativas
- Modo CRUD
### Modo de expectativas
Es el modo típico en el que primero se establecen cuáles son las peticiones http esperadas y cuáles deben ser las respuestas para cada petición.
Se pueden encontrar más detalles de uso en: https://github.com/fabric8io/mockwebserver
Este modo se ha utilizado ampliamente para probar el propio cliente. Asegúrate de revisar [kubernetes-test](https://github.com/shoucheng3/fabric8io__kubernetes-client_cve-2021-4178_5-0-2/blob/HEAD/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock).
Para añadir un servidor de Kubernetes a tu prueba:```java
@Rule
public KubernetesServer server = new KubernetesServer();
Definir cada petición y respuesta individual puede volverse tedioso. Dado que en la mayoría de los casos el servidor web simulado se utiliza para realizar operaciones crud sencillas, se ha añadido un modo crud. Al usar el modo crud, el servidor web simulado almacenará, leerá, actualizará y eliminará recursos de Kubernetes utilizando un mapa en memoria y aparecerá como un servidor api real.
Para añadir un servidor Kubernetes en modo crud a tu prueba:```java @Rule public KubernetesServer server = new KubernetesServer(true, true);
Entonces puedes usar el servidor así:```java
@Test
public void testInCrudMode() {
KubernetesClient client = server.getClient();
final CountDownLatch deleteLatch = new CountDownLatch(1);
final CountDownLatch closeLatch = new CountDownLatch(1);
//CREATE
client.pods().inNamespace("ns1").create(new PodBuilder().withNewMetadata().withName("pod1").endMetadata().build());
//READ
podList = client.pods().inNamespace("ns1").list();
assertNotNull(podList);
assertEquals(1, podList.getItems().size());
//WATCH
Watch watch = client.pods().inNamespace("ns1").withName("pod1").watch(new Watcher<Pod>() {
@Override
public void eventReceived(Action action, Pod resource) {
switch (action) {
case DELETED:
deleteLatch.countDown();
break;
default:
throw new AssertionFailedError(action.toString().concat(" isn't recognised."));
}
}
@Override
public void onClose(KubernetesClientException cause) {
closeLatch.countDown();
}
});
//DELETE
client.pods().inNamespace("ns1").withName("pod1").delete();
//READ AGAIN
podList = client.pods().inNamespace("ns1").list();
assertNotNull(podList);
assertEquals(0, podList.getItems().size());
assertTrue(deleteLatch.await(1, TimeUnit.MINUTES));
watch.close();
assertTrue(closeLatch.await(1, TimeUnit.MINUTES));
}
Puedes utilizar el mecanismo de simulación (mock) de KubernetesClient con JUnit5. Como no soporta @Rule ni @ClassRule, existe una anotación dedicada: @EnableKubernetesMockClient.
Si deseas crear una instancia de KubernetesClient simulado para cada prueba (@Rule de JUnit4), necesitas declarar una instancia de KubernetesClient como se muestra a continuación.```java
@EnableKubernetesMockClient
class ExampleTest {
KubernetesClient client;
@Test
public void testInStandardMode() {
...
}
}
En caso de que desees definir una instancia estática del servidor simulado para todas las pruebas (JUnit4 `@ClassRule`), necesitas declarar la instancia de `KubernetesClient` como se muestra a continuación.
También puedes habilitar crudMode mediante el campo de anotación `crud`.```java
@EnableKubernetesMockClient(crud = true)
class ExampleTest {
static KubernetesClient client;
@Test
public void testInCrudMode() {
...
}
}
Nota: Esta matriz se prepara ejecutando nuestras pruebas de integración en diferentes versiones de OpenShift.
Todos los objetos de recurso utilizados aquí se ajustarán a OpenShift 3.9.0 y Kubernetes 1.9.0. Todos los objetos de recurso proporcionarán todos los campos según OpenShift 3.9.0 y Kubernetes 1.9.0
batch como en extensions(Extensions está obsoleto)apps como en extensions(Extensions está obsoleto)apps como en extensions(Extensions está obsoleto)apps como en extensions(Extensions está obsoleto)network como en extensions(Extensions está obsoleto)client base DSL al storage DSLclient base DSL y a solo Extensiones:
Frameworks/Bibliotecas/Herramientas:
Plugins de CI:
Herramientas de compilación:
Plataformas:
Plataformas propietarias:
A medida que nuestra comunidad crece, nos gustaría llevar un registro de nuestros usuarios. Por favor, envía un PR con el nombre de tu organización/comunidad.
Aquí están los enlaces de las Github Actions y Jenkins para las pruebas que se ejecutan en cada nuevo Pull Request. También puedes ver todas las compilaciones recientes.
Para recibir actualizaciones sobre los lanzamientos, puedes unirte a https://groups.google.com/forum/embed/?place=forum/fabric8-devclients## Equivalencias de kubectl en Java
Esta tabla proporciona las correspondencias de kubectl a Kubernetes Java Client. La mayoría de las correspondencias son bastante directas y son operaciones de una sola línea. Sin embargo, algunas pueden requerir un poco más de código para lograr el mismo resultado:
| Property / Environment Variable | Description | Default value |
|---|
kubernetes.disable.autoConfig / KUBERNETES_DISABLE_AUTOCONFIG | Desactivar la configuración automática | false |
kubernetes.master / KUBERNETES_MASTER | URL del maestro de Kubernetes | https://kubernetes.default.svc |
kubernetes.api.version / KUBERNETES_API_VERSION | Versión de la API | v1 |
openshift.url / OPENSHIFT_URL | URL del maestro de OpenShift | Valor de la URL del maestro de Kubernetes |
kubernetes.oapi.version / KUBERNETES_OAPI_VERSION | Versión de la API de OpenShift | v1 |
kubernetes.trust.certificates / KUBERNETES_TRUST_CERTIFICATES | Confiar en todos los certificados | false |
kubernetes.disable.hostname.verification / KUBERNETES_DISABLE_HOSTNAME_VERIFICATION | false | |
kubernetes.certs.ca.file / KUBERNETES_CERTS_CA_FILE | ||
kubernetes.certs.ca.data / KUBERNETES_CERTS_CA_DATA | ||
kubernetes.certs.client.file / KUBERNETES_CERTS_CLIENT_FILE | ||
kubernetes.certs.client.data / KUBERNETES_CERTS_CLIENT_DATA | ||
kubernetes.certs.client.key.file / KUBERNETES_CERTS_CLIENT_KEY_FILE | ||
kubernetes.certs.client.key.data / KUBERNETES_CERTS_CLIENT_KEY_DATA | ||
kubernetes.certs.client.key.algo / KUBERNETES_CERTS_CLIENT_KEY_ALGO | Algoritmo de cifrado de la clave del cliente | RSA |
kubernetes.certs.client.key.passphrase / KUBERNETES_CERTS_CLIENT_KEY_PASSPHRASE | ||
kubernetes.auth.basic.username / KUBERNETES_AUTH_BASIC_USERNAME | ||
kubernetes.auth.basic.password / KUBERNETES_AUTH_BASIC_PASSWORD | ||
kubernetes.auth.tryKubeConfig / KUBERNETES_AUTH_TRYKUBECONFIG | Configurar el cliente usando la configuración de Kubernetes | true |
kubeconfig / KUBECONFIG | Nombre del archivo de configuración de kubernetes a leer | ~/.kube/config |
kubernetes.auth.tryServiceAccount / KUBERNETES_AUTH_TRYSERVICEACCOUNT | Configurar el cliente desde la cuenta de servicio | true |
kubernetes.tryNamespacePath / KUBERNETES_TRYNAMESPACEPATH | Configurar el namespace del cliente desde la ruta del namespace de la cuenta de servicio de Kubernetes | true |
kubernetes.auth.token / KUBERNETES_AUTH_TOKEN | ||
kubernetes.watch.reconnectInterval / KUBERNETES_WATCH_RECONNECTINTERVAL | Intervalo de reconexión del watch en ms | 1000 |
kubernetes.watch.reconnectLimit / KUBERNETES_WATCH_RECONNECTLIMIT | Número de intentos de reconexión (-1 para infinito) | -1 |
kubernetes.connection.timeout / KUBERNETES_CONNECTION_TIMEOUT | Tiempo de espera de conexión en ms (0 para sin tiempo de espera) | 10000 |
kubernetes.request.timeout / KUBERNETES_REQUEST_TIMEOUT | Tiempo de espera de lectura en ms | 10000 |
kubernetes.rolling.timeout / KUBERNETES_ROLLING_TIMEOUT | Tiempo de espera de rolling en ms | 900000 |
kubernetes.logging.interval / KUBERNETES_LOGGING_INTERVAL | Intervalo de registro en ms | 20000 |
kubernetes.scale.timeout / KUBERNETES_SCALE_TIMEOUT | Tiempo de espera de escalado en ms | 600000 |
kubernetes.websocket.timeout / KUBERNETES_WEBSOCKET_TIMEOUT | Tiempo de espera de websocket en ms | 5000 |
kubernetes.websocket.ping.interval / kubernetes_websocket_ping_interval | Intervalo de ping de websocket en ms | 30000 |
kubernetes.max.concurrent.requests / KUBERNETES_MAX_CONCURRENT_REQUESTS | 64 | |
kubernetes.max.concurrent.requests.per.host / KUBERNETES_MAX_CONCURRENT_REQUESTS_PER_HOST | 5 | |
kubernetes.impersonate.username / KUBERNETES_IMPERSONATE_USERNAME | Valor del encabezado HTTP Impersonate-User | |
kubernetes.impersonate.group / KUBERNETES_IMPERSONATE_GROUP | Valor del encabezado HTTP Impersonate-Group | |
kubernetes.tls.versions / KUBERNETES_TLS_VERSIONS | Versiones TLS separadas por , | TLSv1.2 |
kubernetes.truststore.file / KUBERNETES_TRUSTSTORE_FILE | ||
kubernetes.truststore.passphrase / KUBERNETES_TRUSTSTORE_PASSPHRASE | ||
kubernetes.keystore.file / KUBERNETES_KEYSTORE_FILE | ||
kubernetes.keystore.passphrase / KUBERNETES_KEYSTORE_PASSPHRASE |
| K8s 1.19.1 | K8s 1.18.0 | K8s 1.17.0 | K8s 1.16.0 | K8s 1.15.3 | K8s 1.14.2 | K8s 1.12.0 | K8s 1.11.0 | K8s 1.10.0 | K8s 1.9.0 | K8s 1.7.0 | K8s 1.6.0 | K8s 1.4.9 |
|---|
| kubernetes-client 5.0.2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 5.0.1 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 5.0.0 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.13.2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.13.1 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.13.0 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.12.0 | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.11.1 | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.11.0 | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.10.3 | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.10.2 | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.10.1 | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.10.0 | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.9.2 | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.9.1 | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.9.0 | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.8.0 | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.7.1 | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.7.0 | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.6.4 | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.6.3 | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.6.2 | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.6.1 | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.6.0 | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.5.2 | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.5.1 | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.5.0 | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.4.2 | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.4.1 | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.4.0 | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.3.1 | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.3.0 | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.2.2 | - | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.2.1 | - | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.2.0 | - | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.1.3 | - | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.1.2 | - | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.1.1 | - | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | - | - | - |
| kubernetes-client 4.1.0 | - | - | - | - | - | - | - | - | - | ✓ | ✓ | ✓ | - |
| kubernetes-client 4.0.0 | - | - | - | - | - | - | - | - | - | ✓ | ✓ | ✓ | - |
| kubernetes-client 3.2.0 | - | - | - | - | - | - | - | - | - | ✓ | ✓ | ✓ | - |
| kubernetes-client 3.1.12 | - | - | - | - | - | - | - | - | - | ✓ | ✓ | ✓ | - |
| kubernetes-client 3.0.11 | - | - | - | - | - | - | - | - | - | ✓ | ✓ | ✓ | - |
| kubernetes-client 3.0.10 | - | - | - | - | - | - | - | - | - | ✓ | ✓ | ✓ | - |
| kubernetes-client 3.0.3 | - | - | - | - | - | - | - | - | - | - | ✓ | - | - |
| kubernetes-client 1.3.92 | - | - | - | - | - | - | - | - | - | - | - | + | + |
| OCP 4.5.14 | OCP 4.2.0 | OCP 4.1.0 | OCP 3.11.0 | OCP 3.10.0 | OCP 3.9.0 | OCP 3.7.0 | OCP 3.6.0 |
|---|
| openshift-client 5.0.2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 5.0.1 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 5.0.0 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.13.2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.13.1 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.13.0 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.12.0 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.11.1 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.11.0 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.10.3 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.10.2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.10.1 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.10.0 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.9.2 | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.9.1 | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.9.0 | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.8.0 | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.7.1 | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.7.0 | - | ✓ | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.6.4 | - | - | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.6.3 | - | - | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.6.2 | - | - | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.6.1 | - | - | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.6.0 | - | - | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.5.2 | - | - | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.5.1 | - | - | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.5.0 | - | - | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.4.2 | - | - | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.4.1 | - | - | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.4.0 | - | - | ✓ | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.3.1 | - | - | - | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.3.0 | - | - | - | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.2.2 | - | - | - | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.2.1 | - | - | - | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.2.0 | - | - | - | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.1.3 | - | - | - | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.1.2 | - | - | - | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.1.1 | - | - | - | ✓ | ✓ | ✓ | - | - |
| openshift-client 4.1.0 | - | - | - | - | ✓ | ✓ | ✓ | - |
| openshift-client 4.0.0 | - | - | - | - | - | ✓ | ✓ | ✓ |
| openshift-client 3.2.0 | - | - | - | - | - | ✓ | ✓ | ✓ |
| openshift-client 3.1.12 | - | - | - | - | - | ✓ | ✓ | ✓ |
| openshift-client 3.0.11 | - | - | - | - | - | ✓ | ✓ | ✓ |
| openshift-client 3.0.10 | - | - | - | - | - | ✓ | ✓ | ✓ |
| openshift-client 3.0.3 | - | - | - | - | - | - | ✓ | - |
| openshift-client 1.3.92 | - | - | - | - | - | - | - | + |
extensionsextensions| kubectl | Fabric8 Kubernetes Client |
|---|
kubectl config view | ConfigViewEquivalent.java |
kubectl config get-contexts | ConfigGetContextsEquivalent.java |
kubectl config current-context | ConfigGetCurrentContextEquivalent.java |
kubectl config use-context minikube | ConfigUseContext.java |
kubectl config view -o jsonpath='{.users[*].name}' | ConfigGetCurrentContextEquivalent.java |
kubectl get pods --all-namespaces | PodListGlobalEquivalent.java |
kubectl get pods | PodListEquivalent.java |
kubectl get pods -w | PodWatchEquivalent.java |
kubectl get pods --sort-by='.metadata.creationTimestamp' | PodListGlobalEquivalent.java |
kubectl run | PodRunEquivalent.java |
kubectl create -f test-pod.yaml | PodCreateYamlEquivalent.java |
kubectl exec my-pod -- ls / | PodExecEquivalent.java |
kubectl delete pod my-pod | PodDelete.java |
kubectl delete -f test-pod.yaml | PodDeleteViaYaml.java |
kubectl cp /foo_dir my-pod:/bar_dir | UploadDirectoryToPod.java |
kubectl cp my-pod:/tmp/foo /tmp/bar | DownloadFileFromPod.java |
kubectl cp my-pod:/tmp/foo -c c1 /tmp/bar | DownloadFileFromMultiContainerPod.java |
kubectl cp /foo_dir my-pod:/tmp/bar_dir | UploadFileToPod.java |
kubectl logs pod/my-pod | PodLogsEquivalent.java |
kubectl logs pod/my-pod -f | PodLogsFollowEquivalent.java |
kubectl logs pod/my-pod -c c1 | PodLogsMultiContainerEquivalent.java |
kubectl port-forward my-pod 8080:80 | PortForwardEquivalent.java |
kubectl get pods --selector=version=v1 -o jsonpath='{.items[*].metadata.name}' | PodListFilterByLabel.java |
kubectl get pods --field-selector=status.phase=Running | PodListFilterFieldSelector.java |
kubectl get pods --show-labels | PodShowLabels.java |
kubectl label pods my-pod new-label=awesome | PodAddLabel.java |
kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq | PodAddAnnotation.java |
kubectl get configmap cm1 -o jsonpath='{.data.database}' | ConfigMapJsonPathEquivalent.java |
kubectl create -f test-svc.yaml | LoadAndCreateService.java |
kubectl create -f test-deploy.yaml | LoadAndCreateDeployment.java |
kubectl set image deploy/d1 nginx=nginx:v2 | RolloutSetImageEquivalent.java |
kubectl scale --replicas=4 deploy/nginx-deployment | ScaleEquivalent.java |
kubectl rollout restart deploy/d1 | RolloutRestartEquivalent.java |
kubectl rollout pause deploy/d1 | RolloutPauseEquivalent.java |
kubectl rollout resume deploy/d1 | RolloutResumeEquivalent.java |
kubectl rollout undo deploy/d1 | RolloutUndoEquivalent.java |
kubectl create -f test-crd.yaml | LoadAndCreateCustomResourceDefinition.java |
kubectl create -f customresource.yaml | CustomResourceCreateDemo.java |
kubectl create -f customresource.yaml | CustomResourceCreateDemoTypeless.java |
kubectl get ns | NamespaceListEquivalent.java |
kubectl apply -f test-resource-list.yml | CreateOrReplaceResourceList.java |
kubectl get events | EventsGetEquivalent.java |
kubectl top nodes | TopEquivalent.java |
kubectl auth can-i create deployment.apps | CanIEquivalent.java |