3.1 쿠버네티스 이해하기

JEONGYUJIN·5일 전
0

인프라 스터디

목록 보기
3/4

1. 쿠버네티스 개요

컨테이너 오케스트레이션 이해

🔍 컨테이너 오케스트레이션이란?
복잡한 단계를 관리하고 요소들의 유기적인 관계를 미리 정의해 손쉽게 사용하도록 서비스를 제공하는 것으로, 다수의 컨테이너를 유기적으로 연결, 실행, 종료하고 상태를 추적 및 보존하여 안정적인 사용을 보장합니다.

상세 설명

개념설명
컨테이너애플리케이션과 그 실행에 필요한 모든 것을 포함하는 독립적인 실행 단위로, 가상 머신보다 가볍고 빠르게 실행됩니다
오케스트레이션여러 컨테이너의 배포, 스케줄링, 네트워킹, 확장, 장애 복구 등을 자동화하는 것을 의미합니다
수동 관리의 한계수많은 컨테이너를 수동으로 관리하는 것은 매우 어렵고 오류가 발생하기 쉽습니다
오케스트레이션의 이점컨테이너 관리의 복잡성을 줄이고, 자동화를 통해 효율성과 안정성을 높이며 장애 발생 시 자동 복구 기능으로 서비스 중단을 최소화합니다
쿠버네티스가장 널리 사용되는 오픈소스 컨테이너 오케스트레이션 시스템으로, 다양한 기능과 확장성을 제공합니다

💡 여러 개의 웹 서버 컨테이너를 운영할 때, 컨테이너 오케스트레이션은 이러한 컨테이너들을 관리하고, 하나의 컨테이너가 고장나면 자동으로 다른 컨테이너를 시작하여 서비스 중단을 방지합니다. 트래픽이 증가하면 자동으로 컨테이너 수를 늘리고, 감소하면 줄여 자원 낭비를 방지합니다.

쿠버네티스 선택 이유

쿠버네티스는 다른 솔루션(Docker Swarm, Mesos, Nomad)보다 시작은 어렵지만, 다양한 기능과 활발한 생태계, 벤더 및 오픈소스 진영의 광범위한 지원으로 대규모 환경에 적합합니다.

쿠버네티스의 장점

  • 확장성 시스템 크기나 처리량을 쉽게 늘릴 수 있는 능력
  • 안정성 시스템이 안정적으로 동작하고 장애에 잘 대처하는 능력
  • 풍부한 생태계 다양한 개발 도구, 라이브러리, 커뮤니티 지원
  • 벤더 지원 다양한 상용 업체들의 지원
  • 컨테이너화된 인프라 통합 IT 인프라 자체를 컨테이너화하고 관련 제품군과 통합 용이

솔루션 비교

특성 쿠버네티스 Docker Swarm Mesos Nomad
학습 난이도 높음 낮음 중간 중간
확장성 매우 높음 중간 높음 높음
생태계 매우 활발 활발 중간 성장 중
대규모 환경 적합성 매우 높음 중간 높음 높음

쿠버네티스 구성 방법

쿠버네티스 클러스터 구성 방법은 크게 다음과 같이 세 가지로 나눌 수 있습니다:

  1. 퍼블릭 클라우드 업체의 관리형 쿠버네티스

    • AWS EKS, Google Kubernetes Engine(GKE), Azure Kubernetes Service(AKS)
    • 장점: 간편하고 관리가 용이함
    • 단점: 클라우드 업체에 종속될 수 있음
  2. 설치형 쿠버네티스 플랫폼

    • Rancher, OpenShift 등
    • 장점: 관리형 서비스보다 유연성이 높음
    • 단점: 전문적인 지식이 필요함
  3. 자동 구성 솔루션

    • kubeadm, kops, KRIB, kubespray 등
    • 특히 kubeadm은 사용자 설정이 용이하고 온프레미스와 클라우드 모두 지원하며 학습에 적합함

2. 쿠버네티스 환경 구축

Vagrant 기반 환경 설정

🛠️ Vagrant는 가상 머신을 관리하는 도구로 쿠버네티스 클러스터 구축 환경을 제공합니다.

  • VirtualBox Vagrant와 함께 사용되는 가상화 소프트웨어
  • vagrant up 명령어 | Vagrantfile에 정의된 가상 머신들을 생성하고 쿠버네티스 클러스터를 자동으로 구성

