본문 바로가기
제니퍼 쿠버네티스

제니퍼 쿠버네티스 기술 노트

by 제니퍼소프트 2023. 8. 11.

1. EKS 블로그 연재 목표

현대 기업의 가장 중요한 문제는 고객의 다양한 요구를 빠르고 안정적으로 제공하는 것입니다. 빠른 대응과 안정적인 운영이라는 양립하기 어려운 문제를 해결해야 합니다. 쿠버네티스는 이러한 어려운 요구 사항을 오늘날 가장 잘 만족할 수 있는 컨테이너 오케스트레이션 솔루션입니다. 거의 모든 회사에서 적어도 테스트 용도로는 사용하고 있으며 특히 새로운 프로젝트에서는 당연히 포함되는 표준 솔루션, ‘defacto’로 여겨집니다.

 

하지만 기업 현장에서는 쿠버네티스의 진입 장벽이 높아 여전히 망설이는 것이 현실입니다. 고가의 비용을 지불하고 외부 솔루션을 도입한다든지 혹은 외주 프로젝트로 진행하는 경우도 많습니다. 그렇지만 쿠버네티스와 같이 핵심 솔루션은 내재화가 중요합니다. 단순히 도입하고 끝이 아니라 기업의 애플리케이션 특성에 따라 수많은 선택 사항이 있고 계속 변화하는 솔루션이라 외부에 의존하는 것은 앞으로 운영 환경에서 더욱 많은 문제점이 발생할 것이 자명합니다.

 

이번 블로그 시리즈에서 기업이 EKS(혹은 네이티브 쿠버네티스)를 도입, 운영하기 위해서 필요한 전체 기술 스택을 실습으로 제공하는 것을 목표로 합니다. 필자가 생각하기에 EKS를 가장 효과적으로 배우는 방법은 실제 기업에서 사용하고 있는 수준의 기술을 실습을 통하여 반복하여 익히는 것입니다. 쿠버네티스는 기업 애플리케이션 배포부터 하드웨어 인프라 운영까지 다루는 범위가 너무 방대하여 현업 담당자가 처음부터 자세한 원리와 이론을 배우려고 하면 현실적으로 시간의 제약이 너무 많습니다. 빠르게 실무에 적용 가능한 수준의 전체 관련 기술을 실습을 통하여 빠르게 배우고 부족하고 필요한 부분은 다시 한 번 자세하게 살펴보는 방법이 효과적입니다. 수학의 정석, 성문 종합 영어(네, 아재입니다.)를 배울 때 처음부터 깊이 파면 금방 지쳐서 10명 중 8,9명은 포기하는 것과 유사합니다.

먼저 끝까지 한 번 경험하고 나면 2번째부터는 자신감과 흥미가 생겨 학습의 속도가 더욱 빨라집니다.

 

독자가 쿠버네티스 담당자가 되었다 가정하고 쿠버네티스 신규 구축에 필요한 업무를 알려드립니다. 실제 경험을 바탕으로 현업에 필요한 업무를 실습으로 제공합니다. 현업 DevOps의 검증된 경험과 다양한 팁등을 풍부하게 제공합니다. 실 서비스에 적용 가능한 수준의 고가용성, 편의성, 비용 절감 등의 요소를 고려하여 목표 시스템을 구성하였습니다. 쿠버네티스 뿐만 아니라 CI/CD, 모니터링 등 다양한 에코시스템(헬름, ArgoCD, 인그레스, CSI Driver) 구성을 포함합니다.

 

모든 과정을 실습할 수 있도록 관련 소스 코드를 깃허브에 공유하였습니다. 깃허브 코드를 따라 독자분들도 설치를 진행하면 하루 안에 운영 가능한 수준의 클러스터를 구축할 수 있습니다.

 

2. 대상 독자 및 사전 준비 사항

리눅스와 네트워크에 대한 이해가 있으며 쿠버네티스의 기본 개념을 알고 있는 독자를 대상으로 합니다.

1인 혹은 2인 이하의 소규모 스타트업, 중소기업 또는 연구소/대기업 R&D 쿠버네티스 담당자

사전 준비 사항으로 AWS 계정과 Credential 등 AWS를 사용할 수 있는 환경과 개인 PC에 Visual Studio Code + 윈도우 사용자(Windows Subsystem for Linux WSL, Windows Terminal), 맥 사용자(iTerm2) 등 개발 환경이 구축되어 있어야 합니다.

