개발/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 웹콘솔 같은 걸 만들어보는 프로젝트를 진행해 보아도 좋을 것 같다.

반응형