-
jenkins를 kubernetes 에 구성하기NAVER Cloud 2021. 10. 22. 11:21
대부분의 CSP에서 ci/cd 관련한 상품들을 제공하고 있지만, 여전히 jenkins 사용자도 많은 것 같다.
그래서 jenkins 도 kubernetes 에 pod로 구성하고, 빌드도 네이버클라우드의 kubernetes 서비스(nks)를 통해 진행하는 테스트를 해보았다.
1. jenkins 배포
아래 mainfest 를 참고하여 jenkins deployment 와 service를 생성해준다.
나는 jenkins 에서 nks를 연계하여 사용할 수 있고, 빌드가 되는 정도만 확인하는 수준이라 jenkins deployment에 별도의 pv 설정을 하지 않았지만 운영환경에서는 pv 사용이 필요할 것으로 생각된다.
# jenkins_deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: jenkins spec: replicas: 1 selector: matchLabels: app: jenkins template: metadata: labels: app: jenkins spec: containers: - name: jenkins image: jenkins/jenkins:lts ports: - name: http-port containerPort: 8080 - name: jnlp-port containerPort: 50000 volumeMounts: - name: jenkins-vol mountPath: /var/jenkins_vol volumes: - name: jenkins-vol emptyDir: {}
jenkins service의 경우 나는 nodeport를 사용하는 예제가 많이 있지만, 외부에서도 접속하기 위해 LoadBalancer 타입으로 생성했다.
jenkins-jnlp 같은 경우에는 빌드할때 시스템간에만 사용하는 것 아닐까 싶어 ClusterIP 타입으로 생성했었는데, Build 할 때 jenkins 에서 jnlp 서비스를 접근하지 못하니 계속 에러가 났다. jenkins-jnlp 도 외부에서 접속할 수 있게 LB 타입으로 변경하니 정상적으로 빌드가 수행되었다.
# jenkins_service.yaml apiVersion: v1 kind: Service metadata: name: jenkins spec: type: LoadBalancer ports: - port: 8080 targetPort: 8080 nodePort: 30000 selector: app: jenkins --- apiVersion: v1 kind: Service metadata: name: jenkins-jnlp spec: type: LoadBalancer ports: - port: 50000 targetPort: 50000 selector: app: jenkins
jenkins service는 jenkins web-ui를 위한 jenkins 서비스와 jenkins-jnlp 서비스 2가지를 생성한다.
# 1. jenkins namespace 생성 kubectl create namespace jenkins # 2. jenkins_deployment.yaml 배포 kubectl apply -f jenkins_deployment.yaml # 3. jenkins_service.yaml 배포 kubectl apply -f jenkins_service.yaml
생성된 리소스를 보면 아래와 같다.
NAME READY STATUS RESTARTS AGE pod/jenkins-784f598f48-llrdb 1/1 Running 0 46h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/jenkins LoadBalancer 198.19.193.176 jenkins-jenkins-00000-8575147-bb17dff9a968.kr.lb.naverncp.com 8080:30000/TCP 2d service/jenkins-jnlp LoadBalancer 198.19.185.12 jenkins-jenkins-jnlp-00000-8605873-a1d85fb70abb.kr.lb.naverncp.com 50000:30268/TCP 2d NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/jenkins 1/1 1 1 2d NAME DESIRED CURRENT READY AGE replicaset.apps/jenkins-784f598f48 1 1 1 2d
2. jenkins 접속
jenkins 서비스를 LB 타입으로 생성했기 때문에 EXTERNAL-IP 로 조회된 LB 도메인을 브라우저에서 조회한다.
최초로 접속하면 unlock key를 넣어줘야 하는데 jenkins pods의 로그를 조회해 보면 확인할 수 있다.
# jenkins pod 조회 kubectl get pods -n jenkins NAME READY STATUS RESTARTS AGE jenkins-784f598f48-wtgnz 1/1 Running 0 9m12s # jenkins pod log 조회 (로그 마지막 부분에 있다.) kubectl logs jenkins-784f598f48-wtgnz -n jenkins ... ************************************************************* Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: 10f8265913b948c5b44b43106dd3616b This may also be found at: /var/jenkins_home/secrets/initialAdminPassword *************************************************************
로그인에 성공하면 plugin 을 설치하라고 나오는데 이상하게 이때 어떤 버튼이든 누르면 에러가 발생한다. 원인을 찾아보려고 스택오버플로우를 봤더니 pod를 재생성 해보라고 해서 속는셈 치고 해봤더니 잘됨 ;;
jenkins pod는 deployment로 배포했기 때문에 삭제해도 바로 자동 재생성된다. 쫄지말고 그냥 지우시라.
kubectl get pods -n jenkins NAME READY STATUS RESTARTS AGE jenkins-784f598f48-wtgnz 1/1 Running 0 12m kubectl delete pods jenkins-784f598f48-wtgnz -n jenkins pod "jenkins-784f598f48-wtgnz" deleted kubectl get pods -n jenkins NAME READY STATUS RESTARTS AGE jenkins-784f598f48-mwl4v 1/1 Running 0 12s #pod가 재생성되었기 때문에 로그인 키값이 변경되었을 것이다. 다시 pod 로그 조회해서 키값 get kubectl logs jenkins-784f598f48-mwl4v -n jenkins
그럼 이렇게 플러그인이 잘 설치된다.
이제 kubernetes 에 jenkins 설치는 완료했고, kubernetes 사용을 위해 plugin 설치하는 방법은 다음 게시물에서 다루도록 하겠다.
반응형'NAVER Cloud' 카테고리의 다른 글
kubernetes Pod 에서 NAS 공유 볼륨 사용하기 (0) 2021.12.01 jenkins kubernetes plugin 설치하고 빌드 테스트 해보기 (0) 2021.10.22 ECR 이미지를 NCP 컨테이너 레지스트리(Container Registry)로 복사하기 (0) 2021.10.06 NKS (Ncloud Kubernetes Service) 에 istio 설치하기 (0) 2021.08.12 Kubernetes 에서 Cert-manager로 letsencrypt 인증서 발급/설정 (0) 2021.07.22