ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 구글 클라우드 스터디잼 - Kubernetes Basics 요약
    [Developer]/Concept 2019.04.02 01:31

    2019.4 구글 클라우드 스터디잼 중급반을 진행하였다.

    coursera 강의를 듣고, 그 안의 퀵랩을 진행하며, 각 챕터 마무리에는 퀴즈도 푸는 코스 형식의 강의자료를 토대로 스터디를 하였다.

     

    각자 한가지의 챕터를 정리하기로 하였는데, 그 중 내 담당은 Kubernetes Basics이다.

     

    내용은 간단? 하였다.

    다음의 개념에 대한 설명이다.

     

    Clusters, Nodes, Pods, Services, Labels, Selectors, and Volumes

    아래에서는 한글로 기재할 것이다.

    순서대로, 클러스터, 노드, 포드, 서비스, 레이블, 셀렉터, 볼륨

     

    본 개념 정리는 위에 나열된 용어를 짚어보는데 의의가 있다고 생각한다.

     

    컨테이너를 사용하면 하드웨어, 소프트웨어 및 운영체제 요구사항을 사용하여 응용프로그램을 모듈로 분리할 수 있다. 동일하거나 다른 시스템에서 실행할 수 있고, 중지할 수 있지만, 실행중인 머신이나 실패한 경우의 대처방법 또는 다른 컨테이너에 연결하고 영주적으로 연결하는 방법을 지정할 수는 없다.

    이를 위해서 Kubernetes와 같은 컨테이너 오케스트레이션 시스템이 필요한 것이다.

    (컨테이너 오케스트레이션이란? 다음의 글 참고 http://www.mantech.co.kr/container_orchestration/)

     

    Kubernetes는 실행할 시스템 수, 배치할 컨테이너 수, 확장 방법, 영구디스크가 상주하는 위치 및 컨테이너 그룹을 하나의 단위로 배치하는 방법을 정의하는 기능을 추가한다.

     

    클러스터노드에 대한 설명이다.

     

     

    사용자는 마스터 클러스터 서버만 바라보고 있다.

    마스터 클러스터 서버는 kubelet을 실행중인 모든 노드들을 바라보고 있습니다. kubelet은 마스터와 자기자신의 노드와 통신하는 에이전트 역할을 한다.

    마스터는 모든 작업을 통제하고 스케줄을 제어하며 etcd, apiserver 자체를 제어한다.

     

     

    개발자는 API만 액서스만 신경쓰게 된다. 컨테이너 클러스터에 접근하는 것은 결국 API에서 이루어지기 때문이다.

     

    클러스터는 작동하는 컴퓨터의 집합이며, 이 모든 노드를 관리하는 인스턴스이다.

     

    또한 노드의 갯수는 앞에서의 예시처럼 1,2,3개 같이 존재하는 것이 아니라, 통상 수천개의 노드와 여러개의 다중 마스터 구조로 되어있다. 그러나 이 시스템의 장점은 리소스에 신경쓰지 않고 노드에 작업을 할당하는 방법이나, 리소스가 많이 소요되는 노드에서 작업을 제거하는 방법을 알고 있다는 점이다.

     

     

    이젠 포드에 대한 설명이다.

    포드는 노드 자체와 분리된 네트워크 및 저장소를 공유하는 컨테이너 그룹에서 볼 때 일종의 VM과 유사한 역할을 한다.

     

    아래에는 OS가 있고, 하드웨어가 있고, NIC가 있고, 외부에 IP가 있고, 내부에 포드가 있고, 포드 내부에 실제 컨터이너가 있고, 컨테이너의 네트워크 인터페이스가 있다.

     

    이것에 대해서는 yaml 파일로 정의할 수 있으며, yaml 파일을 마스터 클러스터 서버에 업로드하면, yaml 파일 내에서 전용 노드에 포드가 생성이 된다.

     

    포드를 정의하는 yaml은 위와 같이 구성된다.

     

    배포를 통해 N 포드가 특정 시점에 클러스터에서 실행되도록 할 수도 있다. 포드중 하나가 고장나면 Kubernetes는 다른 포드를 돌려서 교체할 수 있다. 마스터가 Kubernetes를 실행중일 때, 마스터는 스케줄을 잡고 결정한다.

     

    다음은 서비스에 대한 이야기이다.

    서비스는 고정 IP로 포드에 할당된 다음, 복제되어 다른 포드와 다른 서비스가 그들과 통신할 수 있게 한다. 즉, 서비스는 포드사이에 의사소통의 역할로 사용되게 된다.

     

    yaml 파일에서도 리소스, 사용할 포드, 포드 셀렉터, 적용할 로드 밸런서 유형을 기재하고 적용할 수 있다.

     

    그리고 레이블은 모든 API 개체에 할당하고 ID를 나타낼 수 있는 메타데이터이다.

    논리적으로 레이블을 지정하면 포드 내부의 매커니즘에 따라 신속하게 식별할 수 있게 된다. 수천개 이상의 컨테이너에서 무엇인가를 찾을 필요가 있을 때 레이블을 갖고있다면 매우 편리하게 찾게 될 것이다.

     

    레이블 셀렉터를 통해 클라이언트나 유저는 포드를 선택할 수 있다. 레이블 셀렉터는 포드를 선택할 수 있도록 하는 개념이다. 레이블은 서로 중복될 수 있으며 그럴 경우 셀렉터는 그것들을 그루핑해준다.

     

     

    마지막으로 볼 개념은 볼륨이다.

    볼륨은 하나의 저장공간 개념이다. 데이터를 어딘가 저장할 수 있도록 하는 스토리지이다.

     

    볼륨은 디렉토리일 뿐이고, 데이터를 소비한다.

     

    어떤 볼륨들은 그들의 포드의 라이프사이클을 공유한다.

    볼륨은 포드에 부착되어 온라인 상태가 되기 전에 컨테이너에서 사용할 수 있다. 컨테이너를 온라인으로 만들기 전에 저장소를 확보해야 한다. mnt / vol과 같은 디렉토리를 볼 수 있다면 데이터를 해당 컨테이너 파일 시스템에 마운트가 불가하다고 한다.

     

    이것은 클러스터에 대한 전체 개요이다.

    kubectl이 사용자로 존재한다. 실제 명령을 줄 수 있는 커맨드이다.

    또한 하나의 노드 안에 두개의 서로 다른 응용프로그램이 있고, 그것은 문제가 없는 상황이라고 한다.

    아무 포드도 실행하지 않는 노드를 가질 수도 있고, 대기모드이거나 필요한 경우 매달려있을 수도 있다. 만약 프로그램이 영구적인 데이터 저장을 원한다면, Data storage service에 저장하고 불러오는 과정을 거치면 된다.

     

    제대로 와 닿는 개념도 있지만, 그렇지 않은(이해가 잘 되지 않는) 개념도 있어서 그런것들의 경우 좀 더 인터넷 검색을 통해 정보를 수집하고 이해해 보는것도 방법일 듯 싶다.

    댓글 0

Designed by Tistory.