ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes란?
    Docker & Kubernetes 2019. 6. 9. 20:09

    쿠버네티스란?

     

     

    쿠버네티스란 여러 개의 호스트(pod- 쿠버네티스의 최소 배포 단위)를 하나로 묶어 관리하기 위한 오케스트레이션 툴이다.

     

    아래에서 얘기하는 Pod는 쿠버네티스의 최소 배포 단위로 1개 이상의 컨테이너, 네트워크, 스토리지 등이 포함된다.

     

    공식 사이트의 정의로는 어플리케이션 컨테이너의 배포 자동화, 스케일링, 운영을 위해 설계된 오픈소스 플랫폼이다.

     

    분산 환경에서 여러 대의 컴퓨팅 자원을 한 대의 컴퓨터처럼 운영할 수 있다.

     

    하드웨어 밴더 및 플랫폼에 종속되지 않아 Public Cloud(AWS, Azure,GCP)에도 사용이 가능하며 Private Cloud, 베어메탈에도 배포가 가능하기 때문에 하이브리드 클라우드 솔루션으로 각광 

     

    쿠버네티스의 주요 기능

     

    - 여러 서버에 동작하는 Pod 관리

    - Pod 간 네트워크 관리

    - Pod의 부하분산

    - Pod의 모니터링

    - 무중단 배포 및 업데이트 ( rolling update )

     

     

    쿠버네티스 인프라

     

    쿠버네티스 클러스터는 크게 클러스터의 모든 상태를 저장/관리하는 Master와 실제 Pod를 운영하는 Node로 구성

     

    Master 구성 컨퍼넌트

     

    - API Server

    - Controller Manager

    - Scheduler

    - etcd

     

     

    API Server

     

     

    - 쿠버네티스에서 가장 중요한 컴퍼넌트

    - 쿠버네티스 내부의 모든 동작은 HTTP/HTTPS REST API를 통해 호출된다.

    - 각각의 쿠버네티스 컴퍼넌트가 서로 직접 연결된 형태가 아니라 모든 컴퍼넌트는 API Server를 경유하여 통신

    - 컴퍼넌트들은 API Server를 watch하고 있다가 자신과 관련된 부분의 변경사항이 있으면 변경사항을 업데이트

     

    위의 플로우 다이어그램을 보면 모든 요청이 API Server를 경유하여 각 컴퍼넌트로 전달되고 있음을 확인가능.

     

    Controller Manager

     

    - K8s에서 ReplicaSet, Deployment등의 Controller는 Pod의 복제/배포를 변경하는 명령을 수행하고 Pod의 상태관리.

    - Controller Manager는 이 Controller들을 데몬형태로 포함하고 있다.

     

    ※ 추가적으로 쿠버네티스의 Pod는 Deployment, ReplicaSet에서 사용자가 설정한 Pod의 수를 유지하는데

    그 것을 Desired State ( 원하는 상태 )라 한다.

    Desired State의 의미는 ReplicaSet에 설정 된 현재 상태를 유지하는 것이다.

    Controller Manager에서 현재 상태를 감시하다가 설정한 Desired State와 다르면 설정한 Desired State를 유지하기 위한 작업을 실행하여 사용자가 지정한 Pod의 수를 유지한다.

     

    Scheduler

     

    - 어떤 Pod를 어떤 Node에서 실행할 지 결정.

    - 각 Node의 자원 사용 상황, 노드당 클러스터 분배 비율을 기반으로 컨테이너를 배치

    - Node에 배치된 Pod는 각 Node의 Kubelet 컴퍼넌트에 의해 컨테이너로 생성.

     

    etcd

     

    - 분산 키/밸류 저장소

    - 클러스터 설정 및 현재 상태( 클러스터의 각 노드, 노드에서 동작중인 Pod 등의 모든 상태)를 저장.

    - Service Discovery에서 사용하는 SkyDNS의 데이터 저장

     

     

    Node 구성 컴퍼넌트

     

    - Kubelet

    - cAdvisor

    - Kube-Proxy

    - Pod

     

    Kubelet

     

    - Node마다 한개씩 떠있는 Node Agent

    - Service, Pod를 실행/중지하고 desired State 유지.

    - 주기적으로 API Server에 Node의 상태를 Check & Report access 한다.

     

    cAdvisor

     

    - 동작중인 컨테이너의 리소스 사용량과 퍼포먼스를 모니터링

    - 모니터링한 결과는 Kubelet에 의해 Master의 API Server로 전달된다.

     

    Kube-Proxy

     

    - 네트워크 프록시 + 로드밸런서의 역할

    - 외부의 요청을 분산된 Pod로 전달

    - 컨테이너간의 통신을 위해서 iptables rules를 변경

     

    Pod

     

    Pod란 쿠버네티스의 가장 작은 배포 단위(Unit)으로 쿠버네티스에서는 컨테이너가 가장 작은 배포단위가 아니라 Pod가 가장 작은 배포단위로 취급된다.

     

    - 1개의 Pod 내부에는 1개 이상의 컨테이너가 존재한다.

    - 1개의 Pod는 여러개의 물리서버에 나눠지는 것이 아니고 1개의 물리서버(Node)위에 올라간다.

    - Pod 내부의 컨테이너들은 네트워크와 볼륨을 공유하기 때문에 Localhost로 통신 가능.

     

     

    참고자료

     

    https://blog.2dal.com/2018/02/28/kubernetes-intro/

    'Docker & Kubernetes' 카테고리의 다른 글

    Kubernetes - Pod란?  (0) 2019.10.03
    CentOS 7 - 쿠버네티스 설치  (0) 2019.06.09
    Docker Swarm이란  (0) 2019.02.19
    Docker commit을 이용하여 컨테이너를 이미지로 배포하기  (0) 2019.02.19
    Docker란  (0) 2019.02.19
Designed by Tistory.