본문 바로가기

Java/Spring Boot

(Spring Boot) - k8s java client로 k8s API와 통신하기

반응형

🍳머리말

local환경 에서 Spring boot를 이용해 k8s API와 통신하여 특정 namespace의 pod 목록을 출력하는 예제글입니다.


📕 Prerequisite 

📔 k8s cluster

📔 Spring Boot


📕 k8s cluster 설정

📔 k8s cluster 내 ~/.kube/config 정보 확인

다음처럼 명령어 입력시 구축된 k8s config 내용을 확인할 수 있습니다. 해당 내용을 복붙해 config file을 만들어줍니다.

📔 특정 namespace 명에 떠 있는 pod 확인

mskim이라는 namespace에 떠 있는 pod들의 목록입니다.


📕 Spring Boot 구성

📔 project 생성

다음 사이트에서 자신이 사용하는 jdk에 맞게 적절히 생성해줍니다. 제 경우는 jdsk-11를 사용했습니다.

https://start.spring.io/

📔 build.gradle

필요 dependencies를 추가해줍니다.

plugins {
	id 'org.springframework.boot' version '2.7.0'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'com.github.jonasrutishauser:transactional-event-api:1.3.4'
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	implementation 'io.kubernetes:client-java:15.0.1'
	implementation 'org.apache.httpcomponents:httpclient:4.5.10'
	implementation 'org.springframework.boot:spring-boot-starter-jdbc'

}

tasks.named('test') {
	useJUnitPlatform()
}

📔 k8s config file 저장

project내 /resources에 해당 file을 저장해줍니다. 다음은 config file 내용 일부분입니다.

📔 java class작성

public class ClientExample {
    public static void main(String[] args) throws IOException, ApiException {

        // file path to your KubeConfig

        String kubeConfigPath = "{config file 경로}";

        // 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();

        String fs = "metadata.namespace=mskim,status.phase=Running";

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

📔 실행결과

특정 fieldselector에 들어있는 mskim namespace명으로 pod목록이 출력됩니다.


📕참조

https://github.com/kubernetes-client/java/blob/master/examples/examples-release-15/src/main/java/io/kubernetes/client/examples/KubeConfigFileClientExample.java

 

GitHub - kubernetes-client/java: Official Java client library for kubernetes

Official Java client library for kubernetes. Contribute to kubernetes-client/java development by creating an account on GitHub.

github.com


*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.