본문 바로가기
개발인생/Kubernetes

install) kubernetes + jenkins (yaml 파일로 배포하기)

by DevOps_901126 2023. 2. 9.
반응형

K8s + jenkins 배포하기

 

Jenkins

소프트웨어 개발 시 지속적인 통합 (CI)를 제공하는 툴

 

중요 사항

  1. manifest (yaml) 로 설치
  2. Namespace : wgh-ns
  3. Jenkins 분산 아키텍처 구현
    a. Jenkins agent pod 를 생성하여 1회성으로 빌드를 한 후 pod가 사라지게 끔 설정
    b. accessMode 는 ReadWriteMany가 되어야 함 (master pod 와 agent pod 가 같은 PVC를 바라보아야 한다)

 

PV 생성

  • vi jenkins-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  hostPath:
    path: /k8s-data/jenkins

 

PVC 생성

  • vi jenkins-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pvc
spec:
  storageClassName: local-storage
  volumeName: jenkins-pv
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

 

Deployment 생성

  • securityContext: runAsUser: 0 fsGroup: 0
    • securityContext 는 pod에 대한 보안설정 (pod 생성 후 권한문제로 동작하지 않을 때 주로 pod securityContext를 수정해준다)
    • runAsUser : 컨테이너의 사용자를 지정 (0=root)
    • fsGroup : pod 볼륨에 대한 그룹을 할당.(0=root)
  • 2개 Port 열어야 됨
    • http-port : Jenkins API 접근에 사용
    • Jnlp-port : Jenkins agent노드와 jenkins 마스터 노드가 통신하는데 사용되는 port
  • vi jenkins-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      securityContext:
        runAsUser: 0
        fsGroup: 0
      containers:
      - name: jenkins
        image: jenkins/jenkins:latest
        env:
        - name: JAVA_OPTS
          value: -Djenkins.install.runSetupWizard=false
        ports:
          - name: http-port
            containerPort: 8080
          - name: jnlp-port
            containerPort: 50000
        volumeMounts:
        - name: jenkins-volume
          mountPath: /var/jenkins_home
      volumes:
      - name: jenkins-volume
        persistentVolumeClaim:
          claimName: jenkins-pvc

 

Service 생성

  • agent port = Jnlp port
  • vi jenkins-service.yml
apiVersion: v1
kind: Service
metadata:
  name: jenkins-svc
spec:
  selector:
    app: jenkins
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
    nodePort: 32002
  - name: agent
    port: 50000
    targetPort: 50000
    protocol: TCP
    nodePort: 32012
  type: NodePort

 

실행 및 Test

$ kubectl apply -f . —namespace=wgh-ns
$ kubectl get pods -n wgh-ns
[ 서버 IP ]:32002 접속 Jenkins 확인

  • 접속 후 초기 계정 생성
    • Jenkins 관리 > Configure Global Security > Security Realm 에서 Jenkins’s own user database 선택 > Authorization의 Logged-in users can do anything 선택 후 저장하면 “첫번째 관리자 만들기로 redirection”

 

참고

반응형