가상 머신 요구사항

쿠버네티스 클러스터를 원활하게 운영하기 위해서는 충분한 시스템 리소스가 필요합니다:

  • 마스터 노드- 최소 2GB RAM, 2 CPU 코어
  • 워커 노드- 노드당 최소 1GB RAM, 1 CPU 코어
  • 모든 노드- 최소 20GB 디스크 공간

필요 파일 다운로드 및 확인

  1. Github Repository: https://github.com/sysnet4admin/_Book_k8sInfra 에서 필요한 파일들을 다운로드
  2. 파일 구조
    ch3/3.1.3 폴더에 다음 파일들이 존재해야 함
    • config.sh
    • install_pkg.sh
    • master_node.sh
    • work_nodes.sh
    • Vagrantfile

Vagrantfile 및 스크립트 분석

Vagrantfile

Vagrantfile은 가상 머신 설정(CPU, 메모리, 네트워크, 프로비저닝 등)을 정의하는 파일입니다.

  • N 변수 worker node 개수를 지정
  • Ver 변수 Kubernetes 버전을 지정

주요 스크립트 파일

스크립트역할
config.shkubeadm 설치를 위한 사전 설정(swap 비활성화, repo 설정, SELinux 설정, iptables 설정, hosts 설정, DNS 설정 등)
install_pkg.sh필요한 패키지(docker, kubectl, kubelet, kubeadm) 설치 및 소스 코드 다운로드
master_node.sh마스터 노드 설정 및 Calico 네트워크 설정 수행
work_nodes.sh워커 노드를 마스터 노드에 조인
# 예시: 마스터 노드 초기화 (master_node.sh 일부)
kubeadm init --pod-network-cidr=192.168.0.0/16

# Calico 네트워크 설정
kubectl apply -f https://docs.projectcalico.org/v3.18/manifests/calico.yaml

# 워커 노드 조인 (work_nodes.sh 일부)
kubeadm join <마스터 노드의 주소>:<마스터 노드의 토큰>

3. 쿠버네티스 구성 요소

파드 배포 중심 구성 요소

구성 요소역할
kubectl클러스터에 명령을 내리는 CLI 도구. API 서버와 통신
API 서버클러스터의 중심, 모든 구성 요소의 통신 중계 및 etcd와 통신
etcd클러스터 상태 정보 저장소 (key-value store)
Calico사용된 CNI (Container Network Interface). 컨테이너 네트워크 구성

파드 생명주기 분석

📌 선언적 시스템 쿠버네티스의 각 구성 요소는 원하는 상태(desired status)를 추구합니다. API 서버와 etcd가 핵심입니다.

파드 생성 과정

  1. kubectl 요청
  2. API 서버 처리
  3. etcd에 상태 기록
  4. 컨트롤러 매니저 작업
  5. 스케줄러가 노드 배정
  6. kubelet이 파드 생성 지시
  7. 컨테이너 런타임이 실제 파드 생성

워크플로우 구조

kubelet과 컨테이너 런타임은 절차적(워크플로우) 방식으로 동작합니다. 이는 쿠버네티스가 복잡한 애플리케이션의 배포와 생명주기를 효과적으로 관리할 수 있게 해줍니다.

구성 요소 기능 검증

구성 요소검증 방법문제 발생 시 증상
kubectl--kubeconfig 옵션으로 클러스터 정보 지정 필요원격 접속 불가
kubeletsystemctl status kubelet로 상태 확인파드 생성 및 관리 불가능
kube-proxybr_netfilter 모듈 확인파드 통신 불가능 (Connection timed out)
# kubelet 상태 확인
systemctl status kubelet

# 파드 네트워크 연결 테스트
kubectl exec -it <pod-name> -- ping <target-ip>

⚠️ 주의사항
쿠버네티스 구성 요소 간의 유기적인 관계를 이해하고, 각 구성 요소의 상태를 주기적으로 확인하는 것이 안정적인 클러스터 운영에 필수적입니다.

profile
일단 하고 보자 (펠리컨적 마인드 ㅠㅠ)

0개의 댓글

관련 채용 정보