k8s - (1) : 아키텍처

­이승환·2021년 12월 15일
0

k8s

목록 보기
1/1

Overview


쿠버네티스는 리눅스 컨테이너 작업을 자동화하는 오픈소스 플랫폼을 말한다. 컨테이너화된 애플리케이션을 배포하고 확장하는 것에 수동적인 프로세서를 배제하고, 컨테이너로 가상화해서 배포할 수 있다.
도커와의 차이점이 궁금할 것으로 보인다. 도커는 호스트 내에 여러 가상화 컨테이너(환경과 자원) 을 분리해서 관리할 수 있다면, 쿠버네티스틑 호스트 그룹을 한꺼번에 클러스터링 할 수 있다는 특징이 있다. 기본적으로 하나의 호스트(pc)에서 컨테이너를 다양화해 애플리케이션을 배포하는 시대는 간 만큼, 쿠버네티스 기술력은 개발 및 운영 배포에 필수적이라 할 수 있다.

쿠버네티스의 장점

실제 프로덕션 애플리케이션은 여러 컨테이너에 컬쳐 개발되었을 것이며, 이런 컨테이너는 여러 서버 호스트들에 배포될 것이다(클러스터링). 여기서 쿠버네티스의 장점은 아래와 같다.

  1. 규모에 맞는 컨테이너를 배포하는 데 필요한 오케스트레이션 및 관리 기능을 가짐
  2. 여러 애플리케이션 서비스를 구축하고, 클러스터 전체에서 일정을 기획하고, 상태를 지속적으로 관리할 수 있음
  3. 네트워크 설정이나 보안을 한층 강화할 수 있음
  4. 종합적인 인프라를 제공(네트워크, 스토리지, 보안, 테레메트리, 기타 서비스..)

쿠버네티스의 기능

  • 레지스트리: Atomic Registry 또는 도커 레지스트리(Docker Registry)와 같은 프로젝트
  • 네트워킹: OpenvSwitch 및 인텔리전트 엣지 라우팅과 같은 프로젝트
  • 텔레메트리: heapster, kibana, hawkular, elastic과 같은 프로젝트
  • 보안: 멀티테넌시(Multi-tenancy) 계층을 갖춘 LDAP, SELinux, RBAC, OAUTH와 같은 프로젝트
  • 자동화: 설치 및 클러스터 라이프 사이클 관리를 위한 Ansible 플레이북 추가
  • 서비스: 인지도 높은 애플리케이션 패턴을 사용하여 사전 생성된 풍부한 콘텐츠로 구성된 카탈로그

.. 다양한 기능들이 있는 것 같은데, 일단 한번 써보고 나서야 이해가 갈 것으로 보인다.
참조

쿠버네티스에서 자주 사용되는 키워드

쿠버네티스는 기술을 이해하고 습득하는 과정에서 낯선 용어들을 만나게 될 가능성이 높다. 아래는 가장 자주 등장하는(?) 키워드들이다. 이 후 포스팅에서 하나씩 소개할 예정이다. 참고만 하자.

  • 마스터: 쿠버네티스 노드를 제어하는 머신입니다. 여기에서 모든 태스크 할당이 시작됩니다.
  • 노드: 할당된 태스크를 요청대로 수행하는 시스템입니다. 쿠버네티스 마스터가 이러한 노드를 제어합니다.
  • 포드: 단일 노드에 배포된 하나 이상의 컨테이너 그룹입니다. 포드에 있는 모든 컨테이너는 IP 주소, IPC, 호스트 이름, 기타 리소스를 공유하며 포드는 기본 컨테이너에서 네트워크와 스토리지를 추상화합니다 이렇게 하면 클러스터에서 컨테이너를 더 쉽게 이동할 수 있습니다.
  • 복제 컨트롤러: 이 컨트롤러는 클러스터에서 실행되어야 하는 동일한 포드 사본의 개수를 제어합니다.
  • 서비스: 포드에서 작업 정의를 분리합니다 쿠버네티스 서비스 프록시는 클러스터에서 다른 위치로 이동한 경우든 교체된 경우든 서비스 요청을 적절한 포드로 자동 수신합니다.
  • Kubelet: 이 서비스는 노드에서 실행되며 컨테이너 매니페스트를 읽고, 정의된 컨테이너가 시작되어 실행 중인지 확인합니다 (cAdivisor)
  • kubectl: 쿠버네티스의 명령줄 설정 툴입니다.

쿠버네티스 클러스터의 기초 구성 요소

  • 클러스터 : 작동중인 쿠버네티스 배포 대상
  • 노드 : 리눅스환경 또는 가상머신 (pc라고 생각), 여러개의 노드로 구성되어 있음
  • 포드 : 컨테이너로 구성된 하나의 애플리케이션 대상(여러개의 컨테이너일 수 있음), 가장 작은 유닛
  • 런타임엔진 : 각 노드에서 돌고 있는 데몬으로 docker, rkt, cri-o 등 여러개로 구성
  • 컨트롤 플레인 : 클러스터를 제어하는 쿠버네티스 구성 요소와 클러스터의 상태 및 구성에 대한 데이터가 존재하는 곳으로 컨테이너가 필요로하는 리소스를 전부 가지고 있으며 항상 컴퓨팅 노드와 상시로 연결되어 있음
  • Kube-apiserver : 쿠버네티스 컨트롤 플레인의 프론트엔드역할로, 내부 및 외부 요청을 처리함. API 서버는 요청이 유효한지 판별하고, 명령어들을 파싱하여 요청을 처리함, REST 호출이나 kubectl 커맨드라인 인터페이스 또는 kubeadm과 같은 CLI 를 통해 액세스 가능
  • kube-scheduler : 클러스터가 양호한지, 새 컨테이너는 어떤 노드에 올릴지 다루는 곳으로 CPU 및 메모리 상태를 고려해서 노드를 선정하여 컨테이너를 배포함
  • kube-controller-manager : 컨트롤러는 실제로 클러스터를 실행하고, controller-manager는 여러 컨트롤러 기능을 하나로 통합하고 있는 서비스임. 하나의 컨트롤런는 스케쥴러를 참고해서 정확한수의 포드가 실행되게 하고, 만일 특정 노드에 문제가 생기면 컨트롤러가 이것을 감지해여 재 실행시켜주는 역할을 하기도 함
  • etcd : 설정 데이터와 클러스터의 상태에 관한 정보는 키-값 저장소 데이터베이스인 etcd에 상주함.
  • kubelet : 각 컴퓨팅 노드에는 컨트롤 플레인과 통신하는 매우 작은 애플리케이션이 존재하는데 이것이 kublet. 컨테이너가 포드에서 실행되게 하는 역할을 맞고 있으며, 컨트롤 플레인에서 노드에 작업을 요청하는 경우 kubelet이 해당 노드에서 작업을 실행함.
  • kube-proxy : 각 컴퓨팅 노드에는 쿠버네티스 네트워킹 서비스를 용이하게 하기 위해서 kube-proxy를 가지고 있음. 운영체제의 패킷 필터링 계층에 의존하거나 트래픽 자체를 전달해서 클러스터 내부 또는 외부의 네트워크 통신을 처리함.
  • persistant storage : 퍼시스턴트 볼륨은 포드가 아닌 클러스터에 따로 존재하며, 클러스터에 연결된 애플리케이션 데이터를 관리하는 역할
  • container registry : 쿠버네티스가 의존하는 컨테이너 이미지 저장소

Architecture

profile
Mechanical & Computer Science

0개의 댓글