3. 목차

  1. 쿠버네티스의 3가지 주요 특징과 네이티브 vs 매니지드 쿠버네티스 비교
    1. 의도한 상태(Desired State) 유지
    2. 코드를 이용한 리소스 관리
    3. 고가용성 구성 – 애완 동물과 가축(Pet vs Cattle) 개념
    4. 네이티브 vs 매니지드 쿠버네티스 솔루션 비교
  2. 테라폼을 이용한 EKS 설치 및 로컬 관리 환경 구축 
    1. 코드를 이용한 쿠버네티스 설치의 장점
    2. 테라폼의 이해 및 테라폼을 이용한 EKS 설치
    3. 로컬 Kubectl 운영 환경 설정 – Krew 플러그인 활용 및 쿠버네티스 환경 파일(~/.kube/config) 구성
  3. ArgoCD를 이용한 GitOps 시스템 구축
    1. GitOps와 단일 진실 원천(SSOT) 정의
    2. ArgoCD 설치
    3. Port-forward를 이용한 파드 접속
    4. ArgoCD를 이용하여 헬름 NGINX 애플리케이션 배포
  4. 쿠버네티스 네트워크 이해
    1. 기존 VM과 쿠버네티스 환경의 네트워크 차이점
    2. CNI(Container Network Interface)의 이해 
    3. 쿠버네티스 리소스 Service 주요 기능 실습 : 서비스 디스커버리, 로드밸런싱
  5. 쿠버네티스 인그레스 이해
    1. AWS Load Balancer Controller + External DNS Controller 활용
    2. AWS IRSA(Identity and Access Management Roles for Service Accounts) 이해
    3. AWS LB Controller 및 External DNS Controller 설치와 실습
      1. ArgoCD의 App of Apps 패턴을 이용한 애플리케이션 설치
      2. 인그레스 활용 실습
  6. CSI Driver를 이용한 쿠버네티스 스토리지 구성
    1. 쿠버네티스 휘발성 볼륨의 이해
    2. EKS CSI(Container Storage Interface) 구성을 통한 스토리지 실습
      1.  Persistent Volume, Persistent Volume Claim, Storage Class 설정
  7. 파드 오토스케일링 – Metrics-Server & HPA
    1. Autoscaling의 이해
    2. Metrics-Server 설치를 통한 자원 사용량 확인
    3. HPA(Horizontal Pod Autoscaler) 실습
  8. 노드 오토스케일링 – Karpenter
    1. Cluster AutoScaler 대비 Karpenter의 장점
    2. Karpenter 설치
    3. 카펜터 이용 노드 Autoscaling 실습
    4. 카펜터 대시보드를 이용한 상세 현황 파악
  9. 안전하게 카펜터를 사용하는 방법
    1. Graceful Shutdown – 안정적인 컨테이너 종료 설정
    2. PodDisruptionBudget – 파드 종료 정책 설정
    3. 노드 스케줄링 설정 – Drain, Cordon/Uncordon  
  10. Advanced POD Scheduling
    1. Taint, Tolerations, Node Affinity 설정
    2. Pod Anti-Affinity 설정 
  11. 헬름을 이용하여 퍼블릭 애플리케이션 설치
    1. 헬름 주요 구성 요소 3가지 : Chart, Templates 디렉토리, Value File
    2. 헬름 애플리케이션 설치 프로세스
    3. 헬름 차트를 이용한 Redis 설치
  12. 헬름 템플릿을 이용하여 In-House 커스텀 애플리케이션 설치 
    1. 기본 설정으로 헬름 차트 생성 – Helm Create
    2. 헬름 Starter Packs를 이용한 커스텀 애플리케이션 설치 실습
  13. 쿠버네티스 환경 변수 사용 및 Probe 설정
    1. 쿠버네티스 ​​ConfigMap, Secret의 이해와 실습
    2. Secret을 안전하게 보관하는 Sealed Secret 실습
    3. Readiness & Liveness Probe 실습
  14. 프로메테우스 – 쿠버네티스 모니터링 메트릭 시스템
    1. 프로메테우스 아키텍처
    2. All-In-One 프로메테우스-스택을 이용한 솔루션 설치
    3. 프로메테우스 GUI 웹콘솔 이해
  15. Grafana를 이용한 모니터링 대시보드 시스템 구축 
    1. 그라파나 기본 사용법의 이해
    2. ConfigMap을 이용한 대시보드 관리
    3. 다양한 커뮤니티 그라파나 대시보드 추가
    4. Alert 시스템 구성
  16. 로키(Loki) – 쿠버네티스 로그 시스템 
    1. CLI 기반의 간단한 파드 로그 확인 – Stern
    2. 시스템 구조 및 S3를 이용한 로키 MSA 설치
    3. LogQL를 이용한 쿠버네티스 로그 검색
  17. 깃허브 액션을 이용한 CI 시스템 구축 
    1. Self-Hosted 깃허브 Runners 추가
    2. 깃허브 액션 파일 설정
    3. 컨테이너 이미지 Build 및 Push 설정  
  18. EKS 버전 업그레이드
    1. 쿠버네티스 및 EKS 버전 정책
    2. 멀티 노드 구성 및 Rollout Restart를 이용한 EKS 무중단 업그레이드
  19. 쿠버네티스 보안 설정
    1. Polaris를 이용한 컨테이너, 파드 보안 취약점 확인
    2. 쿠버네티스 API Server 접근 제한 설정
  20. 편리한 운영을 위한 기타 도구 소개
    1. k9s – 명령어 기반의 쿠버네티스 모니터링
    2. Kubecost – FinOps를 위한 쿠버네티스 자원 사용량 및 비용 확인

좀 더 효과적으로 내용을 전달하기 위하여 목차는 사정에 따라 임의로 달라질 수 있습니다.