Programming 51

CI/CD, Jenkins, ArgoCD / GitOps 고급 전략

GitOps 고급 전략GitOps 기본 원리는 "Git에 있는 YAML 파일이 클러스터의 정답 상태"라는 개념하지만 실제 운영 환경에서는 단순히 YAML 한두개로 배포하는 것 보다 더 많은 것들을 고려해야 함GitOps 고급 전략 핵심 요소분리된 저장소 구조 : 운영용 Git과 개발용 Git을 분리해서 관리환경 분리(dev/stage/prod) : 각 환경에 맞는 YAML/Helm 설정 따로 관리Kustomize/Helm 활용 : 환경별 커스터마이징을 템플릿 형태로자동 vs 수동 동기화 전략 : 운영 환경은 수동 승인으로 안정성 확보PR 기반 배포 승인 흐름 : GitHub Pull Request로 변경 내용 리뷰 후 병합 -> 배포예시로 이해음식 배달 앱을 운영하는 회사가 있다고 했을 때개발 중인 기능..

CI/CD, Jenkins, ArgoCD

CI/CD란?CI (지속적 통합, Continuous Integration)개발자들이 코드를 자주(하루에도 여러 번) 병합하고 자동 테스트하는 과정목적 : 코드 충돌 최소화 + 버그 빨리 발견코드 변경 → 자동 빌드/테스트CD (지속적 배포, Continuous Delivey/Deployment)CI 후 자동으로 스테이징 또는 운영 서버에 배포하는 과정빌드된 코드 → 자동으로 스테이징/운영 환경에 배포Continuous Delivery : 운영 배포 전 사람의 승인 필요Continuous Deployment : 운영까지 완전 자동화비유공장에서 제품을 조립한 뒤 테스트하고 자동으로 포장하고 출하하는 시스템CI : 부품 조립 + 품질 검사CD : 완제품 포장 -> 자동 배송실무에서 CI/CD가 없으면?개발자..

Service Mesh와 Istio

