직무스터디/QA 노하우

[k8s][jenkins]쿠버네티스에 젠킨스 설치하기

피타챈 2024. 7. 1. 09:33

사전조건)

k8s 설치

설치과정)

git 에서 다운

git clone https://github.com/scriptcamp/kubernetes-jenkins

namespce 생성

kubectl create namespace jenkins 

storageclass 생성

serviceAccount.yaml  생성 / apply

volume.yaml 생성/ apply

필자의 경우, 타 서버에서 볼륨을 관리하기 때문에 local, nodeAffinity 부분을 다음과 같이 수정하였다.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: jenkins-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: Immediate

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv-volume
spec:
  storageClassName: jenkins-storage
  claimRef:
    name: jenkins-pv-claim
    namespace: jenkins
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
          path: /home/master/storage1/PV-jenkins
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pv-claim
  namespace: jenkins
spec:
  storageClassName: jenkins-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

deployment.yaml 생성/apply

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins-server
  template:
    metadata:
      labels:
        app: jenkins-server
    spec:
      securityContext:
            fsGroup: 1000
            runAsUser: 1000
      serviceAccountName: jenkins-admin
      containers:
        - name: jenkins
          image: docker.io/jenkins/jenkins:lts
          imagePullPolicy: Always
          resources:
            limits:
              memory: "2Gi"
              cpu: "1000m"
            requests:
              memory: "500Mi"
              cpu: "500m"
          ports:
            - name: httpport
              containerPort: 8080
            - name: jnlpport
              containerPort: 51000
          livenessProbe:
            httpGet:
              path: "/login"
              port: 8080
            initialDelaySeconds: 90
            periodSeconds: 10
            timeoutSeconds: 5
            failureThreshold: 5
          readinessProbe:
            httpGet:
              path: "/login"
              port: 8080
            initialDelaySeconds: 60
            periodSeconds: 10
            timeoutSeconds: 5
            failureThreshold: 3
          volumeMounts:
            - name: jenkins-data
              mountPath: /var/jenkins_home
      volumes:
        - name: jenkins-data
          persistentVolumeClaim:
              claimName: jenkins-pv-claim

 

deployment 상태 확인

pod 상태 확인

pv 상태 확인

pvc 상태 확인

kubectl apply -f service.yaml 생성/ apply

접속

 

 

http://<node-ip>:32000

젠킨스 password 확인

kubectl get pods -n jenkins

 

+) 필자의 경우 pod 를 띄울때 ImageInspectError 에러가 발생하여 애먹었다.

pod 를 describe 해보았을 때 event에 에러메세지로 아래와 같이 출력되었고, docker.io 설정이 누락되어 발견됨을 찾음! 

rpc error: code = Unknown desc = short-name "jenkins/jenkins:lts" did not resolve to an alias and no unqualified-search registries are defined in "/etc/containers/registries.conf"

/etc/containers/registries.conf 파일에 아래 내용 추가 후 정상적으로 파드 뜨는것을 확인하였다.

[registries.search] 
registries = ['docker.io']