Kubernetes 개념 한판 정리
Kubernetes의 정의
- Container화 된 application을 배포/관리해주는 오픈소스 Container Orchestrator Framework
Kubernetes에서 제공하는 기능
- Service Discovery
DNS 이름 또는 자체 IP주소를 사용해서 Client가 사용할 Container를 노출할 수 있음. Traffic을 Load Balancing하고, AutoScaling이 가능하다.
- Storage Orchestration
원하는 저장소 시스템을 탑재할 수 있다.
- 자동화된 binPacking
container화된 작업을 실행하는데 사용할 수 있는 kubernetes cluster 노드를 제공하며, 각 container가 필요로 하는 CPU , RAM을 설정하면 kubernetes가 container를 resource를 가장 잘 사용할 수 있는 node에 배포한다.
- self-healing
실패한 container 재시작, 교체기능을 가지고 있다.
Kubernetes Object 이해하기
object
란 k8s cluster에 대해 의도한 상태를 명세해놓은 하나의 “의도를 담은 레코드”이다.
( https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/kubernetes-objects/ )
object에는 대표적으로 pod
, service
, volume
, namespace
등 이 있다.
object를 관리하는 controller
는 사용자가 바라는 상태와 현재 상태가 일치하도록 object를 생성/삭제한다.
controller에는 대표적으로 ReplicaSet
, Deployment
, DemonSet
, Job
등이 있다.
스쿼드별로 하나의 kubernetes cluster를 공유하기
namespace
는 하나의 k8s cluster를 여러 개의 논리적인 단위로 쪼개서 사용한다.- namespace를 통해 하나의 k8s cluster를 공유하되, 논리적으로 구분할 수 있다.
- 기본적으로 k8s 를 실행하면 몇 개의 namespace가 자동으로 생성됩니다. 이 중
default
namespace는 기본 namespace로 별도로 k8s에 namespace를 지정하지 않으면 항상 이default
namespace에 명령이 적용된다.
Kubernetes Object 기술하기
kubernetes에서는 object를 생성할때, object의 spec을 지정해주어야 한다.
대부분 yaml파일로 kubectl CLI에 제공한다.
1 | apiVersion: apps/v1 |
대표적으로 사용되는 필드값들은 다음의 의미를 나타낸다.
- apiVersion : object를 생성하기 위한 Kubernetes버전
- kind : 생성할 object의 종류
- metadata : object를 유일하게 구분지어 줄 데이터
- spec : object에 의도하는 상태값들