본문 바로가기
스터디/쿠버네티스 & 도커

[쿠버네티스 / 도커] 03. 컨테이너를 다루는 표준 아키텍처, 쿠버네티스

by 디토20 2022. 6. 21.
반응형

 

 

 

 

[쿠버네티스 / 도커] 03. 컨테이너를 다루는 표준 아키텍처, 쿠버네티스

 

 

 

1. 쿠버네티스 이해하기

- 쿠버네티스는 컨테이너 오케스트레이션을 위한 솔루션이다. 오케스트레이션이란 복잡한 단계를 관리하고 요소들의 유기적인 관계를 미리 정의해 손쉽게 사용하도록 서비스를 제공하는 것을 의미한다. 다수의 컨테이너를 유기적으로 연결, 실행, 종료할 뿐만 아니라 상태를 추적하고 보존하는 등 컨테이너를 안정적으로 사용할 수 있게 한다.

 

 

1.2. 쿠버네티스 구성 방법 3가지

1.2.1 퍼블릭 클라우드

  • EKS, AKS, GKE등 퍼블릭 클라우드 업체에서 제공하는 관리형 쿠버네티스를 사용한다.
  • 구성이 이미 다 갖춰져 있고 마스터 노드를 클라우드 업체에서 관리한다.

 

1.2.2 설치형 쿠버네티스

  • Rancher, OpenShift와 같은 플랫폼에서 제공하는 설치형 쿠버네티스
  • 유료라 쉽게 접근하기 어렵다.

 

1.2.3 구성형 쿠버네티스

  • 사용하는 시스템에 쿠버네티스 클러스터를 자동으로 구성해주는 솔루션
  • kubeadm, kops, KRIB, kubespray 등이 있다.
  • kubeadm이 가장 널리 알려져있다. 사용자가 변경하기도 수월하고 온프레미스와 클라우드 모두를 지원하며 러닝커브도 낮음.

 

 

1.3. 파드를 배포할때 실행되는 순서

 

 

마스터 노드
  • 0. kubectl : 쿠버네티스 클러스터에 명령을 내리는 역할
  • 1. API 서버 : 쿠버네티스 클러스터의 중심 역할을 하는 통로. 주로 상태 값을 저장하는 etcd와 통신하지만, 그 밖의 요소들 또한 API 서버를 중심에 주고 통신하므로 매우 중요한 역할.
  • 2. etcd : 구성 요소들의 상태 값이 모두 저장되는 곳. etcd의 정보만 백업되어 있다면 장애 상황에서도 쿠버네티스 클러스터 복구가 가능.
  • 3. 컨트롤러 매니저 : 쿠버네티스 클러스터의 오브젝트 상태를 관리. 예를들어 워커 노드에서 통신이 되지 않는 경우, 상태 체크와 복구는 컨트롤러 매니저에 속한 노드 컨트롤러에서 이루어진다.
  • 4. 스케줄러 : 노드의 상태와 자원, 레이블, 요구 조건 등을 고려해 파드를 어떤 워커 노드에 생성 할 것인지를 결정하고 할당. 파트를 조건에 맞는 워커 노드에 지정하고, 파드가 워커 노드에 할당되는 일정을 관리

 

워커 노드
  • 5. kubelet : 파드의 구성 내용을 받아서 컨테이너 런타임으로 전달하고, 파트 안의 컨테이너들이 정상적으로 작동하는지 모니터링
  • 6. 컨테이너 런타임 : 파드를 이루는 컨테이너의 실행을 담당. 파드 안에서 다양한 종류의 컨테이너가 문제 없이 작동하게 만드는 표준 인터페이스
  • 7. 파드 : 한개 이상의 컨테이너로 단일 목적의 일을 하기 위해 모인 단위. 웹 서버의 역할을 할 수도 있고 로그나 데이터 분석을 할 수도 있다. 중요한 점은 언제라도 죽을 수 있는 존재

 

기타 옵션
  • 11. 네트워크 플러그인 : 쿠버네티스 클러스터의 통신을 위해  사용
  • 12 CoreDNS : 쿠버네티스 클러스터에서 도메인 이름을 이용해 통신 할 때 사용

 

 

 

1.4. 파드의 생명주기로 쿠버네티스 구성요소 알아보기

