본문 바로가기

Kubernetes

Tip&Techs 지속적인 변경 사항을 코드로 관리하는 Jenkinsfile(Declarative Pipeline) 방식

페이지 정보

작성자 이노힐
댓글 0건 조회 41회
작성일 2026-08-02 11:19:10

본문

지속적인 변경 사항을 코드로 관리하는 Jenkinsfile(Declarative Pipeline) 방식을 강력히 추천해 드리며,

Oracle DB가 이미 도커 컨테이너로 실행 중이므로 기존 인프라를 자연스럽게 쿠버네티스로 이관할 수 있습니다.

목표하시는 인프라를 단계별로 구축할 수 있도록 핵심 가이드를 정리해 드립니다.


 

1단계: 개인 서버용 쿠버네티스 배포판 선택

개인 서버(On-Premise) 환경이므로 무겁고 설정이 복잡한 정식 순정 Kubernetes(Kubeadm)보다는

가볍고 관리가 쉬운 경량화 배포판을 설치하는 것이 훨씬 효율적입니다. 

  • 추천 1순위: K3s (Rancher 제공)
    • 리소스 소모가 매우 적어 개인 서버 환경에 가장 적합합니다.
    • 단일 바이너리로 구성되어 명령어 하나로 설치가 끝납니다. 
  • 추천 2순위: MicroK8s (Ubuntu Canonical 제공)
    • Ubuntu를 사용 중이시라면 snap install microk8s 명령어로 바로 설치할 수 있습니다.
    • 대시보드나 인그레스(Ingress) 같은 필수 플러그인을 활성화하기 매우 쉽습니다.

 


 

2단계: Oracle DB 컨테이너의 쿠버네티스 이관 전략

기존 도커로 띄우던 Oracle DB를 쿠버네티스로 옮길 때는 데이터 유실 방지가 가장 중요합니다.

  • PersistentVolume(PV) 및 PVC 설정: DB 컨테이너가 재시작되어도 데이터가 사라지지 않도록 서버의 실제 디렉터리(HostPath) 또는 로컬 디스크 파티션을 쿠버네티스 볼륨에 영구 결합해야 합니다.
  • StatefulSet 사용: 일반 Deployment 대신 네트워크 식별자와 스토리지가 고정되는 StatefulSet 오브젝트로 Oracle DB를 띄우는 것이 좋습니다.
  • 우선순위 팁: 초기 구축 단계라면 Oracle DB는 기존 Docker에 그냥 두고, Spring Boot, React, Python 블로그 서비스만 먼저 쿠버네티스로 이관하여 연동한 뒤, 나중에 DB를 쿠버네티스 안으로 마이그레이션하는 방식을 추천합니다. 이 편이 트래블슈팅하기 훨씬 수월합니다.

 


 

3단계: Jenkinsfile (Declarative Pipeline) 추천 구조

젠킨스 파이프라인 코드를 Git 저장소에 Jenkinsfile이라는 파일명으로 포함해 두면 배포 이력이 모두 코드로 추적됩니다. 젠킨스에 Kubernetes 플러그인을 설치하면 아래와 같은 구조로 빌드할 수 있습니다.

 

groovy

pipeline {
    agent {
        kubernetes {
            // 빌드 단계에서만 동적으로 생성될 Pod 정의
            yaml """
apiVersion: v1
kind: Pod
metadata:
  labels:
    some-label: jenkins-build
spec:
  containers:
  - name: gradle
    image: gradle:8-jdk17
    command: ['cat']
    tty: true
  - name: docker
    image: docker:stable
    command: ['cat']
    tty: true
"""
        }
    }
    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
        stage('React & Spring Boot Build') {
            steps {
                container('gradle') {
                    // React 빌드 결과물을 Spring Boot static으로 복사한 뒤 jar 빌드 수행
                    sh './gradlew bootJar'
                }
            }
        }
        stage('Docker Image Build & Push') {
            steps {
                container('docker') {
                    // 도커 이미지 생성 및 개인/공용 레지스트리 푸시
                    sh 'docker build -t ://my-reg.com .'
                    sh 'docker push ://my-reg.com'
                }
            }
        }
        stage('Kubernetes Deploy') {
            steps {
                // 쿠버네티스 클러스터에 새 이미지 반영 (무중단 배포 트리거)
                sh 'kubectl rollout restart deployment/atms-deployment'
            }
        }
    }
}

 

 


댓글목록

등록된 댓글이 없습니다.

댓글쓰기

내용

방문자 집계

  • 오늘 726
  • 어제 1,099
  • 최대 7,414
  • 전체 186,277

Copyright © www.innohealonline.com. All rights reserved.