Kubernetes 개념 한판 정리

Kubernetes의 정의

  • Container화 된 application을 배포/관리해주는 오픈소스 Container Orchestrator Framework

Kubernetes에서 제공하는 기능

  1. Service Discovery

DNS 이름 또는 자체 IP주소를 사용해서 Client가 사용할 Container를 노출할 수 있음. Traffic을 Load Balancing하고, AutoScaling이 가능하다.

  1. Storage Orchestration

원하는 저장소 시스템을 탑재할 수 있다.

  1. 자동화된 binPacking

container화된 작업을 실행하는데 사용할 수 있는 kubernetes cluster 노드를 제공하며, 각 container가 필요로 하는 CPU , RAM을 설정하면 kubernetes가 container를 resource를 가장 잘 사용할 수 있는 node에 배포한다.

  1. 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
  • 기본적으로 k8s 를 실행하면 몇 개의 namespace가 자동으로 생성됩니다. 이 중 default namespace는 기본 namespace로 별도로 k8s에 namespace를 지정하지 않으면 항상 이 default namespace에 명령이 적용된다.

Kubernetes Object 기술하기

kubernetes에서는 object를 생성할때, object의 spec을 지정해주어야 한다.
대부분 yaml파일로 kubectl CLI에 제공한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80

대표적으로 사용되는 필드값들은 다음의 의미를 나타낸다.

  • apiVersion : object를 생성하기 위한 Kubernetes버전
  • kind : 생성할 object의 종류
  • metadata : object를 유일하게 구분지어 줄 데이터
  • spec : object에 의도하는 상태값들
Read more