[Kubernetes] 쿠버네티스 구성 & Pod 과정

2023. 12. 7. 11:18·Kubernetes
반응형

 

Kubernetes란?
컨테이너 오케스트레이션 도구로, 여러 컨테이너들의 생성과 생명주기를 관리하는 운영 프로그램이다.

 

쿠버네티스 컴포넌트

https://kubernetes.io/ko/docs/concepts/overview/components/



컨트롤 플레인(Control Plane)


 쿠버네티스 클러스터의 중앙 제어 및 관리를 담당하는 구성 요소들의 집합이다.
각 컴포넌트는 클러스터의 상태를 유지하고 파드의 생명주기를 관리하는 역할을 수행하며, 모든 프로세스의 중심은 API 서버를 중심으로 처리되며, 아래와 같이 구성되어 있다.

  • 쿠버네티스 API 서버
  • 컨트롤러 매니저 
  • 스케줄러
  • etcd

 

1. 쿠버네티스 API 서버 (kube-apiserver)

일종의 '문'이라고 생각하면 쉽다.
쿠버네티스 클러스터와의 모든 상호작용을 처리하는 '중심'점이며, 모든 요청을 검증하고 권한을 확인한다.
예를 들어, 사용자가 새로운 파드를 배포하고자 할 때, API 서버는 이 요청을 받아, 유효성 검사를 하고, 필요한 권한이 있는지 확인한 후 처리한다.

쿠버네티스 API 서버에서 유효성 검사란?

요청된 작업이 쿠버네티스 시스템 내에서 실행될 수 있는지를 결정하는 중요한 단계다
더 자세하게 말하자면

 

모든 쿠버네티스 리소스 및 객체에 대한 상호 작용을 처리한다.

  • 클러스터 상태 변경 및 사용자 명령 처리
  • 요청을 검증하고 권한을 확인
  • 유효한 경우 클러스터 상태를 업데이트하거나 리소스 반환



2. 컨트롤러 매니저 (kube-controller-manager)

클러스터 내의 다양한 컨트롤러를 실행하여 클러스터 상태를 관리하고 제어합니다.

  • 클러스터 상태를 감시하고 원하는 상태로 유지하기 위해 루프를 실행
  • 레플리케이션 컨트롤러, 엔드포인트 컨트롤러 등이 클러스터 상태를 관리하고 필요에 따라 파드를 생성 또는 제거



3. 스케줄러 (kube-scheduler)

새로운 파드를 클러스터 내의 노드에 배치하는 역할을 수행합니다.

  • 새로운 파드를 배치하기 위해 API 서버에서 미배치 파드 목록을 가져옵니다.
  • 각 노드의 상태와 리소스를 고려하여 새로운 파드를 적합한 노드에 할당합니다.
  • 파드가 할당되면 API 서버에 업데이트를 반영합니다.



4. etcd (분산 저장소)

클러스터의 모든 구성 요소가 공유하는 분산 키-값 저장소로, 클러스터의 상태와 설정 정보를 보관합니다.

  • 클러스터 상태 및 구성을 저장하고 조회하여 구성 요소 간에 일관성을 유지합니다.
  • API 서버, 컨트롤러 매니저 등이 etcd에 접근하여 클러스터의 현재 상태를 확인하고 업데이트합니다.




노드 컴포넌트 (Node Components)

  1. kubelet (쿠버네티스 에이전트)
    • 각 노드에서 실행되는 에이전트로, 마스터로부터 할당된 파드의 상태를 유지하고 노드 상태를 보고합니다.



  2. kube-proxy (쿠버네티스 프록시)
    • 파드 간 통신을 관리하고 로드 밸런싱을 수행합니다. 서비스에 대한 네트워크 규칙을 설정하여 외부와의 통신을 지원합니다.



  3. Container Runtime (컨테이너 런타임)
    • 컨테이너를 실행하는 데 사용되는 소프트웨어입니다. Docker, containerd, CRI-O 등이 일반적으로 사용됩니다.




기본적인 파드(Pod) 프로세스

