Jenkins 설치를 위한 Kubernetes 네임스페이스 생성
kubectl create namespace k8s-jenkins
영구 볼륨 생성
# pv-config.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-main-pv
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
server: 10.128.20.150
path: /storage/data
kubectl apply -f pv-config.yaml 실행
영구 볼륨 클레임 설정
# pvc-config.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-storage-pvc
namespace: k8s-jenkins
spec:
resources:
requests:
storage: 10Gi
accessModes:
- ReadWriteMany
kubectl apply -f pvc-config.yaml 실행
서비스 계정 설정
kubectl create sa system-jenkins -n k8s-jenkins
RBAC 권한 부여
kubectl create clusterrolebinding sys-jenkins-crb \
--clusterrole=cluster-admin \
--serviceaccount=k8s-jenkins:system-jenkins
Jenkins 배포 구성
# jenkins-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins-master
namespace: k8s-jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins-core
template:
metadata:
labels:
app: jenkins-core
spec:
serviceAccountName: system-jenkins
containers:
- name: jenkins
image: jenkins/jenkins:lts-jdk17
ports:
- containerPort: 8080
name: web-interface
- containerPort: 50000
name: agent-communication
volumeMounts:
- name: jenkins-data
mountPath: /var/jenkins_home
- name: docker-binary
mountPath: /usr/bin/docker
volumes:
- name: jenkins-data
persistentVolumeClaim:
claimName: jenkins-storage-pvc
- name: docker-binary
hostPath:
path: /usr/bin/docker
kubectl apply -f jenkins-deploy.yaml 실행
서비스 노출
# jenkins-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: jenkins-external
namespace: k8s-jenkins
spec:
type: NodePort
selector:
app: jenkins-core
ports:
- port: 8080
targetPort: web-interface
nodePort: 31000
- port: 50000
targetPort: agent-communication
kubectl apply -f jenkins-svc.yaml 실행
주요 팟 실행 문제
kubectl get pods -n k8s-jenkins상태 확인- 팟 로그 검사:
kubectl logs [pod-name] -n k8s-jenkins - 팟 상세 정보:
kubectl describe pod [pod-name] -n k8s-jenkins
설치 후 설정
브라우저 접속 주소: http://[노드_IP]:31000
미러 설정 URL: https://mirror.example.com/jenkins/update-center.json