1. 개요

Kubernetes 내부에 Jenkins를 배포했다면 아마 높은 확률로 helm을 통해 배포했을 것이고 그렇다면 Kubernetes 연동은 자동으로 설정이 완료된다. 해당 차트는 여기에서 확인이 가능하다. Kubernetes plugin도 자동으로 설치되기 때문에 agent를 생성하는 것도 특별히 신경 쓸 부분이 없다.

이 글은 Kubernetes 외부에 설치한 Jenkins에서 Kubernetes plugin을 설치하고 설정하는 방법을 기록한다.

 

2. Kubernetes Plugin 설치

[공식 사이트] 참고.

Dashboard > Manage Jenkins > Plugins > available plugins에서 kubernetes를 검색 후 설치한다.

 

설치를 완료했다면 New cloud를 클릭한다.

Cloud name을 입력하고 Create를 클릭한다.

Kubernetes Cloud details를 클릭하고 Kubernetes URL을 입력한다.

 

Kubernetes server certificate key를 넣어줘야 하는데 rke2를 통해 클러스터를 구성했다면 master node에서 아래 명령어를 통해 확인할 수 있다.

sudo cat /var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key

 

다음 Credentials에서 +Add 버튼을 누르고 Jenkins 버튼을 클릭하면 아래와 같은 옵션이 나오는데 CloudBeesTV에서 설명하는 방식은 ServiceAccount를 생성하고 적당한 Role과 연결해서 그 ServiceAccount의 token을 Secret text로 넣는 방법에 대해 설명한다. 하지만 Kubernetes v1.22 이후로는 ServiceAccount를 생성한다고 자동으로 token이 생성되고 할당되지 않기 때문에 ServiceAccount를 생성하고 token을 만들고 할당하는 과정이 필요하다.

 

다른 방법은 Secret file을 사용하는 방법으로 file에 ~/.kube/config 파일을 넣어주는 방법이 있다. 보안을 위해서는 위 방법으로 최소 권한 원칙에 따라 특정 namespace 안에서 꼭 필요한 권한만을 설정해서 사용하도록 한다.

마지막으로 Test Connection을 누르면 아래와 같이 Connected to Kubernetes 하고 나오면 연결은 성공한 것이다.

 

 

마지막으로 Jenkins tunnel을 설정한다. 일반적인 설치에서 어떤 포트를 사용하는지는 모르겠지만, TCP Agent Listener Port에 5000번이 아닌 다른 port가 할당되어 있다면 이 Jenkins tunnel에 위와 같은 방법으로 설정 후 Save 버튼을 누른다.

 

3. 설정 확인

새로운 프로젝트를 하나 생성한다. Pipeline Definition에 예재로 나와있는 Declarative (Kubernetes)로 생성한다.

이렇게 만들고 빌드를 하면 Kubernetes cluster에서 설정한 namespace에 jenkins agent가 생성되고 빌드가 되는 것을 확인할 수 있다.