Skip to main content

[Tech 020] CI/CD를 이용한 빠르고 안정적인 컨테이너 배포 1탄

Kubernetes의 정의

Kubernetes(*k8s)는 컨테이너화된 애플리케이션을 어디서나 배포, 확장, 관리할 수 있는 오픈소스 시스템입니다.

*k8s – ’K’와’s’ 사이의 문자 수를 나타내는 8을 표현하여 k8s로 줄여서 부릅니다.

컨테이너 운영의 장점

1. 이식성(Portability)
  • 독립성: 애플리케이션과 서비스를 호스팅하는 머신과 분리하여, 호스트 OS와 독립적인 환경을 제공합니다.
  • 호환성: 호스트 OS와 상관없이 애플리케이션을 배포하므로, 다양한 환경에서 쉽게 실행할 수 있습니다.
2. 효율성(Efficiency)
  • 가볍고 빠른 배포: 컨테이너를 실행하기 위해 필요한 모든 파일과 의존성을 포함하므로, 빠르고 쉽게 배포할 수 있습니다.
  • 자원 사용량 최적화: 컨테이너를 사용하여 애플리케이션을 실행하면 가상화된 환경에서 실행되기 때문에 더 적은 자원을 사용하며, 더 많은 서비스를 제공할 수 있습니다.
3. 보안성(Security)
  • 격리성: 애플리케이션을 실행하기 위한 환경을 격리시켜, 다른 애플리케이션에 영향을 미치지 않습니다.
  • 이미지 보안: 컨테이너 이미지는 레지스트리를 통해 분배되므로, 안전한 이미지를 사용하여 애플리케이션을 실행할 수 있습니다.
4. 확장성(Scalability)
  • 수평 확장: 컨테이너 기술을 이용하면, 쉽게 서비스 인스턴스를 추가하거나 제거할 수 있으므로, 더 많은 요청을 처리할 수 있습니다.

Docker와 Kubernetes

처음 컨테이너 운영을 고려한다면 Docker와 Kubernetes 사이에서 많은 고민을 합니다.
Docker만의 장점도 있지만 Docker 대신 Kubernetes 를 사용했을 때의 장점 또한 많이 존재합니다.
K8s의 장점에 대해서 알아 보겠습니다.

Why k8s?

Docker Kubernetes
컨테이너 관리 O O
모니터링 O O
배포 관리 (무중단 배포) O O
Self-Healing X O
비밀 관리 X O
로드 밸런싱 (LB) X O
Auto-Scaling X O

Docker의 부족한 유연성과 기능을 해결할 수 있는 컨테이너 관리 기술이 Kubernetes입니다.

어떤 상황에 k8s를 사용할 것인가?

  • 마이크로서비스를 컨테이너 방식으로 운영하는 조직이 확장성을 고려해야할 때
  • 무중단 서비스, 즉 고가용성을 제공해야할 때
  • 대규모 분산 시스템, 수백~수천 개의 컨테이너 관리가 필요할 때
  • 그 밖에 다양한 기능들이 필요할 때: 자가 치유, 배치 실행, 구성 관리, 로드 밸런싱

Kubernetes 구조 소개

Master Node, Worker Node 로 구분

Master Node

kube-apiserver : API 서버는 쿠버네티스의 고가용성 보장
  • 인스턴스간의 트래픽을 균형있게 조절
  • 인스턴스 배포 확장
etcd : 모든 클러스터 데이터를 담아 둘 수 있는 키-값 저장소
  • 데이터베이스 역할
  • 일관성 및 고가용성 보장
kube-scheduler : 노드가 배정 되지 않은 파드를 감지 실행시킬 노드를 배치 역할
  • 파드의 스펙과 요구사항을 분석하여 적절한 노드 선택
  • 클러스터 자원 사용률 최적화
kube-controller-manager : 쿠버네티스가 일관된 상태를 유지하고 안정적인 운영되도록 지원 역할
  • 레플리카셋 컨트롤러 : 레플리카셋의 정의된 파드 수 유지
  • 엔드포인트 컨트롤러 : 서비스와 파드를 연결할 때 사용되는 엔드포인트 관리
  • 노드 컨트롤러 : 노드 상태 감시
  • 외 다양한 컨트롤러 존재

