개발/Spring
[Springboot] Fabric8 kubernetes 리소스 컨트롤하기
joon95
2022. 10. 26. 23:59
반응형
스프링부트에서 쿠버네티스 리소스를 컨트롤하기 위해 제공되는 라이브러리가 2개 있다.
하나는 kubernetes에서 제공하는 것이고
또 하나는 Fabric8 에서 제공하는 라이브러리이다.
이 두개의 차이는 이 링크에서 아주 잘 설명하고 있다.
위 링크에서 대충 보자면 kubernetes는 객체를 선언하고 하는 작업들이 많고
Fabric8은 웹소켓을 이용한다는 것이다.
(소스 구현부도 Fabric이 편해보임..)
이제 간단히 k8s 리소스를 가져와보자.
Pom.xml
k8s / ocp 라이브러리가 따로 존재한다.(필자의 현재 코드는 k8s용)
<!-- k8s client -->
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<version>6.1.1</version>
</dependency>
<!-- ocp https://mvnrepository.com/artifact/io.fabric8/openshift-client -->
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>openshift-client</artifactId>
<version>6.1.1</version>
</dependency>
Controller
간단히 GET /k8s/namespace 에 접근하면 모든 namespace를 출력해준다.
@RequestMapping("/k8s")
public class K8sTest {
@GetMapping(value ="/namespace", produces = "application/json")
public @ResponseBody NamespaceList testsetsetset() {
NamespaceList ns = null;
try (KubernetesClient client = new KubernetesClientBuilder().build()) {
client.pods().inAnyNamespace().list()
.getItems()
.stream()
.map(Pod::getMetadata)
.map(ObjectMeta::getName)
.forEach(System.out::println);
NamespaceList ns = client.namespaces().list();
ns.getItems().forEach((d) -> {
log.info("namespace : " + d.getMetadata().getName());
});
}
return ns;
}
}
여기서 쿠버네티스 client 객체는 아래 우선순위에 따라 적용된다.
1. 시스템속성
2. 환경 변수
3. 큐브 구성파일
4. 서비스 계정 토큰 및 탑재된 CA인증서
필자는 스프링부트가 기동되고 있는 host에 k8s 접근용 큐브 구성파일이 존재한다(~/.kube/config)
테스트
마치며
Fabric8 라이브러리를 처음알게 되었는데, 정말 쉽게 자원을 컨트롤할 수 있었다.
이렇게 쿠버네티스 대사보드나 ocp 웹콘솔 같은 걸 만들어보는 프로젝트를 진행해 보아도 좋을 것 같다.
반응형