반응형
🍳머리말
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를 사용했습니다.
📔 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목록이 출력됩니다.
📕참조
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.