jenkins kubernetes 연동
Jenkins 에서는 Kubernetes 환경을 위한 플러그인을 제공한다.
Jenkins 에서는 마스터노드에서 전체 잡을 관리하지만 실제 잡 수행은 슬레이브 노드에서 하도록 하는 것이 일반적인데 이 경우 슬레이브 노드가 실제로 아무일도 하지 않는 유휴시간 동안에도 자원을 차지한다는 단점이 있다.
이에 Kubernetes 일 경우 슬레이브 노드 대신 컨테이너에서 잡을 수행하도록 하고 작업이 끝나면 해당 컨테이너도 종료하는 방식이다. 그림으로 표현하자만 대략 아래와 같다.
이를 위해서는 일단 마스터노드에서 Kubernetes 클러스터를 연동해야 하는데 자꾸 헷갈려서 그 방식을 기록해둔다. 사용한 Jenkins 버전은 Jenkins 2.361.4 이다.
아래 메뉴에서 연동할 클러스터 정보를 입력할 수 있다.
Jenkins 관리 > 노드관리 > Configure Clouds
아래와 같이 클러스터 연동을 추가하자.
Name 값은 Pipeline 에서 참조할 키 값으로 적절한 값을 지정하고 클러스터 상세 정보를 입력을 위해 Kubernetes Cloud details... 버튼을 클릭하자.
여러 항목이 나올텐데 필요한 입력이 필요한 항목은 아래와 같다.
- Kubernetes URL: 클러스터 마스터 url 을 입력한다. 마스터가 여러개일 경우 그냥 1개만 입력하면 된다.
- Disable https certificate check: Jenkins 가 http 로 서비스 되어 인증서가 없을 경우 클러스터와 통신시 SSL 오류가 발생할 수 있다. 이 경우 이걸 체크하면 https 인증서 확인을 비활성화 할 수 있다.
- Jenkins URL: Jenkins 웹 접속 url을 적으면 된다.
- Jenkins tunnel: kubectl 을 통해 해당 클러스터의 Service 를 보면 포트가 50000 으로 지정된 Service 가 있을 것이다. Jenkins 구성방식에 따라 다르겠지만 일반적으로 디폴트 포트는 50000 이다. 해당 Service 는 nodePort 로 구성된 서비스로 해당 Service 로 접근할 수 있는 내부 도메인 주소를 적어주면 된다.
core dns 를 사용한다면 {service}.{namespace}.svc.cluster.local:50000 으로 적어주면 된다.
Jenkins 를 해당 클러스터에 구성했다면 여기까지 하고 Test Connection 버튼을 통해 정상 통신을 확인해보면 정상 연동되는 것을 확인할 수 있을 것이다. 만약 Jenkins 가 다른 클러스터에 설치되어 있다면 추가 인증이 필요하다. 이는 아래를 참고하자.
https://illya-chekrygin.com/2017/08/26/configuring-certificates-for-jenkins-kubernetes-plugin-0-12/
그런데 사실 Kubernetes 는 기본적으로 클러스터 단위로 관리되기 때문에 원격 클러스터에서 빌드를 수행해야 할 경우가 얼마나 있을지는 모르겠다.