[MacOS] Jenkins Install using kubernetes
Kubernetes On MacOS
MacOS 에서 Docker 를 설치하게 되면 대시보드에서 Kubernetes 를 활성화 할 수 있습니다.이 기능을 이용하여 MacOS에서도 단일 노드 Kubernetes 환경을 구성하여 사용하는 것이 가능합니다.
Jenkins
Jenkins는 테스트 자동화를 비롯하여 전반적인 CI 그리고 CD 까지도 구축할 수 있는 유용한 툴입니다. 직접 빌드머신을 만들고 환경을 구축할 수 있지만, Kubernetes 또는 Docker 를 이용하여 편리하게 환경을 구축할 수 있습니다. 우선 아래 git 명령어를 실행하여 kubernetes resource 생성을 위한 manifest 파일들을 내려받습니다.
$ git clone https://github.com/scriptcamp/kubernetes-jenkins
필요한 manifest 파일을 다운 받은 뒤 현재 환경에서 실행시키기 위하여 volume.yaml 파일을 수정해야합니다.
원본 volume.yaml 파일은 다음과 같습니다.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-pv-volume
labels:
type: local
spec:
storageClassName: local-storage
claimRef:
name: jenkins-pv-claim
namespace: devops-tools
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
local:
path: /mnt
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-node01
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-pv-claim
namespace: devops-tools
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
여기서 Persistent Volume Resource 의 내용을 수정해야합니다. 2023년 2월자 최신 MacOS Docker 에서 제공하는 Kubernetes 버전은 1.25v 이고, 마스터 노드의 kubernetes.io/hostname 레이블이 docker-desktop 으로 지정되어있습니다. 따라서 PV의 nodeAffinity 부분의 matchExpressions 을 보시면 key : kubernetes.io/hostname 부분의 값이 worker-node01 지정되어있는 것을 확인하실 수 있는데 이것을 docker-desktop 으로 변경해주셔야 정상 동작합니다. 또한 .spec.local.path 의 경로를 원하는 경로로 수정해주셔야합니다. 저는 홈디렉토리에 .volumes 라는 디렉토리 내에 따로 관리를 하고 있습니다.
수정된 volumes.yaml 은 아래와 같습니다.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-pv-volume
labels:
type: local
spec:
storageClassName: local-storage
claimRef:
name: jenkins-pv-claim
namespace: devops-tools
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
local:
path: <Home Directory Path>/.volumes/jenkins
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- docker-desktop
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-pv-claim
namespace: devops-tools
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
Deploy Jenkins
이제 필요한 manifest 파일 수정은 끝났습니다. 아래의 명령어를 순서대로 실행합니다.
$ kubectl apply -f namespace.yaml
$ kubectl apply -f serviceAccount.yaml
$ kubectl apply -f pv.yaml
$ kubectl apply -f deployment.yaml
$ kubectl apply -f service.yaml
위 명령어를 모두 실행 시키신 후 잠시 기다리시면 http://localhost:32000 경로를 통해 브라우저로 접근하시면 jenkins sign in 페이지가 뜨는것을 확인하실 수 있습니다. 로그인 페이지에서 요구하는 값을 얻으시려면 아래 명령어를 실행하시면 됩니다.
$ kubectl get pods -n devops-tools # jenkins pod 이름 확인
$ kubectl exec -it <jenkins-pod-name> -n devops-tools -- cat /var/jenkins_home/secrets/initialAdminPassword
변경을 원하시면 해당 파일의 값을 수정하시면 됩니다.