Service Mesh란?마이크로서비스 아키텍처에서 서비스들 간 통신을 제어하고 관찰하는 인프라 계층 마이크로서비스들이 서로 통신할 때 그 사이의 연결, 보안, 트래픽 분산, 모니터링 등을 처리해주는 인프라 기술 일반적으로 마이크로서비스는 직접 서로 HTTP 요청을 주고받으며 통신하는데, 이 과정에서 발생하는 복잡한 네트워크 문제를 개발자가 직접 처리하는 대신, Service Mesh가 대신 처리해주는 구조 e.g. 서비스 A → 서비스 B 호출 시, 직접 통신이 아닌 사이드카 프록시(e.g. Envoy)를 통해 통신마이크로서비스를 사람에, 서로 주고받는 요청을 말이라고 했을 때,사람들끼리 직접 말로 의사소통하면 말이 헷갈릴 수도 있고, 오해가 생기거나 도청 같은 위험도 있음그래서 사이에 통역사(= 프록..

컨테이너 기반 배포 전략들

K8s 기본 배포 전략 : Rolling Update새 버전의 배포kubectl set image deploy order order=order:v2바로 전 버전으로의 롤백 (복구)kubectl rollout undo deploy order히스토리 보기kubectl rollout history deploy order특정 버전으로 복구kubectl rollout undo deploy order --to-revision 2 Canary 배포Canary 배포 전략의 버전 분기 처리 방법Edge Gateway가 사용자 그룹, 트래픽에 따라 적절한 서비스로 전달Argo Rollouts를 사용한 Canary 배포Deploy 명령어kubectl argo rollouts set image rollouts-demo ord..

GitOps

[KT] AIVLE SCHOOL 61일차 GitOps 란?클라우드 네이티브를 위한 운영 모델데이터 관리 원칙 중 하나인 단일 진실 원천(Single Source oF Truth, SSOT) 개념으로, 특정 데이터의 정확하고 신뢰할 수 있는 하나의 버전만 시스템 전체에 존재한다는 개념모든 시스템 구성 요소가 동일한 데이터 소스를 참조하므로 데이터의 일관성이 유지되고 정확성과 관리 효율성 증대GitOps의 원칙모든 시스템은 선언적으로 관리되어야 한다.쿠버네티스의 mainfest들은 모두 선언적으로 작성되었고, 이를 Git로 관리한다면 versioning과 같은 Git의 장점과 더불어, SSOT(single source of truth)를 구축시스템의 상태는 Git의 버전을 따라간다.Git에 저장된 쿠버네티스..

CI/CD

[KT] AIVLE SCHOOL 60일차CI/CD 란?DevOps에서의 지속적인 소프트웨어 개발 생명주기CI/CD 파이프라인은 새 버전의 소프트웨어를 제공하기 위해 수행해야 할 일련의 단계개발자가 코드를 지속적으로 배포할 수 있어야 하는 필요성초기 단계에서 버그를 감지하고 빈번한 코드 커밋으로 인한 이슈 방지CI/CD는 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 자동화와 모니터링을 제공하는 프로세스들의 묶음을 의미Continuous Integration개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미개발코드를 통합할 때의 문제점을 해결하고, 자..

Service Mash

[KT] AIVLE SCHOOL 59일차 Service MeshService Mesh는 마이크로서비스간 통신(네트워크)을 위한 애플리케이션 레벨의 인프라 계층통신 및 네트워크 기능을 비즈니스 로직과 분리한 네트워크 통신 인프라서비스 메시에서의 호출은 마이크로서비스 개별 인프라 계층 'Sidecar'라고 하는 Proxy를 통해 수행Sidecar메인 애플리케이션 컨테이너와 함께 배포되는 보조 컨테이너Pod 내부에서 동일한 네임스페이스, 볼륨, 네트워크를 공유로그 수집모니터링프록시/보안MSA의 Service Mesh 커버리지내부 아키텍처개별 마이크로서비스 영역으로 가능한 간결, 명확하고 단순하게 구현하는 데 중점외부 아키텍처마이크로서비스 외부를 아우르는 영역트래픽 통제 및 서비스간 어떻게 커뮤니케이션하는가 등..

쿠버네티스 (Kubernetes)

[KT] AIVLE SCHOOL 55일차 Container Orchestration여러 개의 컨테이너를 자동으로 배포, 실행, 관리, 확장, 복구하는 기술수많은 컨테이너를 효율적으로 운영하는 자동화 기술"수백 개의 컨테이너를 한 명의 관리자가 일일이 수동으로 운영하는 대신, 자동으로 조율해주는 시스템"기능 설명 자동 배포 및 스케줄링컨테이너를 클러스터 내에서 최적의 위치에 자동 배치자동 확장/축소트래픽 변화에 따라 컨테이너 수 조절자가 복구(Self-healing)죽은 컨테이너 자동 재시작서비스 디스커버리 및 로드 밸런싱컨테이너 간 통신, 외부 노출을 쉽게롤링 업데이트와 롤백앱 무중단 배포 및 되돌리기 지원특징컨테이너 자동 배치 및 복제컨테이너 그룹에 대한 로드 밸런싱컨테이너 장애 복구클러스터 외부에 서..

어플리케이션 배포 전략별 비교

배포 전략 Zero Downtime 실트래픽테스트 타겟 유저테스트 설정복잡도 비용(Cloud Cost) 사용자영향 롤백용이성 설명 Recreate 중단 발생 불가능 불가능 매우 쉬움 낮음 크게 발생 느림 기존 버전 종료 후 새 버전 배포 Ramped 가능 어려움 불가능 보통 중간 작음 쉬움 버전 A를 점진적으로 B로 교체 Blue/Green 가능 가능 불가능 복잡 높음 ..

Docker

[KT] AIVLE SCHOOL 55일차 DockerGo 언어로 작성된 "The future of linux Containers"Container based프로세스 격리 기술오픈소스 가상화 플랫폼Docker Image가상머신 생성 시 사용하는 ISO와 유사한 개념의 이미지여러 개의 층으로 된 바이너리 파일로 존재컨테이너 생성 시 읽기 전용으로 사용도커 명령어로 레지스트리부터 다운로드 가능apexacme/ubuntu:18.04저장소 이름 : 이미지가 저장된 장소, 이름이 없으면 도커 허브(Docker Hub)로 인식, apexacme이미지 이름 : 이미지 이름, 생략 불가, ubuntu이미지 버전 : 이미지 버전 정보, 생략 시 latest로 인식, 18.04경로 샘플Azure 이미지 URL: gdhong..