IT

[Dev]쿠버네티스 운영관리: DevOps 엔지니어를 위한 필수 가이드

H.Hoper 2024. 12. 2. 23:45

쿠버네티스는 현대 클라우드 네이티브 인프라의 핵심으로, 조직이 애플리케이션을 배포하고 관리하는 방식을 혁신하고 있습니다. 그러나 개발 환경에서 운영 환경으로 전환하는 것은 단순한 기술적 도전이 아니라 전략적 과정입니다. 쿠버네티스를 관리하거나 조금이라도 이해해야한다면 이 글은 당신에게 조금은 도움이 될 거 같습니다. Let's

 

🍎 쿠버네티스 환경: 단순한 컨테이너 그 이상

  • https://kubernetes.io/
  • 쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래한 것으로, K8s라는 표기는 "K"와 "s"와 그 사이에 있는 8글자를 나타내는 약식 표기로 구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화함
  • 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원
  • 조직의 애플리케이션을 배포, 관리, 확장하는 방식을 혁신하는 쿠버네티스

🍎 프로덕션 준비된 쿠버네티스의 핵심 요소

 

1. 코드로서의 인프라(IaC): 디지털 청사진

  • 코드로서의 인프라(IaC)는 디지털 인프라를 수동으로 설정하는 대신, 명확하고 재현 가능한 지침을 작성하여 버전 관리, 테스트, 일관된 배포를 가능케
  • 실제 효과:
    • 수동 구성 오류 제거
    • 일관된 환경 설정 보장
    • 빠르고 신뢰할 수 있는 인프라 배포 지원
    • 팀 간 협업 용이
  • 향상 방안: Terraform 또는 Ansible 같은 도구를 사용해 쿠버네티스 클러스터를 정의하고 배포하는 실질적인 예시 포함

2. 모니터링: 시스템의 조기 경보 시스템

  • 현재 상태를 보여주는 대시보드뿐만 아니라 잠재적 문제를 예측할 수 있는 종합적인 디지털 인프라 대시보드
  • 필수 구성 요소:
    • Prometheus: 실시간 메트릭 수집
    • Grafana: 직관적인 시각화
    • 중앙화된 로깅 솔루션
    • 자동화된 경고 메커니즘
  • 향상 방안: Prometheus 및 Grafana를 쿠버네티스 클러스터에 설정하는 방법 예시

3. 보안: 디지털 요새 구축

  • 스마트하고 적응 가능한 방어 메커니즘을 구축
  • 주요 전략:
    • 엄격한 역할 기반 액세스 제어(RBAC) 구현
    • 네트워크 정책을 사용해 트래픽 제어
    • 강력한 인증 메커니즘 통합
    • 컨테이너 이미지를 정기적으로 스캔하고 업데이트
    • 비밀 정보 안전하게 관리
  • 향상 방안: RBAC 정책 구현 예제를 제공하여 보안을 강화하는 방법

 

4. 배포 전략: 리스크 최소화

  • 블루-그린 배포 또는 카나리아 릴리스 같은 배포 기술

5. GitOps: 인프라를 위한 버전 관리

  • 인프라 구성을 소프트웨어 코드처럼 관리하는 GitOps
  • 모든 변경 사항은 추적 가능하고, 복구 가능하며, 버전 관리 시스템을 통해 관리
  • 향상 방안
    • Argo CD 또는 Flux 같은 도구를 사용해 쿠버네티스 배포를 자동화하는 방법

 

참고: https://kubernetes.io/ko/docs/home/

< 쿠버네티스 컴포넌트 기본 개념 >

  • 쿠버네티스 클러스터: 컴퓨터 집합인 컨트롤 플레인 컴포넌트노드 컴포넌트로 구성
  • 컨트롤프레인 컴포넌트: 클러스터에 관한 전반적인 결정(예를 들어, 스케줄링)을 수행하고 클러스터 이벤트를 감지하고 반응하는 관리 노드
    • kube-apiserver: 쿠버네티스 API를 노출하는 쿠버네티스 컨트롤 플레인 컴포넌트로 쿠버네티스 컨트롤 플레인의 프론트 엔드
    • etcd: 모든 클러스터 데이터를 담는 쿠버네티스 뒷단의 저장소로 사용되는 일관성·고가용성 키-값 저장소. 백업 계획
    • kube-scheduler: 노드가 배정되지 않은 새로 생성된 파드 를 감지하고, 실행할 노드를 선택하는 컨트롤 플레인 컴포넌트
    • kube-controller-manager: 노드 컨트롤러, 잡 컨트롤러, 엔드포인트슬라이스 컨트롤러, 서비스어카운트 컨트롤러
    • cloud-controller-manager: 클라우드별 컨트롤 로직을 포함하는 쿠버네티스 컨트롤 플레인 컴포넌트로 노드 컨트롤러, 라우트 컨트롤러, 서비스 컨트롤러
  • 노드컴포넌트:동작 중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공하며, 모든 노드 상에서 동작
    • kubelet: 클러스터의 각 노드에서 실행되는 에이전트
    • kube-proxy: 클러스터의 각 노드에서 실행되는 네트워크 프록시로, 쿠버네티스의 서비스 개념의 구현부. 노드의 네트워크 규칙을 유지 관리
    • 컨테이너 런타임: 컨테이너 실행을 담당하는 소프트웨어로 containerd, CRI-O와 같은 컨테이너 런타임 및 모든 Kubernetes CRI 지원
  • 애드온: 쿠버네티스 리소스(데몬셋, 디플로이먼트 등)를 이용하여 클러스터 기능을 구현
    • DNS: 쿠버네티스 서비스를 위해 DNS 레코드를 제공해주는 DNS 서버
    • 웹 UI (대시보드): 쿠버네티스 클러스터를 위한 범용의 웹 기반 UI
    • 컨테이너 리소스 모니터링: 중앙 데이터베이스 내의 컨테이너들에 대한 포괄적인 시계열 매트릭스를 기록하고 그 데이터를 열람하기 위한 UI를 제공
    • 클러스터-레벨 로깅:메커니즘은 검색/열람 인터페이스와 함께 중앙 로그 저장소에 컨테이너 로그를 저장