(8) Component 동작으로 이해하기

2025. 6. 8. 14:40·🌱 인프런/⚓ 쿠버네티스 어나더 클래스 (지상편)

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

 

1. 전체 개요

출처URL : https://inf.run/k7mF

 

1-1. 쿠버네티스 구축 개요

  1. VM에 마스터 노드 생성
    1. 마스터 노드는 클러스터 전체를 제어하는 중심 노드
  2. 다음 구성요소 설치
    1. kubectl : CLI 도구, API 호출용
    2. kubeadm : 클러스터 설치 및 초기화 도구
    3. kubelet : 각 노드에서 Pod를 실행/관리
    4. container runtime : 실제 컨테이너 생성기 (ex: contianerd)
  3. 클러스터 초기화
    1. kubeadm init 명령을 통해 클러스터 생성
    2. 내부적으로 여러 컴포넌트 생성하는 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

출처URL : https://inf.run/k7mF

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

 

2-2. Service 동작

출처URL : https://inf.run/k7mF

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

 

2-3. Secret 동작

출처URL : https://inf.run/k7mF

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

 

2-4. HPA 동작

출처URL : https://inf.run/k7mF

  1. 현재 컨테이너에 대한 자원 사용량은 containerd 가 알고 있다
  2. kubelet 이 CPU 와 Memory 를 10초에 한 번씩 조회
  3. 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
'🌱 인프런/⚓ 쿠버네티스 어나더 클래스 (지상편)' 카테고리의 다른 글
  • [미션3] Application 기능으로 이해하기 - Configmap, Secret > 응용과제
  • [미션2] Application 기능으로 이해하기 - Probe > 응용과제
  • (7) PV/PVC, Deployment, Service, HPA
  • (6) Configmap, Secret 이해하기
말린
말린
  • 말린
    개발새발
    말린
  • 전체
    오늘
    어제
    • 분류 전체보기 (58)
      • 👩🏻‍💻 알고리즘 (17)
        • 백준 (17)
      • ✒️ 글또 10기 (6)
      • 🗃️ 데이터베이스 (5)
      • ☕️ 자바 (1)
      • 🌱 인프런 (28)
        • ⚓ 쿠버네티스 어나더 클래스 (지상편) (22)
        • ☕️ 김영한의 실전 자바 - 중급 1편 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
말린
(8) Component 동작으로 이해하기
상단으로

티스토리툴바