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 에서 제공하는 기본 템플릿 value.yaml 에서 필요한 부분만 수정
# 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
  • Jenkins 비밀번호 확인
kubectl exec --namespace jenkins -it svc/jenkins -c jenkins -- /bin/cat /run/secrets/chart-admin-password && echo