ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쿠버네티스(Kubernetes) #1
    기타 2021. 11. 22. 14:32

     

     

    1. 쿠버네티스란?

    - 구글에서 만들었음

    - 표준 컨테이너 기술

    - k8s라고도 쓴다(k와 s사이에 8자가 있어서)

    - docker orchestration

     

    그렇다면 docker orchestration이란 뭔가요?

    docker, docker-compose, docker orchestration이 어떻게 다른지 비교해보자면

     

    • docker vs docker-compose vs orchestration

     

    [docker] 

    - one container on one host

    - 도커는 한개 서버 위에서 한개의 컨데이너를 어떻게 잘 운영할까

     

    [docker-compose]

    - multi container on one host

    - 한개의 서버 위에 여러 컨테이너들이 하나로 모여 하나의 어플리케이션을 만드는 것

    - ex> web server + DB server + application server

     

    [orchestration]

    - multi container on multi host

    - 여러 서버에 걸쳐서 여러 컨테이너들을 어떻게 운영할 것인가

     

    docker vs docker-compose vs orchestration

     

    • docker orchestration

           - clustering : 여러 container들을 하나로 묶어 어떻게 배치할 것인가

           - auto-placement : 어떤 컨테이너를 어느 서버에 적절하게 배치할 것인가

           - auto-restart : 서비스 중에 네트워크 장애, 노드 장애 등의 이유로 컨테이너가 죽을 수 도 있다.

                               이럴때 새로운 컨테이너를 띄워주는 기능

          - 무중단 배포 : 서비스 배포시 중단 없이 배포 할 수 있도록 지원

          - MESOS, RANCHER OS, Amazon ECS 등이 있다

     

    쿠버네티스를 조금 다르게 정의 해보면 Data Center OS 라 할 수 있다

     

    - Data Center

       : 컴퓨터의 집합 (Collection)

                      +

    - OS

       : Hardware 추상화 layer(CPU / MEM / Network)

        요청한 자원 할당 / 분배(resource management)

        프로세스 스케줄링(scheduling)

        User Interface(GUI, CUI)

     

     

    쿠버네티스를 데이터 센터용 OS를 사용한다고 생각하자 (단순히 여러 컨테이너를 배포하는게 아니라 OS처럼 여러가지 기능을 제공해주는 애)

     

    쿠버네티스는 사용자들이 많아짐에 따라 docker 뿐만 아니라 여러 컨터에너들도 지원하게 되었다

            -> 단순히 docker orchestration 이라고 하기 어려움

     

     

     

    2. 쿠버네티스 기본 개념

     

    • 네임스페이스

     

    쿠버네티스의 물리적으로 구조 : master 노드와 각각의 worker 노드

     

    논리적인 클러스터 구조 : 네임스페이스

                                           -> 개별적인 access control 정책, 네트워크 정책을 부여할 수 있음

     

    하나의 거대한 물리적인 클러스터를 논리적으로 여러개로 나눠서 개별적으로 서로 다른 역할을 하는 클러스터로 나눌 수 있다



    • 리소스

     

    쿠버네티스는 모든것이 리소스로 표현된다

     

    - Pod(파드) : 쿠버네티스의 가장 최소가 되는 단위

    - Node : 하나의 서버를 지칭

    - Service : 쿠버네티스의 네트워크를 담당



    • 앱 정의서

     

    리소스를 YAML형식으로 정의해놓은 것



    • 선언형 명령

     

     : 상태 자체를 선언적으로 적음 (YAML)

     

    <-> 명령형 command (SQL, 일반적인 프로그래밍 language)

     

    declarative command

    <article>
    <header>
    <h1>Declarative Programming</h1>
    <p>This is declarative</p>
    </header>
    </article>
    imperative command

    SELECT Orders.id, Customers.name
    FROM Orders
    INNER JOIN Customers
    ON Orders.cus_id=Customers.id;

     

     

    • Desired State

     

    쿠버네티스는 두 state 저장 하고 두 state sync를 맞추려고 함

     

    current state (현재 상태), desired state (바라는 상태)

     

    1. 새로운 리소스를 생성하기 위해 앱 정의서(YAML파일)를 쿠버네티스에 전달

    2. desired state 가 변경됨

    3. k8s는 desired state와의 sync를 맞추기 위해 current state에 새로운 리소스 생성



    • Label & Selector

     

    리소스에 다양한 label을 붙일 수 있음

    selector를 통해 특정 label를 select 할 수 있음

     

     

     

     

    3. Kubernetes 아키텍처

     

     

    쿠버네티스의 두뇌 역할을 하는 master 노드, 실제 container들을 실행하는 worker 노드가 있음

     

    • master node

     

    1. api-server

       - 가장 중요한 역할을 하는 컴포넌트

       - 모든 컴포넌트와 통신(request, response)하는 역할

       - worker node도 api-server를 통해 정보를 주고 받음

     

    2. etcd (etcd 데이터베이스 or 엣cd 데이터베이스)

       - api-server에 들어오는 모든 정보의 데이터를 저장 또는 필요에 따라 제공해주는 역할

       - RDB가 아닌 key-value 형태의 DB

       - k8s의 모든 메타데이터를 저장하는 컴포넌트

     

    3. scheduler

       - auto-placement 기능을 하도록 함 (적절한 worker node에 적절한 container를 배치하는 역할)

       - scheduling 역할

     

    4. cm (controller manager)

       - current state와 desired state의 sync가 맞도록 관리하는 역할

     

    5. ccm (cloud-controller manager)

       - k8s는 on-premise 서버에서도 동작하지만 많은 경우 public cloud에서 동작함

       - public cloud에서 제공하는 리소스를(트래픽을 받아내는 로드밸런서, 데이터를 저장하는 스토리지) 사용해야 함

       - 이런 경우 cloud와 통신하면서 필요한 리소스를 제공받음



    • worker node

     

    1. kublet

       - master node로 부터 특정 container를 실행하라는 명령을 전달 받음

              -> container 실행, worker node 자체의 상태정보를 master로 전달

       - worker node의 중심

     

    2. kube-proxy

       - 전반적인 container간의 네트워크 담당

     


    4. Kubernetes 장점

     

    • container 스케줄링이 편리해짐

       - 사용자가 일일이 특정 서버에 들어가서 container를 실행할 필요 없이 YAML파일을 통해 k8s가 가장 적절한 worker node를 선택해서 배치

     

    • 확장성이 좋아짐

       - 각각의 서버는 특별한 역할을 가지는 것이 아닌 모두 동일한 worker server

       - 동일한 worker server를 추가시키기만 하면 부족한 리소스를 갖는 container들이 새롭게 스케줄링 될 수 있음

     

    • 모니터링이 쉬워짐

     

     

     

    • 장애에 견고해짐

       - 특정 서버에 장애가 발생하더라도 손쉽게 대체가 가능함

       - 동일한 worker 서버에 있고 컨테이너가 이식성이 좋기때문에 새로운 서버로 이주하는 것이 쉽다

     

    • Hybrid / 멀티 클라우드 구현

     

    • 배포 방식이 획기적으로 간편해짐

       - 어떤 이미지를 어떻게(=앱 정의서) 배포할것인가만 정의되면 됨

       - 이것을 쿠버네티스에 전달하면 쿠버네티스가 쿠버네티스 클러스터위에 생성함

     

    • Micro Service

       마이크로 서비스에 필요한 기능을 내재하고 있음

     

       - service discovery : 어떤 서비스가 어디에 위치하고 있는지 찾아내줌

       - load balancing : 부하를 분산해줌

       - traffic control : 트래픽 관리

     

    -> 마이크로 서비스를 개발하는것이 편리해 짐

     

    • Machine Learing Platform

     

    '기타' 카테고리의 다른 글

    쿠버네티스(Kubernetes) #2  (0) 2021.11.24
    Git pull/push 할 때 password 저장하기, 계정정보 저장  (0) 2021.01.05

    댓글

Designed by Tistory.