- 생명주기는 파드가 생성, 수정, 삭제 되는 과정을 나타낸다.

 

  1. kubectl을 통해 API 서버에 파드 생성을 요청
  2. API 서버에 전달된 내용이 있으면 API 서버는 전달된 내용을 etcd에 모두 기록해 클러스터의 상태값을 최신으로 유지
  3. 컨트롤러 매니저는 파드를 생성하고, 이 상태를 API 서버에 전달. 어떤 워커 노드에 파드를 적용할지는 결정되지 않은 채로 파드만 생성
  4. API 서버에 파드가 생성됐다는 정보를 스케줄러가 인지. 스케줄러는 생성된 파드를 어떤 워커 노드에 적용할지 조건을 고려해 결정하고 해당 워커 노드에 파드를 띄우도록 요청
  5. API 서버에 전달된 정보대로 지정한 워커 노드에 파드가 속해 있는지 스케줄러가 kubelet으로 확인.
  6. kubelet에서 컨테이너 런타임으로 파드 생성을 요청.
  7. 파드가 생성
  8. 파드가 사용 가능한 상태로 변경

 

 

 

2. 쿠버네티스 기본 사용법

2.1 파드를 생성하는 법

run
kubectl run nginx-pod --image=nginx

- 단일 파드 1개만 생성되고 관리된다.

 

 

create
kubectl create deployment dpy-nginx --image=nginx

- 디플로이먼트라는 관리 그룹 내에서 파드가 생성된다.

 

 

 

2.2 오브젝트란

- 쿠버네티스의 파드와 디플로이먼트는 스펙(spec)과 상태(status) 등의 값을 가진다. 이런 값을 가진 파드와 디플로이먼트를 개별 속성을 포함해 부르는 단위를 오브젝트라고 한다.

 

2.2.1 기본 오브젝트

파드
  • 쿠버네티스에서 실행되는 최소 단위, 즉 웹서비스를 구동하는 데 필요한 최소 단위
  • 독립적인 공간과 사용 가능한 IP를 가짐
  • 하나의 파드는 1개 이상의 컨테이너를 갖고 있어서 여러 기능을 묶어 하나의 목적으로 사용할 수 있다.
  • 범용으로 사용할 때는 대부분 1개의 파드에 1개의 컨테이너를 적용

 

네임스페이스
  • 쿠버네티스 클러스터에서 리소스들을 구분해 관리하는 그룹
  • default : 특별히 지정하지 않을 경우 기본으로 할당
  • kube-system : 쿠버네티스 시스템에서 사용
  • metallb-system : 온프레미스 k8s 사용시, 외부에서 k8s 클러스터 내부로 접속하게 도와주는 컨테이너들의 그룹

 

볼륨
  • 파드가 생성될 때 파드에서 사용할 수 있는 디렉터리를 제공
  • 기본적으로 파드는 영속되는 개념이 아니라 디렉터리도 임시로 사용
  • 그러나 파드가 사라지더라도 저장과 보존이 가능한 디렉터리를 볼륨 오브젝트를 통해 생성하고 사용 가능

 

서비스
  • 파드는 클러스터 내에서 유동적이기 때문에 접속 정보가 고정일 수 없다.
  • 서비스는 새로 파드가 생성될 때 부여되는 새로운 IP를 기존에 제공하던 기능과 연결해준다.
  • 기존 인프라에서 로드밸런서, 게이트웨이와 비슷한 역할을 한다.

 

 

2.2.2 디플로이먼트

- 기본 오브젝트만으로도 쿠버네티스를 사용할 수 있지만 한계가 있어 이를 좀 더 효율적으로 작동하도록 기능들을 조합하고 추가해 구현한 것이 디플로이먼트이다. 이 외에도 데몬셋, 레플리카셋 등이 있으며 요구 사항에 따라 목적에 맞는 오브젝트들이 추가된다. 쿠버네티스에서 가장 많이 쓰는 디플로이먼트 오브젝트는 파드에 기반을 두고 있으며, 레플리카셋 오브젝트를 합쳐놓은 형태이다.

 

API 서버와 컨트롤러 매니저는 단순히 파드가 생성되는 것을 감시하는 것이 아니라 디플로이먼트처럼 레플리카셋을 포함하는 오브젝트의 생성을 감시합니다.

 

 

728x90
반응형

댓글