Kubernetes - 특징 및 주요기능

정훈·2023년 4월 30일
0

kubernetes

목록 보기
2/2
post-thumbnail

가상 머신과 컨테이너의 차이점

가상머신은 하이퍼바이저위에 게스트오에스가있음, 반면 컨테이너는 리눅스 커널에 내장되어있는 Namespace와 cgroup 등을 활용하여 호스트의 커널을 공유하기때문에 좀 더 가벼운 가상환경을 구성

컨테이너 오케스트라

  • 대규모서비스를 배포하려면 다수의 머신에서 워크로드를 분산할 필요가 있기에 도커로는 무리이다.
    • 여러 컴퓨터의 클러스터에 어떻게 컨테이너 인스턴스를 프로비전할것인지
    • 배포된 후 컨테이너는 어떻게 서로 검색하고 통신할 수 있을 것인지
    • 컨테이너 규모를 확장 및 축소하기 위해서는 어떻게해야하는것인지
    • 각 컨테이너의 상태를 어떻게 모니터링해야할것인지

쿠버네티스 특징

  • 네트워크 스토리지 등 다양한 클라우드 리소스를 개발자가 직접 제어하고 자동화할수있다.
    • 쿠버네티스만 잘 이해하고 있다면 모든 클라우드의 인프라를 활용하여 클라우드 프로바이더에 의존하지 않는 서비스를 구축할수있다
  • 쿠버네티스는 따로 Internel API 가 존재하지않는다

쿠버네티스 클러스터

쿠버네티스는 클러스터 기반에서 애플리케이션 컨테이너의 위치와 수행을 오케스트레이션하는 운영을 하는 오픈소스 플랫폼

  • 추상화를 통해 개별 머신에 얽매이지 않고 컨테이너화된 애플리케이션을 클러스터에배포할수있다.
    • 쿠버네티스는 애플리케이션 컨테이너를 클러스터에 분산시키고 스케줄링하는 일을 좀 더 효율적으로 자동화한다
  • 클러스터의 두가지 형태의 자원
    • 마스터는 클러스터를 조율하는 관리자
    • 노드는 애플리케이션을 구동하는 작업자

주요기능

  • 스케줄링
    • 다수의 컨테이너를 다수의 호스트에 적절하게 분산 실행
  • 상태관리
    • 원하는 상태로 실행상태를 유지
      • pod하나가 죽으면 남는 서버에 pod하나를 생성
  • 배포/ 스케줄링
    • 서비스 중단 없이 자동화된 배포를 통해 업데이트 하거나 스케일을 확장/축소
  • 서비스 디스커버리
    • 새로 뜨거나 옮겨간 컨테이너에접근할 수 있는 방법을 제공
      • 새로 컨테이너가 띄워질때 pid가바뀔텐데 이걸 연결시켜줌
  • Resource 연결관리
    • 컨테이너의 라이프 사이클에 맞춰 관련 자원을 연결

쿠버네티스 아키텍쳐

kube-apiserver

  • 등록된 key,value가 달라질대마다 이벤트를 push를해줌
    • kind 가 디플로이먼트 가 변경이올때마다 알려준다.
  • 자원의상태 등등 은 다 key,value
  • 모든 요청을 받고 etcd에 저장

kube-controller-manager

  • 실제 Resource관리를 수행하는 컨트롤러들의 집합,
  • 한명만 동작을 하게함 (동시성방지를위해)
  • yaml의 kind 의 종류에 따라 실행되는 부분 다있음

kubelet

  • 워커노드의 에이전트로서 Node와 Pod의 상태 파악과 실행 보고 .!

kube-proxy

  • kind 서비스 일때 (네트워크 연결 해주기위해)
    • 유저네임스페이스
      • 성능이떨어져서 안씀
    • 리눅스아이템테이블즈를 사용한
    • ipv3

etcd

  • 모든 오브젝트의 상태를 저장하는 key/value 저장소

kube-scheduler

  • 새 pod의 생성을 관찰하여 스케줄링함 .

Controller의 기본