모든 동작 과정은 API-Server를 중심으로 일어난다, APi Server를 조금 더 크게 그릴걸,,

  1. 파드 생성 (매니페스트 파일 작성)

    • 사용자는 파드를 생성하고자 하는 목적에 맞는 매니페스트 파일(YAML 또는 JSON 형식)을 작성합니다.
    • 매니페스트 파일에는 파드의 구성, 컨테이너 이미지, 환경 변수, 포트 등이 정의됩니다.



  2. API 서버로 매니페스트 파일 전달

    • 작성한 매니페스트 파일을 kubectl을 사용하여 쿠버네티스 클러스터의 API 서버에 제출합니다.
    • bashCopy code kubectl apply -f mypod.yaml



  3. API 서버에서 매니페스트 처리

    • API 서버는 제출된 매니페스트를 받아들이고 유효성을 검사합니다.
    • 매니페스트의 정보를 etcd라 불리는 분산 저장소에 저장하여 클러스터 상태를 업데이트합니다.



  4. Unscheduled Pod 이벤트 발생

    • API 서버에서는 새로운 파드가 생성되었지만 아직 스케줄링되지 않았다는 이벤트를 생성합니다.



  5. Unscheduled Pod 이벤트 감지

    • 컨트롤러 매니저는 이벤트를 감지하고 처리합니다.



  6. 노드 탐색

    • 스케줄러는 현재 클러스터 내의 모든 노드를 고려하여 어느 노드에 파드를 배치할지 결정합니다.



  7. 탐색한 노드를 전달

    • 스케줄러는 결정된 노드 정보를 API 서버에 전달합니다.



  8. 기록

    • API 서버는 etcd에 새로운 파드의 할당 정보를 업데이트하여 클러스터의 상태를 반영합니다.



  9. 노드에서 파드 생성 및 실행

    • 할당된 노드에서 Kubelet은 API 서버로부터 할당된 파드의 명세를 가져옵니다.
    • Kubelet은 컨테이너 런타임(CRI)을 통해 파드에 정의된 컨테이너를 시작하고 관리합니다.



  10. 컨테이너 실행

    • 각 노드의 컨테이너 런타임은 파드에 정의된 컨테이너 이미지를 다운로드하고 컨테이너를 실행합니다.



  11. 상태 감시 및 업데이트

    • Kubelet은 주기적으로 파드의 상태를 감시하고 이를 API 서버에 보고합니다.
    • API 서버는 파드의 상태를 업데이트하고, 필요에 따라 이벤트를 생성하여 클러스터 이벤트를 기록합니다.

 

혹시나 잘못 된 부분이 있다면 알려주세요..!


Reference

https://kubernetes.io/ko/docs/concepts/overview/components/

https://velog.io/@squarebird/Kubernetes-Kubernetes-%EA%B5%AC%EC%A1%B0

https://malwareanalysis.tistory.com/512

 

반응형
저작자표시 (새창열림)

'Kubernetes' 카테고리의 다른 글

[Kubernetes - 파드 실습] 셀렉터, 레이블 활용, 레플리케이션 컨트롤러 & 스케줄링 테스트  (0) 2023.12.12
[Kubernetes] 쿠버네티스 라벨과 셀렉터  (2) 2023.12.12
[Kubernetes] 쿠버네티스 클러스터 생성  (0) 2023.11.26
[Docker] SpringBoot jar - 도커 이미지 생성  (2) 2023.06.05
[Container] 컨테이너 오케스트레이션 (Container Orchestration)  (0) 2023.06.04
'Kubernetes' 카테고리의 다른 글
  • [Kubernetes - 파드 실습] 셀렉터, 레이블 활용, 레플리케이션 컨트롤러 & 스케줄링 테스트
  • [Kubernetes] 쿠버네티스 라벨과 셀렉터
  • [Kubernetes] 쿠버네티스 클러스터 생성
  • [Docker] SpringBoot jar - 도커 이미지 생성
운덩하는 개발자
운덩하는 개발자
    반응형
  • 운덩하는 개발자
    ddo_hyung_
    운덩하는 개발자
  • 전체
    오늘
    어제
    • 분류 전체보기
      • EKS
      • Container
      • Python
      • AI
      • Java
      • 자기개발, 일기
      • AWS
      • Algorithm
      • Spring Boot
      • Kubernetes
      • Github Action
      • CS
      • Network
      • Etc
      • Linux
      • Terraform
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    테라폼 EC2
    karpenter
    쿠버네티스 서비스 쓰는 이유
    쿠버네티스 파드 실습
    쿠버네티스 도메인
    ca와kapenter비교
    terraform
    쿠버네티스 Headless Service
    쿠버네티스 도메인 쿼리 질의
    카펜터
    클러스터오토스케일링
    테라폼 프로비저닝 예제
    셀렉터와 라벨
    테라폼 실습
    DNS
    AWS
    테라폼 프로비저닝 예시
    kubernetes pod example
    쿠버네티스 셀렉터
    쿠버네티스 dns
    테라폼 프로비저닝 실습
    에프큐디엔
    테라폼 예시
    테라폼 AWS
    Network
    테라폼 예제
    쿠버네티스 셀렉터 실습
    코어디엔에스
    쿠버네티스 node port
    쿠버네티스 셀렉터와 라벨
    컨테이너
    배포
    인터넷 접속 과정
    youtube 접속 과정
    쿠버네티스 ExternalName
    쿠버네티스 파드 예시
    메트릭서버
    쿠버네티스 cluster ip
    쿠버네티스
    쿠버네티스 파드
    clusterautoscaler
    테라폼
    쿠버네티스 서비스 종류
    쿠버네티스 셀렉터 예시
    metricserver
    Kubernetes
    network 과정
    쿠버네티스 셀렉터 사용사례
    네트워크
    쿠버네티스 로드밸런서
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
운덩하는 개발자
[Kubernetes] 쿠버네티스 구성 & Pod 과정
상단으로

티스토리툴바