Jenkins Kubernetes 설치 준비#
Namespace 생성#
# jenkins namespace 생성
kubectl create namespace jenkins
Persistent Volume, Persistent Volume Claim 생성 (Optional)#
- 아래 예시는 특정 노드의 local path를 사용하는 정적 프로비저닝(static provisioning) 예시이므로,
ebme-storage와 동일한 이름의 StorageClass가 클러스터에 미리 존재해야 하며 PV가 바인딩될 노드(kube-cluster-worker1)도 실제 환경에 맞게 수정 필요
# jenkins-pvc.yaml
# ebme-storage class 를 사용하는 30Gi 크기의 PV, PVC 생성
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-pv
spec:
capacity:
storage: 30Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: ebme-storage
local:
path: /mnt/jenkins
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- kube-cluster-worker1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-pvc
namespace: jenkins
spec:
accessModes:
- ReadWriteOnce
storageClassName: ebme-storage
resources:
requests:
storage: 30Gi
Jenkins Service Account 생성 (Optional)#
# jenkins-service-account.yaml
# In GKE need to get RBAC permissions first with
# kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin [--user=<user-name>|--group=<group-name>]
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: jenkins
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
resources: ["pods/log"]
verbs: ["get","list","watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["watch"]
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: jenkins
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: jenkins
subjects:
- kind: ServiceAccount
name: jenkins
Jenkins values.yaml 생성 (Optional)#
# jenkins-values.yaml
# persistence 부분을 아래와 같이 수정
persistence:
enabled: true
existingClaim: "jenkins-pvc"
storageClass: "ebme-storage"
accessMode: "ReadWriteOnce"
size: "30Gi"
Helm을 사용한 젠킨스 설치#
Jenkins Repository 추가#
helm repo add jenkinsci https://charts.jenkins.io
helm repo update
Jenkins 설치#
# 기본 설정대로 설치
helm install -n jenkins jenkins jenkinsci/jenkins
# 기존 작성한 jenkins-values.yaml 을 사용하여 설치
helm install -n jenkins jenkins jenkinsci/jenkins -f jenkins-values.yaml
Jenkins Service expose#
- NodePort 로 Service 를 expose 하여 접속 가능하도록 설정
- 해당 주소로 Jenkins 접속 확인
kubectl expose svc jenkins -n jenkins --type=NodePort --name=jenkins
kubectl exec --namespace jenkins -it svc/jenkins -c jenkins -- /bin/cat /run/secrets/chart-admin-password && echo