[k8s] 마스터노드 구성

타샤's 월드·2025년 4월 30일

단위

  • 클러스터 : 최종 배포 단위
  • 노드 : 서버 1개 , 물리적 구분
  • 네임스페이스 : 논리적 구분 (예를들어 namespace :default가 여러 노드에 분산 가능)
  • 파드 : 컨테이너의 집합- 가장 작은 배포 단위
  • 컨테이너:도커 실행 단위

1 클러스터 - many 마스터 노드

마스터 노드 구성

  • kube api-server : 매니징 관련 api 나 kubectl 명령어 여기 통함
    • 노올랍게도 kubectl은 restapi client (curl로 작동)
  • ETCD : 분산형 키밸류DB | configMap, secrets 모두 여기저장됨
  • controller-manager: 노드 상태 감시, 파드 갯수 유지 등
  • scheduler: 새 파드 생성시 어디 노드에 배치할지 정함

예시1) kubectl get nodes 명령어 입력

  • kube api-server가 응답을 받고 ETCD에서 노드 정보를 가져와서 터미널에 뿌려줌
    • authenticate user
    • validate request
    • retrieve data

예시2) 파드 생성
curl -x POST /api/v1/namespaces/default/pod ...

  • api server
    • authenticate user
    • validate request
    • 이 단계에서 노드를 배정받지 않은 신규 pod 생성
  • ETCD
    • ETCD server에 pod 정보 업데이트
  • 클라이언트
    • 터미널에 Pod Created!
  • Schdeuler
    • api server 모니터중 신규 pod 발견
    • 워커 노드에 pod 배정
    • api server 콜
  • api server
    • ETCD 서버에 배정받은 워크 노드 정보 업데이트
    • 워커노드 kubelet에 pod 정보 전송
  • 워커 노드 kubelet
    • pod 생성

예시3) HA(고가용성) 환경에서 ETCD

마스터 노드마다 있는 etcd 3개가 서로 통신하며 분산 DB 이룸.
Raft 합의 알고리즘(과반수)로 리더 선출하기 때문에 3개 이상의 마스터 노드가 필수

[Master Node 1]
 ├─ kube-apiserver
 ├─ controller-manager
 ├─ scheduler
 └─ etcd (etcd-0)

[Master Node 2]
 ├─ kube-apiserver
 ├─ controller-manager
 ├─ scheduler
 └─ etcd (etcd-1)

[Master Node 3]
 ├─ kube-apiserver
 ├─ controller-manager
 ├─ scheduler
 └─ etcd (etcd-2)

파일 위치

메니페스트 폴더: 모니터링되면서 이대로 계속 실행되는 폴더

/etc/kubernetes/manifest/kube-apiserver.yml

non kubeadmin 환경

/etc/systemd/system/kube-apiserver.service

profile
그때 그때 꽂힌것 하는 개발블로그

0개의 댓글