Worker Node

kubelet : 각 노드에서 실행중인 컨테이너와 관련된 모든 작업을 처리하고 관리
  • 컨테이너 생성
  • 상태 모니터링
kube proxy : 클러스터 내부에서 외부 사용자와 서비스 연결 역할
  • Service IP – Pod IP 맵핑을 통해 네트워크 통신
  • 로드 밸런싱
container runtime : 컨테이너 실행 담당
  • CRI-O : 현재 디폴트 컨테이너 런타임으로 다른 런타임의 비해 경량화된 런타임
  • cri-dockerd : Docker Engine을 사용하는 런타임 (1.24버전부터 지원 종료)

GKE(Google Kubernetes Engine)

Google Cloud Platform에서 제공하는 완전 관리형 서비스로 사용자는 복잡한 Master Node를 관리를 신경 쓸 필요가 없어지고, 서비스를 확장하기에 용이해지기 때문에 K8s를 처음 도입한다면 추천하는 서비스입니다. 

또한 백업 서비스(Backup for GKE)를 제공하기 때문에 안정성까지 챙길 수 있습니다.

Kubernetes를 구축하는 방법

1. 자체서버 환경에서 설치
2. 클라우드 서버 인프라 위에 설치
3. GKE(GCP), AKS(Azure), EKS(AWS)등의 CSP 사용

→  3번째 방법에 해당

제공 서비스 구분 (on-premise, iaas, paas)

→  Managed K8s 사용 시 애플리케이션 배포에만 집중할 수 있습니다.

GKE의 장점은?

1. GKE는 확장성이 뛰어나며 Kubernetes 클러스터 관리의 여러 측면을 자동화 가능합니다.
  • Cloud Build & Cloud Deploy를 통한 배포 자동화 (CI/CD)
2. GKE는 Standard, Autopilot 구성을 선택 가능
  • Standard
    – Zonal, Regional Cluster 지원
    – Zonal Cluster 기준 Node 3대 이상으로 구성 시 SLA 99.5% 보장
    – Cluster수와 Worker Node 숫자 기준으로 비용 청구
  • Autopilot
    – Regional Cluster 만 지원
    – Node 관리를 GKE에서 지원하며 SLA 99.95% 보장
    – Standard와 달리 Pod 당 비용으로 청구
3. Backup for GKE
  • Backup for GKE는 GKE 클러스터에서 워크로드를 백업하고 복원할 수 있는 서비스

배포 자동화 (CI/CD)

CI/CD는 지속적인 통합 (Continuous Integration) 및 지속적인 배포 (Continuous Deployment)를 의미하는 용어로서, 소프트
웨어 개발 프로세스를 자동화하고 개발자가 빠르게 소프트웨어를 릴리스할 수 있도록 하는 방법입니다.

CI/CD는 또한 다수의 개발자들이 함께 작업하는 경우 코드 충돌 및 코드 변경으로 인한 문제를 예방할 수 있도록 도와줍니다.
이를 위해 자동화된 빌드 및 배포 프로세스를 사용하여 코드 변경 사항을 통합하는 역할을 합니다.

CI/CD 파이프 라인에 장점
  • 시장 출시 기간 단축 – 매번 테스트를 거친 후 배포 하기 때문에 사용자의 요구에 매주 혹은 매일 신속한 피드백 수렴이 가능하기 때문에 시장 경쟁력을 갖출 수 있습니다.
  • 위험 감소 – 배포과정에서 발생할 수 있는 휴먼에러를 최소화하고 테스트를 거친 배포이기 때문에 안정성이 높습니다.
  • 빌드 시간 단축 – 개별적으로 이미지를 빌드, 푸시하는 수작업 과정을 생략 할 수 있습니다.
GCP CI/CD

GCP product를 이용한 CI/CD 파이프라인 구성 아키텍처입니다.

자세한 설명은 링크 영상에서 다루고 있으니 참고바랍니다. (영상 링크)

이와 관련된 문의 사항이 있으시다면 클루커스 GCP팀으로 문의 바랍니다.

Secured By miniOrange