⚓ 쿠버네티스 어나더 클래스 (지상편) - Spring 1, 2 을 듣고 작성하는 복습 블로그 입니다.
1. 전체 개요

1-1. 쿠버네티스 구축 개요
- VM에 마스터 노드 생성
- 마스터 노드는 클러스터 전체를 제어하는 중심 노드
- 다음 구성요소 설치
- kubectl : CLI 도구, API 호출용
- kubeadm : 클러스터 설치 및 초기화 도구
- kubelet : 각 노드에서 Pod를 실행/관리
- container runtime : 실제 컨테이너 생성기 (ex: contianerd)
- 클러스터 초기화
- kubeadm init 명령을 통해 클러스터 생성
- 내부적으로 여러 컴포넌트 생성하는 Pod 정의 YAML 을 실행하여 Control Plane 구성
1-2. 워커 노드 구성
- 다른 VM을 워커 노드로 구성 가능
- 마스터 노드에 설치했던 구성요소와 동일한 툴들 설치
- kubeadm join 명령어로 마스터 노드 연결
- 워커 노드는 클러스터에 조인되면, 자신만의 컴포넌트 영역이 생성
- 사용자가 만든 애플리케이션은 모두 워커 노드에 배포
- 리소스가 부족하면 워커 노드를 수평으로 추가한다
1-3. Addon Pod
쿠버네티스 기본 기능을 확장시키기 위한 필수 구성 요소
- metrics-server
- coredns
- calico
- kubernates-dashbnoard
1-4. 인증 및 통신 흐름
- /root/.kube/config 파일에 인증 정보 저장됨
- kubectl → kube-apiserver로 요청 전송
- kube-apiserver → etcd에 리소스(객체) 데이터 저장
- etcd는 Kubernetes의 단일 저장소 (Key-Value DB) 역할
- Controller (타 Controller 나 Object 를 제어) : HPA, Deployment, ReplicaSet
- Object (하나의 인프라 개념으로 단독 기능) : Service, Pod, Configmap, Secret, PVC
- Controller 와 Object 를 합쳐서 Resource 로 부른다
- 위 리소스들은 Control Plane Component 라는 Pod 에 의해서 동작
- 실제 컨테이너는 container d 가 생성
- 쿠버네티스는 컨테이너 생성 요청만
2. 각 리소스별 동작 (Probe, Service, Secret, HPA)
2-1. Pod 생성 및 probe

- Deployment 생성
- 대시보드나 kubectl 로 만들 수 있다
- 똑같이 kube-apiserver 가 API 를 받는다
- etcd 를 통해서 데이터를 저장
- Deployment 가 조회되거나 대시보드에 나타난다
- kube-controller-manger는 계속 Database 모니터링
- Deployment 가 조회되면, ReplicaSet을 생성하라는 API
- 생성된 ReplicaSet을 보고 Pod 를 생성하라는 API 를 호출
- Pod 라는 데이터가 데이터베이스에 만들어짐
- 아직 데이터만 있는거지 실제 컨테이너가 만들어진 것은 아님
- kube-scheduler 는 kube-apiserver를 통해 노드 자원을 모니터링
- 데이터베이스에 Pod 가 있는게 확인 → Pod 를 띄울 노드를 스케줄링
- Pod 안의 사용자가 설정해놓은 내용 참고
- kubelet 이 kube-apiserver를 통해 자신의 노드 정보가 있는 Pod를 모니터링
- 변경사항이 있으면 contianer runtime 에 컨테이너 생성 요청
- kubelet 이 probe 설정에 맞게 컨테이너로 헬스체크 API 를 주기적 요청
2-2. Service 동작

- nodePort 타입으로 서비스를 생성후 Pod 에 연결
- kubelet 이 kube-proxy 한테 네트워크를 생성해달라고 요청
- kube-proxy 는 iptables 에 내용 추가
- 리눅스로 들어오는 모든 패킷 관리
- 사용자가 API 를 호출하면 컨테이너로 트래픽 전달
- calico 가 트래픽 전달
2-3. Secret 동작

