클라우드

📦 Kubernetes(K8s) 클러스터 구성과 CNI, YAML 완전 정리

Mostlove 2025. 5. 23. 17:41
728x90
반응형

☸️ 1. Kubernetes의 노드 역할 이해하기

쿠버네티스(Kubernetes)는 Master NodeWorker Node로 구성된다.

🧠 Master Node: 클러스터 제어 및 관리

구성 요소 설명
etcd key-value 형태로 클러스터 전체 상태 정보 저장
kube-apiserver 모든 API 요청을 받아 유효성 검사 및 처리
kube-scheduler 새로 생성된 파드를 실행할 노드 선택
kube-controller-manager 파드 상태를 지속적으로 관찰하고, 지정된 수 유지

🛠️ Worker Node: 실제 작업 수행

 

구성 요소  설명
kubelet 모든 노드에서 실행되는 에이전트로 파드 상태 보고
kube-proxy 네트워크 트래픽 라우팅 및 iptables 설정
container-runtime 컨테이너 실행 환경 (예: Docker, containerd, runc 등)

🌐 2. 노드 간 네트워크 구성 (CNI)

Cluster DNS인 CoreDNS는 각 노드 간 네트워크가 연결되어 있어야 정상 작동한다. 이를 위해 Pod Network Add-on, 즉 CNI(Container Network Interface) 구성 필요!

CNI의 특징

  • 각 노드 간 통신 가능
  • 일반적으로 VxLAN 기반 Overlay 네트워크 사용
  • 대표 CNI: Flannel, Calico, Weave

주요 CNI 종류 및 설치 방법

CNI 특징 설치 명령
Flannel 설치 간편, 기본 제공, 보안 기능 부족 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Calico 성능, 보안 우수, 가장 널리 사용됨 curl https://docs.projectcalico.org/archive/v3.17/manifests/calico.yaml -O 후 kubectl apply -f calico.yaml
Weave 암호화, 멀티캐스트 지원, 무거움 `kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version

🧩 3. Cgroup과 네트워크 드라이버

Kubernetes에서 컨테이너 자원을 제어하는 핵심 도구: Cgroup(Control Group)

  • 역할: CPU, 메모리 등 리소스를 컨테이너 단위로 제한
  • 컨테이너가 생성되면 자동으로 해당 컨테이너 전용 Cgroup 생성
  • 자식 프로세스도 해당 Cgroup에 속함
  • 마스터 노드에서 주로 사용

🔧 4. Vagrant 명령어 정리

가상머신 환경을 손쉽게 구성하는 Vagrant의 필수 명령어:

  • vagrant init: Vagrantfile 생성
  • vagrant up: VM 실행
  • vagrant ssh: SSH 접속
  • vagrant halt: VM 중지
  • vagrant destroy: VM 삭제
  • vagrant reload: 설정 반영하여 재시작
  • vagrant box list/add: 박스 확인 및 추가
  • vagrant provision: 설정 프로비저닝 수행
  • vagrant package: VM을 .box 파일로 패키징

🧪 5. kubectl 주요 명령어 정리

쿠버네티스 제어를 위한 CLI 도구 kubectl 주요 명령 정리 ✅

  • get, create, delete, apply, describe, logs, exec, port-forward, scale, rollout, drain, top, debug, label, annotate, kustomize 등 다양함
  • kubectl --help 또는 kubectl [명령어] --help로 도움말 확인 가능

🧾 6. YAML 파일 구조 및 사용법

쿠버네티스에서 오브젝트(파드, 서비스 등)를 생성할 때 YAML 파일로 선언 📄

기본 구성 항목

  • apiVersion: API 버전 (예: v1, apps/v1)
  • kind: 리소스 종류 (예: Pod, Service 등)
  • metadata: 이름, 라벨 등 메타데이터
  • spec: 구체적인 리소스 정의 (컨테이너, 포트 등)

예시 명령어

kubectl apply -f nginx.yml     # 생성
kubectl describe pods nginx    # 상세 정보 확인
kubectl delete -f nginx.yml    # 삭제

⚠️ 단일 객체 삭제 시엔 kubectl delete pod [이름] 사용


🔗 7. 내부 통신과 외부 노출 방식

  • 파드 간 통신: 같은 네임스페이스 내부 IP로 가능
  • 외부 노출 필요 시: Service 객체 생성 후 ClusterIP 사용
  • 하나의 파드에 여러 컨테이너 포함 가능 (Nginx + 로그 컨테이너 등)

파드는 쿠버네티스의 최소 배포 단위이며, 컨테이너들의 논리적 묶음으로 동작


✅ 요약

항목  핵심 내용
노드 종류 Master (제어), Worker (실행)
네트워크 CNI 설치 필요 (Flannel/Calico/Weave 등)
리소스 제어 Cgroup으로 컨테이너 리소스 관리
배포 방식 YAML 파일 기반 kubectl apply -f
외부 접근 Service 생성 필요
Vagrant(가상머신), kubectl(명령어 CLI)

 

반응형