쿠버네티스 교육/강의 내용 정리

220620_1_k8s_쿠버네티스란

kimhope 2022. 6. 20. 15:01
728x90

마이크로서비스 및 DevOps


모놀로식 아키텍처

특징

  • 단일 프로세스에서 실행되거나 몇몇 시스템에서 몇 개의 프로세스로 실행되는 거대한 모놀리식 애플리케이션

 

장점

  • 간단한 개발
  • 간편한 배포
  • 단순한 확장성

 

단점

  • 코드 품질이 낮아짐
  • 애플리케이션의 시작이 오래 걸림
  • 애플리케이션의 확장이 어려움
  • 컴포넌트별 개발의 어려움
  • 다양한 기술 적용의 어려움

 


 

마이크로서비스 아키텍처

특징

  • 모놀로식 아키텍처의 크기가 커짐에 따라 발생하는 문제점을 극복하기 위해 마이크로서비스라는 기능적으로 세분화되고 독립적으로 작동하는 방식 사용

 

장점

  • 크고 복잡한 애플리케이션을 지속적으로 배포할 수 있음
  • 향상된 유지 보수성 각 서비스는 작기 때문에 이해하고 변경하기 쉬움
  • 테스트 용이성 각 서비스는 독립적으로 테스트 가능
  • 배포 효율성 각 서비스는 독립적으로 배포 가능
  • 독립적으로 개발 테스트 배포 및 확장
  • 개발에 생산성이 높고 배포 속도가 높음
  • 다양한 기술 적용 가능

 

단점

  • 분산 시스템 설계에 따른 복잡성
  • 서비스 간 통신 매커니즘을 따로 구현
  • 서비스 간 상호 작용 테스트
  • 배포 및 관리 운영상의 복잡성
  • 증가된 리소스 소비

 


 

DevOps

작동 방식

  • DevOps 모델에서는 개발팀과 운영팀의 서로 단절되었던 역할들이 서로 조율하고 협업하여 더욱 안정적이고 뛰어난 제품을 생산할 수 있도록 지원

 

장점

  • 출시 시간 단축
  • 시장과 경쟁 지형에 따른 유연한 대응
  • 시스템 안정성 및 신뢰성 유지
  • 평균 복구 시간 개선

 


 

쿠버네티스란


쿠버네티스

  • 여러 컨테이너 오케이스트레이션 도구 중 현재 가장 주목받고 있는 도구
  • 구글에 의해 개발된 컨테이너 오케스트레이션 도구
  • 기본적으로 도커 플랫폼 사용

 

도커

  • 도커 엔진이 설치된 단일 시스템에서 다수의 컨테이너를 구동하는 방식으로 쉽게 구성 가능
  • 단일 시스템만으로는 확보할 수 있는 자원이 한정되어 있어, 구동 가능한 서비스의 한계가 있음
  • 도커 엔진이 구동되고 있는 시스템에 장애가 발생할 경우, 해당 시스템의 컨테이너를 사용하는 모든 서비스가 중지될 수 있는 가능성이 있음

 

오케이스트레이션

  • 다수의 시스템과 애플리케이션을 쉽게 설정하고 유지 관리할 수 있는 방식 의미
  • 도커 자체적으로 '도커 스웜'을 통해서 오케스트레이션을 지원하고 있음
  • 도커 스웜은 도커와 유사한 동작 방식으로 쉬운 사용법을 제공하고 있으나 기능이 비교적 단순하고 세세한 조정이 어려운 단점이 있음

 

쿠버네티스 아키텍처

  • 쿠버네티스 클러스터는 여러 시스템의 연결로 구성
  • 마스터와 노드 구성 요소로 분류할 수 있음
  • 필요에 따라 추가 요소(애드온)가 있을 수 있음
  • 쿠버네티스 클러스터 구성 요소

[출처] https://kubernetes.io/ko/docs/concepts/overview/components/

 


 

쿠버네티스 구성 요소

 


 

마스터 노드

  • 쿠버네티스 클러스터를 구성하기 위한 핵심 요소들의 모음
  • 클러스터를 조정하기 위한 컨트롤 플레인을 제공함
  • 노드에 작업을 분재하는 스케쥴링 등 클러스터에서 전반적인 결정을 수행하고 대응이 필요한 클러스터 이벤트를 감지하고 이에 대응하는 역할 수행
  • 마스터의 기능: API 서버, etcd, 스케줄러, 쿠버네티스 컨트롤러 관리자, 클라우드 컨트롤러 관리자

 