Reconcile

  • 멱등성

    • 몇번을 돌아도 같은 값
  • 실제자원 && 사용자가원하는상태 (컨트롤러의 기본동작특징 )

    • 이 둘값을 비교하면서 계{속 루프를돌면서 부족하면 생성해주고 하는 방식이다 .
  • spec 과 status를 중요시본다 (yaml)

    • 실제자원의 상태를 status를 저장하면서 계속 spec 과 같아질대까지 무한루프를돈다

주로 사용되는 컨트롤러

Deployments

  • 배포할때 주로사용한다 ReplicaSet을 만들어서 배포
    DaemonSet
  • 노드마다 1개씩 다 띄울때
    StatefulSets
  • 순서대로 뜨고 순서대로 내려가야 할 때 . 특정 스토리지나 네트워크가 붙어야 할 때.
    CronJob
  • 주기적으로 실행될 잡

마스터 클러스터 관리자의 역할

  • 애플리케이션 스케줄링
  • 애플리케이션의 향상성 유지
  • 애플리케이션 스케일링
  • 새로운 변경사항을 순서대로 반영

쿠버네티스 클러스터를 만드는 방법

  • 미니쿠베를 이용하는 방법
  • 클라우드 플랫폼의 VM을 이용하여 구축하는방법
  • 라즈베리파이 보드를 구매하여 클러스터를 만드는 방법

파드 와 노드

파드 (pod)

  • 쿠버네티스 클러스터 내의 파드는 파드 네트워크(Pod Network)라는 가상 네트워크로 구성되어 있습니다. 이런 가상 네트워크는 오버레이 네트워크(Overlay Network)라고도 하며, 클러스터 워커 노드의 물리적인 위치에 상관없이 파드간 통신이 동일 서브넷으로 가능하게 합니다.
  • 파드는 하나 또는 여러 개애플리케이션 컨테이너 (도커와같은 )그룹으로 공유 스토리지, ip 주소 및 동작 방식에 대한 정보를 포함하고있다
  • 파드는 하나 또는 여러개 애플리케이션 컨테이너 들의 그룹을 나타내는 쿠버네티스의 추상적개념이고, 자원을 공유함
    • 자원 공유
      • 볼륨 과 같은 공유 스토리지
      • 클러스터 ip 주소와 같은 네트워킹
      • 컨테이너 이미지 버전 또는 사용할 특정 포트 등 각 컨테이너가 동작하는 방식에 대한정보
    • 파드는 쿠버네티스 플랫폼 상에서 최소 단위로 취급
      • 각 파드는 스케쥴링된 노드에 묶여지게되고, 재구동 정책에 따라 소멸되거나 삭제되기 전까지 그 노드에서 유지
      • 노드에 실패가 발생하면 클러스터 내 다른 가용 노드들을 대상으로 스케줄링
  • 모든파드마다 pause컨테이너가 하나씩 다 뜬다
    • pause 컨테이너를(즉 빈 컨테이너) 통해 namespace를 공유함으로서 Pod 내부의 컨테이너들은
      Pod외부와 격리된 컨테이너의 장점을
      유지하면서, Pod 내부에서는 네트워크와
      스토리지 자원을 공유
  • 파드안에 컨테이너가 여러개가떠도 같은 인터페이스를 뜬다 (네임스페이스)
    • 통신할일이많아서 그럼
    • 같은파드안에서 통신할때는 로컬에서 통신이가능

노드 (Node)

만약 컨테이너들이 서로 밀접하게 결합되어있고 디스크와 같은 자원을 공유해야 한다면오직 하나의 단일 파드와 함께 스케줄링되어야함

  • Kubelet이라는 에이전트가 존재하고, 이 kubelet이 해당 노드를 관리하고 쿠버네티스 마스터와 통신하는 역할을 한다
  • 노드는 컨테이너 운영을 담당하는 도커 또는 컨테이너 같은 툴도 포함해야함
  • 쿠버네티스 클러스터는 운영 트래픽 처리를 위해 최소 세대의 노드를 가져야함
    • 하나의 노드는 여러개의 파드를 가질수있다,
      • 쿠버네티스 마스터는 클러스터 내노드를 통해 파드에 대한 스케줄링을 자동으로 처리
      • 노드의 동작방식
        • kubelt 은 쿠버네티스 마스터와 노드 간 통신을 책임지는 프로세스, 하나의 머신 상에서 동작하는 파드와 컨테이너를 관리
        • 도커와 같은 컨테이너런타임은 레지스트리에서 컨테이너 이미지를 가져와 묶여 있는 것을 풀고 애플리케이션을 동작시키는 역할을 수행

0개의 댓글

관련 채용 정보