Kubernetes란 무엇일까?

Son_Doobu96·2023년 2월 6일
0

Kubernetes

목록 보기
1/1
post-thumbnail

◎ 도커 네트워크의 개념

bridge, host, none은 Docker 데몬(daemon)이 실행되면서 디폴트로 생성되는 네트워크입니다. 대부분의 경우에는 이러한 디폴트 네트워크를 이용하는 것 보다는 사용자가 직접 네트워크를 생성해서 사용하는 것이 권장됩니다.
기본적으로 새 컨테이너를 시작하면 자동으로 기본 bridge 네트워크에 연결된다

■ 도커 네트워크의 종류

bridge 네트워크

  • 기본 네트워크 유형이며 컨테이너가 서로 및 호스트와 통신할 수 있도록 한다.
    호스트의 네트워크 스택을 사용하고 컨테이너 간에 기본적인 격리를 제공한다.
    브리지 네트워크에 연결된 각 컨테이너에는 고유한 IP 주소가 할당되며
    ping 및 traceroute와 같은 표준 네트워킹 도구를 사용하여 컨테이너 간에 통신할 수 있다.

Host 네트워크

  • 호스트의 네트워크 스택을 사용하며 컨테이너 간에 격리를 제공하지 않다.
    호스트 네트워크에 연결된 컨테이너는 호스트의 IP 주소와 포트를 공유한다.
    권한 있는 포트에서 수신 대기하거나 특정 IP 주소를 사용해야 하는 컨테이너를 실행해야 할 때 유용할 수 있다.

오버레이 네트워크

  • 이를 통해 여러 호스트에 걸쳐 컨테이너를 연결할 수 있다.
    VXLAN 프로토콜을 사용하여 여러 Docker 호스트에 걸쳐 있는 가상 네트워크를 만든다.
    이는 swarm 클러스터의 여러 호스트에서 컨테이너화된 애플리케이션을 실행할 때 유용할 수 있다.

Macvlan 네트워크

  • 이를 통해 네트워크에 연결된 각 컨테이너에 고유한 MAC 주소를 할당할 수 있으므로
    LAN 네트워크에서 고유한 IP 주소를 할당할 수 있다.

None 네트워크

  • 이 네트워크를 사용하면 모든 네트워크에서 컨테이너 연결을 끊을 수 있다.
    이는 다른 컨테이너와 통신할 수 없는 "방화벽" 모드에서 컨테이너를 실행하려는 경우에 유용할 수 있다.

◎ 쿠버네티스란?

컨테이너화된 애플리케이션의 배포, 확장 등을 관리하는 것을 자동화하기 위한 플랫폼
(컨테이너 오케스트레이션 엔진)이다.

도커는 설치된 호스트(도커 호스트)를 동시에 여러 대 동작시키거나 중앙에서 통합, 관리할 수 없는 단점이 있어
여러 호스트로 구성하거나 일정 규모 이상의 서비스 혼경에서 사용할 수 있는 시스템을 구축하기가 힘들다.

쿠버네티스로 대표되는 컨테이너 오케이스트레이션 엔진을 사용해 이러한 시스템을 구축할 수 있다.

■ 컨테이너 오케스트레이션 엔진의 종류

  • 도커스윔
  • 아파치 메소스
  • 쿠버네티스

◎ 쿠버네티스로 할 수 있는 것?

컨테이너란 ‘어떤 애플리케이션을 실행하도록 빌드된 컨테이너 이미지를 기반으로 기동된 워크로드’ 이러한 컨테이너를 서비스 환경에서 사용하기 위해서는 아래의 과제들을 고려해야 한다.

  • 여러 쿠버네티스 노드 관리
  • 컨테이너 스케줄링
  • 롤링 업데이트
  • 스케일링/오토 스케일링
  • 컨테이너 모니터링
  • 자동화된 복구
  • 서비스 디스커버리
  • 로드 밸런싱
  • 데이터 관리
  • 워크로드 관리
  • 로그 관리
  • 선언적 코드를 사용한 관리
  • 그 외 에코시스템 과의 연계 및 확장

◎ 쿠버네티스의 특징?

■ 1. 선언적 코드를 사용한 관리(IaC)

쿠버네티스는 YAML 형식이나 JSON형식으로 작성한 선언적 코드(매니패스트)를 통해 qovgksms 컨테이너로 주변 리소스를 곤리할 수 있다. 즉 IaC(Infrastructure as Code)를 구현할 수 있다.

<매니패스트 파일 예제>
apiVersion: apps/v1 
kind: Deployment 
metadata:   
  name: sample-deployment 
spec:   
  replicas: 3   
  selector:     
    matchLabels:       
      app: sample-app   
    template:     
      metadata:       
        labels:         
          app: sample-app     
      spec:       
        containers:         
	- name: nginx-container           
           image: nginx:1.16

■ 2. 스케일링/오토 스케일링

쿠버네티스는 컨테이너 클러스터를 구성하여 여러 쿠버네티스 노드를 관리한다.
쿠버네티스의 오토스케일링은 같은 컨테이너 이미지를 기반으로 하여 여러 컨테이너 레플리카를 배포하여 부하 분산 및 다중화 구조를 생성한다. (부하에 따라 자동으로 레플리카 수를 늘이거나 줄인다.)

■ 3. 스케줄링

컨테이너를 쿠버네티스 노드에 배포할 때 어떤 쿠버네티스 노드에 배포할지를 결정하는 단계이다.
이때 워크로드의 특징이나 노드의 성능을 그 기준으로 삼는다.
ex) 디스크 I/O가 많은 컨테이너를 디스크가 SSD인 쿠버네티스 노드에 배치

