본문 바로가기

분류 전체보기

(70)
젠킨스 살펴보기 젠킨스를 직접 접속해서 살펴보기에 앞서 현재 설치된 젠킨스의 구조를 간단히 살펴보자. 젠킨스 컨트롤러는 마스터 노드에 설치했지만 젠킨스 에이전트는 필요시에 생성되고 작업을 마치면 삭제되는 임시적인 구조를 가진다. 따라서 젠킨스 에이전트 작업 내용들은 삭제 전에 젠킨스 컨트롤러에 저장되어야 하며, 이를 위해 젠킨스 에이전트 서비스가 항상 동작하고 있다. kubectl get service 명령으로 현재 젠킨스 에이전트 서비스를 확인할 수 있다. $ kubectl get service 젠킨스 컨드롤러를 단독으로 설치할 경우에는 컨트롤러가 설치된 서버에서 젠킨스 자체 시스템 관리, CI/CD 설정, 빌드 등의 작업을 모두 젠킨스 컨트롤러 단일 노드에서 수행한다. 하지만 컨트롤러-에이전트 구조로 설치할 경우 컨..
CI / CD ( 지속적 통합 / 지속적 제공 ) CI / CD ( 지속적 통합 / 지속적 제공 ) CI : Continuous Integration CD : Continuous Delivery CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 제공한다. 소스 코드로부터 설치, 실행할 수 있는 제품을 생성하여 배포하는 과정. # CI ( 지속적 통합 ) 란? 개발자를 위한 자동화 프로세스인 지속적인 통합. 애플리케이션에 대한 새로운 코드 변경사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되어 여러명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다. 소프트웨어 개발에서 각 소프트웨어 개발자가 작업한 변경점을 프로젝트의 원래 소스 코드에 자주, 빠르게 ..
커스터마이즈로 배포 간편화하기 (MetalLB 구성) 커스터마이즈의 작동 원리 커스터마이즈를 통한 배포는 kubectl에 구성돼 있는 매니페스트를 고정적으로 이용해야하는 기존 방식을 유연하게 만든다. 우선 커스터마이즈가 어떻게 작동하는지 간단하게 살펴보자. 커스터마이즈는 야믈파일에 정의된 값을 사용자가 원하는 값으로 변경할 수 있다. 쿠버네티스에서 오브젝트에 대한 수정사항을 반영하려면 사용자가 직접 야믈 파일을 편집기 프로그램으로 수정해야한다. 일반적으로 이런 방식으로 수정했을 때 큰 문제가 발생하지 않는다. 그런데 만약 수정해야하는 야믈파일이 매우 많거나 하나의 야믈파일로 환경이 다른 여러 개의 쿠버네티스 클러스터에 배포해야해서 LABEL이나 NAME 같은 일부 항목을 수정해야 한다면 매번 일일이 고치는 데 많은 노력이 든다. 커스터마이즈는 이를 위해 k..
젠킨스 설치를 위한 간편화 도구 Nginx 애플리케이션을 사용하려면 디플로이 먼트를 생성하고 이를 서비스로 노출하는 오브젝트 생성 과정을 총 두번 진행해야 했다. 그런데 이런 적은 수의 오브젝트로 모든 종류의 애플리케이션을 사용자가 사용할 수 있는 형태로 구현할 수 있을까? 그렇지 않다. 필요에 따라서 다수의 오브젝트를 사용해야 하는데, 우리는 수많은 오브젝트를 한번에 생성하는 매니페스트를 실행한적이 있다. MetalLB 구동하는 데 필요한 수많은 오브젝트를 미리 정의된 하나의 매니페스트에 넣고 바로 실행했다. 모든 환경에서 단순히 오브젝트를 정의한 대로만 사용한다면 젠킨스나 커스터마이즈, 헬름 등은 알 필요가 없다. 그러나 사용자마다 필요한 환경적 요소가 모두 다르므로 이를 요구 사항에 맞게 바꾸어야한다. 쿠버네티스 클러스터 환경에서..
컨테이너 인프라 환경에서 CI/CD 컨테이너 인프라 환경에서는 주로 CD를 강조하지만, CI와 CD는 대부분 함께 사용되기 때문에 CI/CD의 개념을 정확히 이해해야한다. 일반적으로 CI는 코드를 커밋하고 빌드했을 때 정상적으로 작동하는지 반복적으로 검증해 애플리케이션의 신뢰성을 높이는 작업이다. CI 과정을 마친 애플리케이션은 신뢰할 수 있는 상태가 된다. CD는 CI 과정에서 생성된 신뢰할 수 있는 애플리케이션을 실제 상용 환경에 자동으로 배포하는것을 의미한다. 애플리케이션을 상용 환경에 배포할 때 고려해야 할 사항이 여러가지 있는데, 이를 CD에 미리 정의하면 실수를 줄이고 실제 적용 시간도 최소화 할 수 있다. CI/CD를 컨테이너 인프라 관점에서 정리해보자. 개발자가 소스를 커밋(commit) 하고 푸시(push)하면 CI 단계로..
통합 및 배포 자동화 통합 및 배포 자동화 컨테이너 인프라 환경에서 쿠버네티스를 사용하는 이유는 컨테이너 애플리케이션을 유연하고 빠르게 배포하고 운영하기 위해서이다. 그렇다면 컨테이너로 구동하는 애플리케이션을 어떻게 배포하는 것이 가장 좋을까? 현재까지 진행한 과정은 다음과 같다. 깃허브 등의 저장소에 저장해 둔 애플리케이션 소스 코드를 내려받아 도커 컨테이너 이미지로 빌드한다. 빌드한 컨테이너 이미지를 쿠버네티스에서 사용할 수 있도록 레지스트리에 등록한다. 레지스트리에 등록된 이미지를 기반으로 쿠버네티스 오브젝트를 생성한다. 생성한 오브젝트(파드/디플로이먼트)를 외부에서 접속할 수 있도록 서비스 형태로 노출한다. docker build > docker push > kubectl create > kubectl expose 이..
쿠버네티스에서 도커 이미지 구동하기 쿠버네티스에서 직접 만든 컨테이너 사용하기 지금까지 도커를 이용해 컨테이너를 다루고 새로운 컨테이너 이미지를 빌드해보았다. 컨테이너 이미지 빌드방법을 다양하게 알아본 이유는 직접 만든 컨테이너 이미지를 쿠버네티스에서 사용하는것이다. 쿠버네티스에서 이미지를 사용하려면 쿠버네티스가 이미지를 불러올 수 있는 공간에 이미지를 넣어두어야 한다. # 쿠버네티스에서 도커 이미지 구동하기 쿠버네티스는 컨테이너를 효과적으로 다루기 위해서 만들어졌고 컨테이너인 파드도 쉽게 부를 수 있다. 따라서 직접 만든 컨테이너 이미지도 kubectl 명령으로 쿠버네티스 클러스터에서 바로 구동할 수 있다. 도커를 빌드해서 만든 multistage-img 이미지를 쿠버네티스에서 구동해보자. 1. 이미지 확인 $ docker images ..
도커 컨테이너 이미지 만들기 4 - 멀티 스테이지 빌드 # 최적화해 컨테이너 빌드하기(멀티 스테이지 빌드) 지금까지의 빌드 방법은 이미지 용량이 커지거나 빌드과정이 번거로운 등의 단점이 있었다. 멀티 스테이지 빌드(Multi-Stage Build) 방법은 최종 이미지의 용량을 줄일 수 있고 호스트에 어떠한 빌드 도구도 설치할 필요가 없다. 도커파일 작성 > 도커파일 빌드 > 빌드완료 멀티 스테이지는 docker-ce 17.06 버전부터 지원된다. 1. 파일 살펴보기 2. Dockerfile 확인 # 1단계: 자바 소스를 빌드해 JAR로 만듦 FROM openjdk:8 AS int-build # openjdk 이미지에 int-build라는 별칭을 붙임 LABEL description="Java Application builder" RUN git clone WO..
도커 컨테이너 이미지 만들기 3 - 컨테이너 내부에서 컨테이너 빌드하기 # 컨테이너 내부에서 컨테이너 빌드하기 번거로운 과정없이 바로 자바 소스를 컨테이너 이미지에서 빌드해보자. 도커파일 작성 > 도커파일 빌드 > 빌드완료 1. 파일 살펴보기 FROM openjdk:8 LABEL description="Echo IP Java Application" EXPOSE 60433 RUN git clone WORKDIR inbuilder RUN chmod 700 mvnw RUN ./mvnw clean package RUN mv target/app-in-host.jar /opt/app-in-image.jar WORKDIR /opt ENTRYPOINT [ "java", "-jar", "app-in-image.jar" ] FROM openjdk:8 자바 개발 도구가 포함된 이미지 EXPOS..
도커 컨테이너 이미지 만들기 2 - 컨테이너 용량 줄여 빌드하기 # 컨테이너 용량 줄여 빌드하기 불필요한 공간을 점유하는 건 비용 낭비이기도 하지만, 성능에 영향을 미칠 수 있다. 이번에는 컨테이너 이미지의 용량을 줄여 빌드하는 방법을 알아보자. # 컨테이너 용량을 줄여 빌드하는 과정 도커파일 작성 > 도커파일 빌드 > 빌드 완료 기본 방법보다 1단계가 줄고, 기초 이미지가 openjdk에서 GCR(Google Container Registery)에서 제공하는 distroless로 변경된다. 1. 디렉터리 살펴보기 기존 방법과 비교하면 build-in-host.sh 라는 추가된 파일이 있다. 2. build-in-host.sh 확인 #!/usr/bin/env bash sudo apt install -y openjdk-8-jdk ./mvnw clean package d..