
kubernetes API용 Java 클라이언트입니다.
Java 클라이언트는 Semantic Versioning을 사용합니다. 새 Kubernetes 릴리스 버전에 맞춰 클라이언트를 재생성할 때마다 주 버전 번호를 올립니다(아래 표 참조). 이때 새로운 API가 추가되고 생성된 Kubernetes API 스텁(Stub)에 호환성이 깨지는 변경(breaking changes)이 있을 수 있습니다. 주 버전을 업그레이드할 때는 잠재적인 호환성 변경에 대비하세요.
Java 클라이언트 라이브러리를 로컬 Maven 저장소에 설치하려면 다음을 실행하세요:
git clone --recursive https://github.com/kubernetes-client/java
cd java
mvn install
자세한 내용은 공식 문서를 참조하세요.
프로젝트의 POM에 다음 의존성을 추가하세요:
<dependency>
<groupId>io.kubernetes</groupId>
<artifactId>client-java</artifactId>
<version>8.0.2</version>
</dependency>
compile 'io.kubernetes:client-java:8.0.2'
먼저 다음을 실행하여 JAR을 생성합니다:
git clone --recursive https://github.com/kubernetes-client/java
cd java/kubernetes
mvn package
그런 다음 다음 JAR들을 수동으로 설치합니다:
일반적인 사용 사례에 대한 몇 가지 예제를 준비했습니다. 아래에 나와 있습니다:
kubectl patch와 동일합니다.kubectl get <resource> -w와 동일합니다.kubectl logs와 동일합니다.모든 포드 나열:
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.apis.CoreV1Api;
import io.kubernetes.client.openapi.models.V1Pod;
import io.kubernetes.client.openapi.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());
}
}
}
네임스페이스 객체 watch:
import com.google.gson.reflect.TypeToken;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.apis.CoreV1Api;
import io.kubernetes.client.openapi.models.V1Namespace;
import io.kubernetes.client.util.Config;
import io.kubernetes.client.util.Watch;
import java.io.IOException;
public class WatchExample {
public static void main(String[] args) throws IOException, ApiException{
ApiClient client = Config.defaultClient();
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, null),
new TypeToken<Watch.Response<V1Namespace>>(){}.getType());
for (Watch.Response<V1Namespace> item : watch) {
System.out.printf("%s : %s%n", item.type, item.object.getMetadata().getName());
}
}
}
더 많은 예제는 examples 폴더에서 확인할 수 있습니다. 예제를 실행하려면 다음 명령을 실행하세요:
mvn exec:java -Dexec.mainClass="io.kubernetes.client.examples.Example"
모든 API 및 모델 문서는 생성된 클라이언트 문서에서 확인할 수 있습니다.
범례:
✓ java-client와 해당 Kubernetes 버전의 기능/API 객체가 완전히 동일함.+ java-client에 Kubernetes 클러스터에는 없을 수 있는 기능이나 API 객체가 있지만, 공통으로 있는 모든 것은 정상 작동함.- Kubernetes 클러스터에 java-client 라이브러리가 사용할 수 없는 기능(추가 API 객체 등)이 있음.java-client 버전 간 변경 사항에 대한 자세한 설명은 CHANGELOG를 참조하세요.
기여 방법에 대한 지침은 CONTRIBUTING.md를 참조하세요.
Kubernetes 커뮤니티 참여는 CNCF 행동 강령에 따릅니다.
코드는 openapi-generator 프로젝트에 의해 생성됩니다.
우리는 코드 생성을 위한 범용 교차 언어 도구를 구축했으며, 이는 kubernetes-client/gen 저장소에 호스팅되어 있습니다.
시작하려면 java 클라이언트 디렉터리가 아닌 루트 디렉터리에서 진행하세요. 예를 들어
디렉터리 구조는 다음과 같을 수 있습니다:
${HOME}/
src/
gen/
java/
...
그런 다음 gen 저장소를 클론하려면 다음을 실행합니다:
cd ${HOME}/src
git clone https://github.com/kubernetes-client/gen
export GEN_ROOT=${PWD}
그런 다음 클라이언트를 업데이트하려면:
cd ${HOME}/src/java
${GEN_ROOT}/gen/openapi/java.sh kubernetes ./settings
이 과정은 docker를 사용하는 다소 긴 빌드 프로세스를 거쳐 최종적으로 kubernetes 디렉터리에 새로 생성된 코드 세트를 만들어냅니다.
kubectl exec와 동일합니다.kubectl port-forward와 동일합니다.kubectl attach와 동일합니다.kubectl cp와 동일합니다.client-java-extended 모듈이 필요합니다.)
| 클라이언트 버전 | 1.11 | 1.12 | 1.13 | 1.14 | 1.15 | 1.16 |
|---|
| 3.0.0 | ✓ | - | - | - | - | - |
| 4.0.0 | + | ✓ | - | - | - | - |
| 5.0.0 | + | + | ✓ | - | - | - |
| 6.0.1 | + | + | + | ✓ | - | - |
| 7.0.0 | + | + | + | + | ✓ | ✓ |
| 8.0.2 | + | + | + | + | + | ✓ |