- 컨테이너 내부 파일들은 노드의 메모리 영역에 마운팅
- 위 메모리는 전원 OFF 시 데이터가 삭제되는 영역
- 물리적으로 디스크를 변경해야 되는 일이 생겼을 때 복구를하더라도 일반 데이터처럼 복구 X
- 누가 내 디스크를 탈취해가더라도 보안에 안전
- Secret 이 메모리에 저장되기 때문에 많이 만들면 노드의 메모리가 부족
- 내용 수정시 바로 변경되지 않고, kubelet 이 주기적으로 체크를 하고 있다가 변경사항이 생기면 업데이트
- 조금의 딜레이가 있다
2-4. HPA 동작

- 현재 컨테이너에 대한 자원 사용량은 containerd 가 알고 있다
- kubelet 이 CPU 와 Memory 를 10초에 한 번씩 조회
- metrics-server 를 설치해야 주기적으로 사용량 수집 (60초)
- kube-controller-manager 가 HPA 의 임계값 및 매트릭 확인 (15초)
- 확인에 따라 스케일링 발생 (반응시간 : 1~85초)
3. 주요 컴포넌트 로그 확인
3-1. 주요 컴포넌트 구성
➡️ Resource 확인
kubectl api-resources

- 리소스 이름 (NAME), 약어 (SHORTNAMES), 버전 정보 (APIVERSION)
- 네임스페이스 (NAMESPACE)
- false ⇒ cluster level 의 리소스
➡️ Cluster 주요 컴포넌트 로그 확인
// 주요 컴포넌트 로그 보기 (kube-system)
kubectl get pods -n kube-system
kubectl logs -n kube-system etcd-k8s-master
kubectl logs -n kube-system kube-scheduler-k8s-master
kubectl logs -n kube-system kube-apiserver-k8s-master

설치가 잘 된 경우에는 확인해볼 경우가 없다.
➡️ Master Node 파일 위치
// 쿠버네티스 인증서 위치
cd /etc/kubernetes
ls /root/.kube/config
⇒ /root/.kube/config
- admin.conf 파일이 kube-apiserver 에 접속할 수 있는 인증서
- 이 인증서 내용을 /root/.kube/config 위치에 쿠버네티스를 설치할 때 복사를 해놓음
- kubectl 이 이걸 참조해서 API 를 호출
// Control Plane Component Pod 생성 yaml 파일 위치
ls /etc/kubernetes/manifests
⇒ etcd.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml
- Controler Plane Component 을 띄울 yaml 파일들
// 전체 Pod 로그
/var/log/pods/<namespace_<pod-name>_<uid>/<number>.log
/var/log/containers/<pod-name>_<namespace>_<container-name>_<container-id>.log
cd /var/log/pods/
ls

- /var/log/pods/ 에 마스터 노드 위에 올라가는 모든 Pod 들의 로그가 저장
- /var/log/containers/ 도 컨테이너 별로도 파일이 만들어진다
cd /var/log/pods/
ls -al

- Pod 폴더에 있는 데이터에 링크로 연결이 되어 있다
➡️ 트러블 슈팅
쿠버네티스를 하다가 잘 안되는게 있을 때 아래 명령어들을 날려보면 된다
kubelet 상태 확인
systemctl status kubelet
journalctl -u kubelet | tail -10
containerd 상태 확인
systemctl status containerd
journalctl -u containerd | tail -10
노드 상태 확인
kubectl get nodes -o wide
kubectl describe node k8s-master
Pod 상태 확인
kubectl get pods -A -o wide
Event 확인 (기본값 : 1h)
kubectl get events -A
kubectl events -n anotherclass-123 --types=Warning
Log 확인
kubectl logs -n anotherclass-123 api-tester-1231-755676484f-rlpl5 --tail 10
2. Service 동작
iptables -t nat -L KUBE-NODEPORTS -n | column -t

- iptables 에서 nodePort 매핑 내용 확인 명령어
- target : 목적지
'🌱 인프런 > ⚓ 쿠버네티스 어나더 클래스 (지상편)' 카테고리의 다른 글
| [미션3] Application 기능으로 이해하기 - Configmap, Secret > 응용과제 (0) | 2025.06.08 |
|---|---|
| [미션2] Application 기능으로 이해하기 - Probe > 응용과제 (0) | 2025.06.08 |
| (7) PV/PVC, Deployment, Service, HPA (1) | 2025.06.08 |
| (6) Configmap, Secret 이해하기 (2) | 2025.06.08 |
| (5) Probe 이해하기 (1) | 2025.06.02 |