kubectl

  • 쿠버네티스 클러스터에 명령을 내리는 역할
  • 바로 실행되는 바이너리 형태로 배포됨
  • 주로 API 서버와 통신함

 

API 서버

  • 쿠버네티스 클러스터의 중심 역할을 하는 통로
  • 주로 etcd와 통신
  • API는 서로 다르게 구성되어 있는 기능들이 데이터를 주고 받기 위한 방식으로 인터페이스를 뜻함
  • 쿠버네티스의 구성 요소들은 마스터의 API 서버와 메세지를 주고 받게 되고 API 서버가 허브 역할을 수행하여 모든 요청을 수신하며 명령을 전달하는 역할 수행

 

etcd

  • etc 디렉토리 + distributed(퍼뜨렸다) 합성어
  • 쿠버네티스 클러스터의 모든 정보 데이터를 저장하는 저장소
  • 데이터 저장 시 'key-value' 형태로 데이터를 저장함
  • 데이터 백업에 대하여 반드시 고려할 필요가 있음

 

scheduler

  • 클러스터 내에서 생성되는 파드를 감지하고 실행할 노드를 선택하는 역할을 수행하는 구성 요소
  • 리소스 상태, 하드웨어/소프트웨어/정책 상의 제약, 어피니티 등 다양한 기존에 따라 배치 결정

 

쿠버네티스 컨트롤러 매니저

  • API 서버를 통해 클러스터의 상태를 감시하고, 필요한 상태를 유지하는 기능을 수행하는 구성 요소
  • 컨트롤러 종류
종류 설명
노드 컨트롤러 노드를 관리하며 노드가 다운되었을 때 알림 및 대응
레플리케이션 컨트롤러 복제 컨트롤러를 사용하는 모든 오브젝트를 관리하며 알맞은 수의 파드를 유지하는 기능
엔드포인트 컨트롤러 서비스와 파드 연결
서비스 어카운트 및 토큰 컨트롤러 쿠버네티스의 네임스페이스, 계정, 토큰 담당

 

클라우드 컨트롤러 관리자

  • AWS, GCP 등 각 클라우드 서비스와 클라우드에서 동작하는 쿠버네티스 구성 요소가 상호 작용할 수 있도록 해주는 기능
  • 쿠버네티스 1.6에서 도입된 알파 기능
  • 클라우드 환경에서 쿠버네티스 컨트롤러가 하는 역할 수행

 


 

워커 노드

  • 쿠버네티스의 컨테이너가 동작하는 런타임 환경을 제공하며, 동작 중인 파드를 유지하는 기능 담당
  • 노드의 역할: 큐블릿, 프록시, 컨테이너 런타임

 

kubelet

  • 쿠버네티스 클러스터의 각 노드에서 실행되는 에이전트로 마스터로부터 제공받는 파드의 구성 정보, 즉 노드가 수행하여야 할 작업을 전달받아서 컨테이너가 확실하게 동작하도록 보장하는 역할 수행

 

프록시

  • 클러스터의 각 노드에서 실행되는 네트워크 프록시로 '서비스'를 구현하기 위한 기능 담당
  • 클러스터 내부 간 통신이나, 클러스터 외부에서 내부로 전달되는 통신 등 호스트 레벨의 네트워크 규칙을 구성하고 외부 연결을 파드에 포워딩하며 서비스의 추상화 제공

 

컨테이너 런타임

  • 각 노드에서 실제 컨테이너의 동작을 책임지는 구성 요소
  • 파드 안에서 다양한 종류의 컨테이너가 문제 없이 작동하게 만드는 표준 인터페이스
  • 구성 요소: docker, containerd, CRI-O, rktlet, Kubernetes CRI

 

파드

  • 한 개 이상의 컨테이너로 단일 목적의 일을 하기 위해서 모인 단위
  • 파드는 언제라도 죽을 수 있는 존재임

 

네트워크 플러그인

  • 쿠버네티스 클러스터의 통신을 위해서 네트워크 플러그인을 선택하고 구성해야 함
  • 네트워크 플러그인은 일반적으로 CNI로 구성함
  • CNI: 컨테이너 네트워크 인터페이스로 컨테이너의 네트워크 안정성과 확장성을 보장하기 위해 개발됨
  • CNI 종류: 캘리코, 플래널, 실리움, 큐브 라우터, 로마나, 위브넷 등

 