또 쿠버네티스 클러스터를 GCP/AWS/OpenStack 등에 구축한 경우 쿠버네티스 노드에 가용영역 등을 식별하는 추가 정보가 부여되어 있어 쉽게 멀티존 위에 컨테이너를 분산 배치할 수 있다.

■ 막간 용어

  • 어피니티(Affinity) : ‘선호도’라는 뜻을 가지고 있으며 레이블, 토폴로지 및 기타 요소를 기반으로 노드에서 Pod 예약 규칙을 지정할 수 있는 쿠버네티스 기능이다.
    즉 선호도 규칙을 정하는 것이라고 생각하면 된다.
  • 안티어피니티(Anti-Affinity) : 특정 포드가 동일한 노드에 함께 배치되지 않도록 지정하는 일종의 포드 스케줄링 제약 조건이다.
    중요한 포드가 다른 포드의 장애 또는 성능문제의 영향을 받지 않도록 하기 위해 사용한다.
  • 포드(Pod) : 쿠버네티스 객체 모델에서 가장 작고 단순한 단위이다.
    클러스터에서 실행중인 단일 인스턴스를 나타낸다.
    포드에는 하나 이상의 컨테이너가 포함되며 동일한 호스트, 동일한 네트워크 네임스페이스를 공유한다.

■ 4. 리소스 관리

컨테이너 배치에 대한 지정이 없을 경우 쿠버네티스 노드의 CPU나 메모리의 여유 리소스 상태에 따라 스케줄링된다.

■ 5. 자동화된 복구

다중화(fault tolerant) 관점에서 쿠버네티스의 중요한 콘셉트 중 하나이다.
쿠버네티스는 표준으로 컨테이너 프로세스를 모니터링하고 프로세스 정지를 감지하면 다시 컨테이너 스케줄링을 실행하여 컨테이너를 자동으로 재배포한다.
클러스터 노드에 장애가 발생하거나 노드를 축출했을 경우 그 노드의 컨테이너가 사라진다 해도 서비스에 영향 없이 애플리케이션을 자동으로 복구 할 수 있다.

복구 실행 조건에는 프로세스 모니터링 외에 HTTP/TCP나 셸 스크립트로 헬스 체크의 성공 여부를 설정할 수도 있다.

■ 6. 로드 밸런싱과 서비스 디스커버리

여러대로 구성된 애플리케이션을 하나의 애플리케이션으로 사용자에게 보여주고 접속시키려면 목적지가 되는 엔드 포인트를 하나로 통합할 필요가 있다. 로드밸런서의 주소가 그 역할을 한다.

컨테이너 확장시 엔드포인트가 되는 서비스에 컨테이너의 자동 등록과 삭제 컨테이너 장애시 분리, 롤링 업데이트 시 필요한 사전 분리 작업을 자동으로 진행한다. (엔드포인트의 관리를 쿠버네티스에게 맡긴다.)

컨테이너를 사용해 시스템을 구축시 마이크로서비스 아키텍처를 많이 선택하게 된다, 이때 각각의 마이크로서비스는 서로를 참조하는데 이때 서비스 디스커버리 기능이 매우 유용하다.
이를 통해 각각의 마이크로 서비스가 정의된 복수의 매니페스트를 이용하여 시스템 전체를 쉽게 연계 할 수 있다.

■ 7. 데이터 관리

쿠버네티스는 백엔드 데이터 스토어로 etcd를 채용하고 있다.
etcd는 클러스트를 구성하여 이중화가 가능하고 컨테이너나 서비스의 매니페스트 파일도 이중화 구조로 저장한다.
컨테이너가 사용하는 설정 파일이나 인증 정보 등의 데이터를 저장하는 구조도 가지고 있어 컨테이너 공통 설정이나 애플리케이션에서 사용되는 데이터베이스 인증 정보 등을 안전하고 이중화된 상태로 쿠버네티스에서 집중적으로 관리할 수 있다.


■ 쿠버네티스를 지원하는 미들웨어

  • Ansible : 쿠버네티스에 컨테이너 배포
  • Apache Ignite : 쿠버네티스 서비스 디스커버리를 사용한 클러스터 생성과 스케일링
  • Fluentd : 쿠버네티스에 컨테이너 로그 전송
  • GitLab : CI/CD를 구현하기 위한 일련의 다양한 도구와 쿠버네티스의 통합
  • Jenkins : 잡(Job) 실행 시 잡 실행자용 컨테이너를 쿠버네티스에 배포
  • OpenStack : 클라우드 사업자와 연계한 쿠버네티스 구축
  • Prometheus : 쿠버네티스 모니터링
  • Spark : 잡을 쿠버네티스에서 네이티브로 실행한다.(YARN을 대체한다.)
  • Spinnaker : 쿠버네티스에 컨테이너 배포
  • Kubeflow : 쿠버네티스에 ML 플랫폼 배포
  • Rook : 쿠버네티스에 분산 파일 시스템 배포
  • V itess : 쿠버네티스에 MySQL 클러스터 배포
    그 외 다수

출처 : http://www.yes24.com/Product/Goods/102847901?pid=123487&cosemkid=go16286626147970940&gclid=Cj0KCQiA54KfBhCKARIsAJzSrdrGVlOlchyBPK-L_JxDrvcUHh2GEzpz7RSG-UZygNVCAcBIsZz-hAgaAve6EALw_wcB

해당 자료는 Kubernetes 완벽 가이드 도서의 내용을 바탕으로 정리되었습니다.

profile
DevOps를 꿈꾸는 엔지니어 지망생!

0개의 댓글