Jenkins Kubernetes Plagin 는 전통적인 마스터/슬레이브 구조 중 슬레이브를 Kubernetes Pod으로 구성하는 방식이다. 이는 일회성 컨테이너로 사용되고 잡 수행이 완료되면 자동으로 종료된다. 즉, 아래와 같은 구조가 된다.
구성 방법은 서칭하면 많이 나오니 생략하고 여기에서는 트러블 슈팅에 대해 이야기 하려고 한다. 일단 슬레이브는 무조건 k8s 컨테이너로 생성되어야 하기 때문에 이를 위한 쿠버네티스 클러스터가 필요하고 마스터는 해당 클러스터에 구축해도 되고 별도 클러스터에 구축해도 되고 아예 별도로 PM환경에 구축해도 된다.
여기에서 마스터를 슬레이브와 동일한 클러스터에 구성한다면 별도의 트러블을 경험하지 못하고 쉽게 구축할 수 있을 것이다. 다른 클러스터에 구축하거나 별도 PM환경에 구축했다면 마스터/슬레이브 연동간 문제가 발생할 수 있다.
이 방식에서는 마스터/슬레이브 연동은 기본적으로 JNLP가 사용되고 기본적으로 슬레이브에서 마스터와 통신을 위한 포트로 50000 포트가 사용된다. 이에 마스터에는 슬레이브에서 접근할 수 있는 50000 포트가 기본적으로 오픈되어 있어야 한다. 마스터가 PM에 구축되어 있다면 대부분 마스터에 50000 포트가 오픈되어 있지 않아 문제가 발생한다.
마스터가 슬레이브와 다른 별도 클러스터에 구성되었을 경우에도 문제가 발생할 수 있다. 쿠버네티스 환경에서 외부에 포트를 오픈하려면 NodePort 서비스를 사용해야 하는데 이때 할당할 수 있는 포트가 30000 ~ 32767 로 제한되기 때문이다. 결국 적절한 포트를 지정하고 슬레이브에서도 50000이 아닌 해당 포트로 접근하도록 해야 한다.
슬레이브에 해당하는 클러스터 설정은 Jenkins 관리 > 시스템 설정 > Cloud 에서 할텐데 그 중 아래 항목을 통해 슬레이브에서 접근할 포트를 변경할 수 있다. 여기에서는 30000으로 변경했다.
그리고 또 한가지 ...
마스터와 슬레이브를 별도 클러스터로 구성한다면 ServiceAccount를 활용할 수 없기 때문에 Jenkins 관리 > 시스템 설정 > Cloud 에서 슬레이브 설정시 Credentials 항목을 반드시 기입해줘야 한다. 이건 어떻게 해야 할까?
연결하려는 클러스터의 마스터 노드에 접속해서 ~/.kube/config 파일을 secret file 로 지정해서 Credentials 지정을 해주면 된다. 그런데 만약 ~/.kube/config 파일을 권한 문제로 다운로드 할 수 없다면 그냥 해당 내용만 복사해서 로컬에 임의의 파일을 생성한 뒤에 그 파일을 secret file 로 지정해도 된다.
'Base > CI, CD' 카테고리의 다른 글
maven execution (0) | 2021.06.07 |
---|---|
Jenkins Master/Slave 연동 (0) | 2021.06.05 |
컨테이너 환경에서 Gradle (0) | 2021.05.26 |
Nexus와 Maven Central (2) | 2021.05.21 |
maven 인코딩 설정 (0) | 2021.05.18 |