쿠버네티스란?
- 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼이다.
- 도커의 등장으로 컨테이너 기반 배포 방식이 보편화 되고 많은 서비스 들이 도커라이징 되어 이미지로 관리 -> 관리할 일들이 많아져 컨테이너 오케스트레이션 툴의 필요성이 대두 -> 쿠버네티스 개발
- google, ms, redhat 등 수 많은 기업이 참여
- label과 namespace 기능으로 유연하게 리소스를 관리
특징
- 컨테이너화된 애플리케이션 배포: 컨테이너로 패키징된 애플리케이션을 여러 대의 컴퓨터 또는 클라우드 인프라에 쉽게 배포할 수 있다.
- 자동 스케일링: 애플리케이션의 부하에 자동으로 서버를 줄일 수 있어 트래픽 증가에 대처하기 용이하다.
- 고가용성: 애플리케이션을 여러 서버에 복제하여 하나의 서버에 장애가 발생해도 시스템이 계속 동작할 수 있게 한다.
- 자동 복구: 애플리케이션의 문제 또는 장애가 발생하면 자동으로 복구하거나 롤백할 수 있다.
- 선언적 구성: YAML, JSON 파일을 사용하여 애플리케이션이 원하는 상태를 정의하고 그 상태를 유지할 수 있다.
쿠버네티스 상태
- 관리자가 서버를 배포할 때 직접적인 동작을 명령하지 않고 Desired State(원하는 상태)를 선언하는 방식을 사용.
Desired State
- 관리자가 발하는 환경
- 현재 상태를 모니터링 하면서 관리자가 원하는 상태를 유지하는 방향으로 동작
- 쿠버네티스를 사용하려면 어떤 상태에 있고 어떻게 상태를 선언해야 하는지 알아야 함.
- 좀 더 구체적으로는 얼마나 많은 웹 서버가 떠 있으면 좋은지, 몇 번 포트로 서비스하기 원하는지 등등.
쿠버네티스 개념과 구성요소
- 중앙에 API 서버와 상태 저장소를 두고 각 서버의 kubelet과 통신하는 구조
- 모든 명령은 마스터의 API 서버를 호출하고 노드는 마스터와 통신하면서 필요한 작업을 수행
- Kubectl라는 client 도구를 통해 API 서버 접근 가능
kubernetes Object
- 쿠버네티스에는 가장 기본적인 구성단위가 되는 기본 Object와 이러한 Object를 생성하고 관리하는 Controller가 있다.
- Object는 스펙으로 기술되는데, cli를 이용해 직접 명령어를 실행시키거나 yaml, json과 같은 템플릿 형식으로 정의한다.
쿠버네티스의 대표적인 Object는 Pod, Deployment, Service가 있다.
Pod
- 쿠버네티스에서 배포할 수 있는 가장 작은 단위
- 한 개이상의 컨테이너와 네트워크 스토리지 속성을 갖는다.
Replicaset, Deployment
- Pod를 여러 개 복제하여 관리하는 오브젝트
- 복제할 갯수, 갯수를 체크할 label 선택자, 생성할 pod의 설정 값등 설정
- 자동으로 롤 업데이트 가능
템플릿
- 쿠버네티스 클러스터의 오브젝트나 컨트롤러가 어떤 상태여야 하는지를 적용할 때 YAML 형식의 템플릿을 사용한다.
- YAML은 문법이 간결하고 주석을 지원하여 가독성이 좋다.
YAML 3가지 형태
- Scalars: key-value 형식으로 string과 number를 value로 갖는다.
- Sequences: -를 이용하여 배열 형태를 저장한다.
- Mappings: key-value 형식의 해쉬맵이 들어간다.
# Scalars
Name: ha2o
Url: ha2o.tistory.com
Since: 2002
# Sequences
Sills:
- java
- docker
- kubernetes
# Mappings
Desk:
Height: 170
Width: 100
기본적인 4개의 필드
- apiVersion: 사용하려는 쿠버네티스의 api 버전을 명시한다.
- kind: 어떤 종루의 오브젝트, 컨트롤러인지 명시한다.
- metadata: 메타데이터를 설정한다.
- spce: 파드가 어떤 컨테이너를 가지고 어떻게 동작할건지 명시한다.
apiVersion: v1
kind: Pod
metadata:
spec:
Master와 Woker
쿠버네티스는 여러 대의 컴퓨터가 모여서 같은 목적으로 수행되는 컴퓨터의 집합이다.
클러스터 전체를 관리하는 Master가 존재하고, 컨테이너가 배포되는 물리적인 머신을 Woker라고 한다.
Master 노드.
API 서버
- 모든 요청을 처리하는 마스터의 핵심 모듈
- 쿠버네티스 클러스터의 중심 역할을 하는 통로
- 주로 상태 값을 저장하는 etcd와 통신
- 클러스터로 온 요청이 유효한지 검증하고 다른 컴포넌트가 서로 필요한 정보를 주고 받게 된다.
etcd
- 구성 요소들의 상태 값이 모두 저장되는 곳
- etcd 정보가 백업되어 있다면 긴급 장애 상황에서 쿠버네티스 클러스터를 복구할 수 있다.
- 분산 저장이 가능한 key-value 저장소이므로, 복제해 여러 곳에 저장해 두면 하나의 etcd에서 장애가 나타나고 시스템이 가용성을 확보할 수 있다.
controller-manager
- 쿠버네티스 클러스터의 오브젝트 상태를 관리
scheduler
- 노드의 상태와 자원, 레이블, 요구 조건 등을 고려해 파드를 어떤 워커 노드에 생성할 것인지 결정하고 할당
- 파드를 조건에 맞는 워커 노드에 지정하고 파드가 워커 노드에 할당되는 일정을 관리하는 역할
Worker 노드
pod(파드)
- 쿠버네티스에서 배포할 수 있는 가장 작은 단위
- 한 개 이상의 컨테이너와 스토리지, 네트워크 속성을 가짐
- 웹 서버 역할을 할 수도 있고, 로그나 데이터 분석도 가능하다.
- 컨테이너를 하나만 사용하는 경우도 반드시 Pod로 감싸서 관
kebelet
- 파드의 구성 내용을 받아서 컨테이너 런타임으로 전달하고 파드 안의 컨테이너들이 정상적으로 작동하는지 모니터링
container runtime
- 파드를 이루는 컨테이너의 실행을 담당
- 다양한 종류의 컨테이너가 문제없이 작동하게 만드는 표준 인터페이스
Pod가 생성되는 과정
kubecti
- ReplicaSet 명세를 yml 파일로 정의하고 kubectl 도구를 이용하여 API Server에 명령을 전달
- API Server는 새로운 ReplicaSet Object를 etcd에 저장
kube Controller
- kube Contoller에 포함된 ReplicaSet Contoller가 ReplicaSet를 감시하다 정의된 Label Selector 조건을 만족하는 Pod가 존재하는지 체크
- 해당하는 Label의 Pod가 없으면 ReplicaSet의 Pod 템플릿을 보고 새로운 Pod를 생성
Scheduler
- Scheduler는 할당하지 않은 Pod가 있는지 체크
- 할당되지 않은 Pod가 있으면 조건에 맞는 Node를 찾아 해당 Pod를 할당
Kubelet
- Kubelet은 자신의 Node에는 할당되었지만 아직 생성되지 않은 Pod가 있는지 체크
- 생성되지 않은 Pod가 있으면 명세를 보고 Pod를 생성
- Pod의 상태를 주기적으로 API Server에 전달
728x90
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
[kubernetes] Pod 외부 접속 연결하기 (0) | 2024.07.09 |
---|---|
[kubernetes] Deployment란? (0) | 2024.07.08 |
[kubernetes] ReplicaSet이란? (0) | 2024.07.03 |
[Kubernetes] Pod란? (0) | 2024.07.02 |
Docker, Container and Kubernetes (0) | 2024.07.01 |