클라우드
📦 Kubernetes(K8s) 클러스터 구성과 CNI, YAML 완전 정리
Mostlove
2025. 5. 23. 17:41
728x90
반응형
☸️ 1. Kubernetes의 노드 역할 이해하기
쿠버네티스(Kubernetes)는 Master Node와 Worker 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) |
반응형