
클라우드 네이티브 인프라, 포드, 서비스 및 구성을 관리하기 위해 Kubernetes 및 OpenShift REST API에 대한 유창한 DSL 액세스를 제공하는 Java 클라이언트로, 인증 및 TLS를 지원합니다.
이 클라이언트는 Fluent DSL을 통해 전체 Kubernetes 및 OpenShift REST API에 대한 액세스를 제공합니다.
클라이언트를 생성하는 가장 쉬운 방법은 다음과 같습니다:```java KubernetesClient client = new DefaultKubernetesClient();
`DefaultOpenShiftClient`는 `KubernetesClient` 및 `OpenShiftClient` 인터페이스를 모두 구현하므로 `Build` 등과 같은
OpenShift 확장 기능이 필요하다면 다음과 같이 하면 됩니다:```java
OpenShiftClient osClient = new DefaultOpenShiftClient();
다양한 소스의 설정을 다음 우선순위 순서로 사용합니다:
시스템 속성이 환경 변수보다 우선합니다. 다음 시스템 속성 및 환경 변수를 구성에 사용할 수 있습니다:
또는 ConfigBuilder를 사용하여 Kubernetes 클라이언트용 구성 객체를 생성할 수 있습니다:```java
Config config = new ConfigBuilder().withMasterUrl("https://mymaster.com").build();
KubernetesClient client = new DefaultKubernetesClient(config);
DSL 사용은 모든 리소스에 대해 동일합니다.
리소스 나열:```java
NamespaceList myNs = client.namespaces().list();
ServiceList myServices = client.services().list();
ServiceList myNsServices = client.services().inNamespace("default").list();
리소스 가져오기:```java Namespace myns = client.namespaces().withName("myns").get();
Service myservice = client.services().inNamespace("default").withName("myservice").get();
삭제:```java
Namespace myns = client.namespaces().withName("myns").delete();
Service myservice = client.services().inNamespace("default").withName("myservice").delete();
리소스 편집은 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());
같은 방식으로 빌더를 인라인하여 다음을 만들 수 있습니다:```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());
리소스의 apiVersion을 SecurityContextConstraints의 경우처럼 설정할 수도 있습니다 :```java SecurityContextConstraints scc = new SecurityContextConstraintsBuilder() .withApiVersion("v1") .withNewMetadata().withName("scc").endMetadata() .withAllowPrivilegedContainer(true) .withNewRunAsUser() .withType("RunAsAny") .endRunAsUser() .build();
### 이벤트 추적
Watcher의 T로 `io.fabric8.kubernetes.api.model.Event`를 사용하세요:```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);
}
});
Kubernetes API는 daemonSets, jobs, ingresses 등과 같은 다양한 확장 기능을 정의하며, 이들은 모두 extensions() DSL에서 사용할 수 있습니다:
예: jobs를 나열하려면...``` jobs = client.batch().jobs().list();
### 외부 소스에서 리소스 로드하기
클라이언트 DSL을 사용하여 리소스를 정의하는 대신 외부 소스에서 읽어야 하는 경우가 있습니다.
이런 경우 클라이언트는 다음 소스에서 리소스를 로드할 수 있게 해줍니다:
- 파일 *(java.io.File과 java.lang.String 모두 지원)*
- URL
- 입력 스트림
리소스가 로드되면 직접 생성했을 때와 동일하게 취급할 수 있습니다.
예를 들어, yml 파일에서 pod를 읽고 작업해 보겠습니다:
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);
### 리소스의 참조를 클라이언트에 전달
같은 방식으로 외부에서 생성된 객체를 사용할 수 있습니다(참조 또는 문자열 표현을 사용하여).
예를 들어:
Pod pod = someThirdPartyCodeThatCreatesAPod();
Boolean deleted = client.resource(pod).delete();
### 클라이언트 어댑팅
클라이언트는 플러그 가능한 어댑터를 지원합니다. 예시 어댑터는 [OpenShift Adapter](https://github.com/shoucheng3/fabric8io__kubernetes-client_cve-2021-4178_5-0-2/blob/master/openshift-client/src/main/java/io/fabric8/openshift/client/OpenShiftExtensionAdapter.java)이며,
기존 [KubernetesClient](https://github.com/shoucheng3/fabric8io__kubernetes-client_cve-2021-4178_5-0-2/blob/master/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/KubernetesClient.java) 인스턴스를 [OpenShiftClient](https://github.com/shoucheng3/fabric8io__kubernetes-client_cve-2021-4178_5-0-2/blob/master/openshift-client/src/main/java/io/fabric8/openshift/client/OpenShiftClient.java) 인스턴스로 어댑팅할 수 있게 해줍니다.
예를 들어:```java
KubernetesClient client = new DefaultKubernetesClient();
OpenShiftClient oClient = client.adapt(OpenShiftClient.class);
클라이언트는 또한 적응이 가능한지 확인하고 가능하면 true를 반환하는 isAdaptable() 메서드를 지원합니다.```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."); }
#### 적응(Adapting) 및 종료(close)
`adapt()`를 사용할 때 adaptee와 대상은 동일한 리소스(기본 http 클라이언트, 스레드 풀 등)를 공유합니다.
즉, `adapt()`로 생성된 모든 인스턴스에 대해 `close()`를 호출할 필요는 없습니다.
`adapt()`로 관리되는 인스턴스 중 하나 또는 원본 인스턴스에서 `close()`를 호출하면 모든 리소스가 제대로 정리되므로 더 이상 어떤 인스턴스도 사용할 수 없게 됩니다.
## Kubernetes 모킹(Mocking)
클라이언트와 함께 이 프로젝트는 테스트 목적으로 사용할 수 있는 kubernetes 모크 서버(mock server)도 제공합니다.
모크 서버는 `https://github.com/square/okhttp/tree/master/mockwebserver`를 기반으로 하지만 `https://github.com/fabric8io/mockwebserver`에서 제공하는 DSL 및 기능으로 강화되었습니다.
Mock Web Server에는 두 가지 작동 모드가 있습니다:
- Expectations 모드
- CRUD 모드
### Expectations 모드
예상되는 http 요청을 먼저 설정하고 각 요청에 대한 응답을 설정하는 일반적인 모드입니다.
사용에 대한 자세한 내용은 https://github.com/fabric8io/mockwebserver 에서 확인할 수 있습니다.
이 모드는 클라이언트 자체를 테스트하는 데 널리 사용되었습니다. [kubernetes-test](https://github.com/shoucheng3/fabric8io__kubernetes-client_cve-2021-4178_5-0-2/blob/master/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock)를 확인하세요.
테스트에 Kubernetes 서버를 추가하려면:```java
@Rule
public KubernetesServer server = new KubernetesServer();
모든 요청과 응답을 일일이 정의하는 것은 지루할 수 있습니다. 대부분의 경우 mock 웹서버가 간단한 crud 기반 작업을 수행하는 데 사용된다는 점을 감안하여, crud 모드가 추가되었습니다. crud 모드를 사용하면 mock 웹서버가 인메모리 맵을 사용하여 쿠버네티스 리소스를 저장, 읽기, 업데이트, 삭제하며 실제 API 서버처럼 동작합니다.
테스트에 crud 모드의 Kubernetes Server를 추가하려면:```java @Rule public KubernetesServer server = new KubernetesServer(true, true);
그런 다음 다음과 같이 서버를 사용할 수 있습니다:```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));
}
JUnit5에서 KubernetesClient 모킹 메커니즘을 사용할 수 있습니다. JUnit5는 @Rule과 @ClassRule을 지원하지 않으므로 전용 어노테이션인 @EnableKubernetesMockClient가 있습니다.
각 테스트마다(JUnit4 @Rule) 모킹된 KubernetesClient 인스턴스를 생성하려면 아래와 같이 KubernetesClient 인스턴스를 선언해야 합니다.```java
@EnableKubernetesMockClient
class ExampleTest {
KubernetesClient client;
@Test
public void testInStandardMode() {
...
}
}
모든 테스트에서 목 서버의 정적 인스턴스를 정의하려는 경우(JUnit4 `@ClassRule`) 아래와 같이 `KubernetesClient` 인스턴스를 선언해야 합니다.
또한 애너테이션 필드 `crud`를 사용하여 crudMode를 활성화할 수 있습니다.```java
@EnableKubernetesMockClient(crud = true)
class ExampleTest {
static KubernetesClient client;
@Test
public void testInCrudMode() {
...
}
}
참고: 이 매트릭스는 다양한 OpenShift 버전에서 통합 테스트를 실행하여 준비되었습니다.
여기서 사용되는 모든 리소스 객체는 OpenShift 3.9.0 및 Kubernetes 1.9.0에 따릅니다. 모든 리소스 객체는 OpenShift 3.9.0 및 Kubernetes 1.9.0에 따라 모든 필드를 제공합니다.
batch와 extensions 모두에 있습니다(Extensions는 더 이상 사용되지 않음).apps와 extensions 모두에 있습니다(Extensions는 더 이상 사용되지 않음).apps와 extensions 모두에 있습니다(Extensions는 더 이상 사용되지 않음).apps와 extensions 모두에 있습니다(Extensions는 더 이상 사용되지 않음).network와 extensions 모두에 있습니다(Extensions는 더 이상 사용되지 않음).client base DSL에서 storage DSL로 이동되었습니다.client base DSL 및 에서 로만 이동되었습니다.확장 기능:
프레임워크/라이브러리/도구:
CI 플러그인:
빌드 도구:
플랫폼:
독점 플랫폼:
커뮤니티가 성장함에 따라 사용자들을 추적하고 싶습니다. 조직/커뮤니티 이름과 함께 PR을 보내주세요.
모든 새로운 Pull Request에 대해 실행되는 테스트의 GitHub Actions 및 Jenkins 링크입니다. 최근 빌드도 모두 볼 수 있습니다.
릴리스에 대한 업데이트를 받으려면 https://groups.google.com/forum/embed/?place=forum/fabric8-devclients 에 가입할 수 있습니다.## Kubectl Java 대응 코드
이 표는 kubectl과 Kubernetes Java Client 간의 매핑을 제공합니다. 대부분의 매핑은 매우 간단하며 한 줄짜리 작업입니다. 그러나 일부는 동일한 결과를 얻기 위해 약간 더 많은 코드가 필요할 수 있습니다:
| 속성 / 환경 변수 | 설명 | 기본값 |
|---|
kubernetes.disable.autoConfig / KUBERNETES_DISABLE_AUTOCONFIG | 자동 구성 비활성화 | false |
kubernetes.master / KUBERNETES_MASTER | Kubernetes 마스터 URL | https://kubernetes.default.svc |
kubernetes.api.version / KUBERNETES_API_VERSION | API 버전 | v1 |
openshift.url / OPENSHIFT_URL | OpenShift 마스터 URL | Kubernetes 마스터 URL 값 |
kubernetes.oapi.version / KUBERNETES_OAPI_VERSION | OpenShift API 버전 | v1 |
kubernetes.trust.certificates / KUBERNETES_TRUST_CERTIFICATES | 모든 인증서 신뢰 | 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 | 클라이언트 키 암호화 알고리즘 | 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 | Kubernetes 구성을 사용하여 클라이언트 구성 | true |
kubeconfig / KUBECONFIG | 읽을 kubernetes 구성 파일의 이름 | ~/.kube/config |
kubernetes.auth.tryServiceAccount / KUBERNETES_AUTH_TRYSERVICEACCOUNT | 서비스 계정에서 클라이언트 구성 | true |
kubernetes.tryNamespacePath / KUBERNETES_TRYNAMESPACEPATH | Kubernetes 서비스 계정 네임스페이스 경로에서 클라이언트 네임스페이스 구성 | true |
kubernetes.auth.token / KUBERNETES_AUTH_TOKEN | ||
kubernetes.watch.reconnectInterval / KUBERNETES_WATCH_RECONNECTINTERVAL | Watch 재연결 간격(ms) | 1000 |
kubernetes.watch.reconnectLimit / KUBERNETES_WATCH_RECONNECTLIMIT | 재연결 시도 횟수(-1은 무제한) | -1 |
kubernetes.connection.timeout / KUBERNETES_CONNECTION_TIMEOUT | 연결 제한 시간(ms, 0은 제한 시간 없음) | 10000 |
kubernetes.request.timeout / KUBERNETES_REQUEST_TIMEOUT | 읽기 제한 시간(ms) | 10000 |
kubernetes.rolling.timeout / KUBERNETES_ROLLING_TIMEOUT | 롤링 제한 시간(ms) | 900000 |
kubernetes.logging.interval / KUBERNETES_LOGGING_INTERVAL | 로깅 간격(ms) | 20000 |
kubernetes.scale.timeout / KUBERNETES_SCALE_TIMEOUT | 스케일 제한 시간(ms) | 600000 |
kubernetes.websocket.timeout / KUBERNETES_WEBSOCKET_TIMEOUT | Websocket 제한 시간(ms) | 5000 |
kubernetes.websocket.ping.interval / kubernetes_websocket_ping_interval | Websocket ping 간격(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 | Impersonate-User HTTP 헤더 값 | |
kubernetes.impersonate.group / KUBERNETES_IMPERSONATE_GROUP | Impersonate-Group HTTP 헤더 값 | |
kubernetes.tls.versions / KUBERNETES_TLS_VERSIONS | TLS 버전(,로 구분) | 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 |