CoreDNS

  • 빠르고 유연한 DNS 서버
  • 쿠버네티스 클러스터에서 도메인 이름을 이용하여 통신하는 데 사용
  • 도메인 네임을 편리하게 관리해주는 CoreDNS를 일반적으로 사용함

 


 

쿠버네티스 추가 요소

항목 설명
클러스터 DNS 쿠버네티스 클러스터 내의 여러 오브젝트(파드, 컨테이너, 서비스 등)에 대하여 주소 기반으로 오브젝트를 접근할 수 있는 DNS 서비스 제공
대시보드 쿠버네티스 클러스터 구성 및 모니터링을 위한 웹 기반 인터페이스 제공
컨테이너 리소스 모니터링 컨테이너 리소스 사용량의 시계열 매트릭스 기록
클러스터 로깅 컨테이너 로그를 중앙 로그 저장소에 저장하고 관리

 

쿠버네티스 API

  • API 버전 규칙
쿠버네티스의 모든 구성 요소는 API 오브젝트로 취급되며, API 서버를 통해 API로 메세지를 주고 받음
쿠버네티스는 리소스를 쉽게 표현하기 위해, 'api/v1' 또는 '/apis/extensions/v1beta1'과 같이 각각 다른 API를 호출하여 사용할 수 있음
같은 종류의 리소스라고 하더라도 서로 다른 API 버전이 존재할 수 있으며, API 버전이 다르다는 것은 안정성이나 기술 지원의 수준이 다르다는 것을 의미함
  • API 버전 종류: 알파 버전 API, 베타 버전 API, 안전화 버전 API

 

메니페스트

  • 쿠버네티스는 클러스터의 상태를 나타내기 위해 오브젝트 객체를 정의하여 사용함
  • 오브젝트를 생성할 때는 오브젝트의 기본 정보, 오브젝트의 상세 스펙을 정확하게 제시해야 함
  • YAML, JSON 문법으로 정의할 수 있음
  • 오브젝트 정의 시 필수 요구 필드 값
필드 값 설명
apiVersion 오브젝트를 생성하기 위한 API 버전 지정
kind 오브젝트의 종류 명시
metadata name, label, namespace 등 기본적인 정보 기술
spec 오브젝트의 세부 상태 정의

 

오브젝트 관리

  • 명령형 명령어: kubectl 명령 실행 시 오브젝트 생성에 필요한 정보 인수 또는 옵션을 사용하여 전달하는 방식
  • 명령형 오브젝트 구성: 오브젝트에 대한 세부 사항을 YAML/JSON 포맷으로 작성하고, kubectl 명령은 작성된 파일을 참고하여 실행하는 방식
  • 선언형 오브젝트 구성: 특정 디렉토리에 오브젝트 파일을 배치하는 방식, kubectl 명령은 특정 디렉토리에 배치된 오브젝트 파일을 참고하여 오브젝트 관리

 


 

쿠버네티스 클러스터 구성 도구

kubespray

  • 상용 서비스에 적합한 보안성과 고가용성이 있는 쿠버네티스 클러스터를 배포하는 오픈 소스 프로젝트
  • 서버 환경 설정 자동화 도구인 앤서블 기반으로 개발됨
  • 온프레미스 환경에서 상용 서비스의 쿠버네티스 클러스터를 구성할 때 유용함
  • 추가 구성 요소를 클러스터에 실행하는 역할 (ingress-nginx 컨트롤러, 헬름, 볼륨 플러그인, cert-manager 등)
  • kubespray에서 제공하는 고가용성 구조는 kubeadm과 다름 ==> 로그밸런서를 사용하지 않고 노드 각각의 nginx가 리버스 프록시로 실행됨
  • nginx-proxy가 전체 마스터 노드를 바라봄

 

[출처] https://www.bookstack.cn/read/kubespray/ha-mode.md

 

kubeadm

  • 쿠버네티스에서 공식 제공하는 클러스터 생성/관리 도구
  • 여러 대의 서버를 쿠버네티스 클러스터로 쉽게 구성할 수 있음
  • 고가용성을 제공하는 클러스터도 구성할 수 있음 ==> 워커 노드들이 마스터 노드에 접근할 때 로드밸런서를 거쳐 접근함

 

[출처] https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/ha-topology/

728x90