오답노트

[k8s] 컨테이너 배포/통신/볼륨 관리 본문

Infra/Kubernetes

[k8s] 컨테이너 배포/통신/볼륨 관리

권멋져 2022. 11. 7. 01:54

Kubernetes Object

가장 기본적인 구성단위로 상태를 관리하는 역할을 한다. 기본적인 오브젝트로는 Pod, Service, Volume, Namespace가 있다

.

오브젝트는 Spec(정의된 상태)와 Status(현재 상태)가 존재한다.

 

Namespace는 단일 클러스터 내 리소스 그룹 격리를 위한 오브젝트이다. 이는 사용자가 여러 팀으로 구성하는 경우, 프로젝트를 진행함에 있어 환경을 분리 해야 하는 경우 사용한다.

 

Kubernetes Controller

각 컨트롤러는 현재 상태(Status)를 정의된 상태(Spec)에 가깝게 유지하려 한다.

 

  1. 관찰 : 현재 상태를 관찰한다.
  2. 상태 변동 : 현재 상태와 정의한 상태를 비교한다.
  3. 조치 : 현재 상태를 정의한 상태로 변경한다. 그리고 다시 관찰 단계로 돌아간다.

 

Auto Healing

쿠버네티스에는 Pod나 Node가 손상되었거나 정상작동을 하지 못할때 이를 자동적으로 정상상태로 돌리는 기능이 있다. 그것이 Auto Healing이다. 먼저 Controller에서는 계속해서 각 pod들을 모니터링하고 있기 때문에 기능에 문제가 발생하면 즉시 인지하고 처리할 수 있다.

 

Auto Scaling

리소스 부하가 커지면 pod의 수를 늘리고, 작아지면 pod의 수를 줄인다.

 

Update & Rollback

버전을 업데이트 하거나 되돌릴 수 있다.

 

Update Flow

Update 방식에는 Recreate와 Rolling Update가 있다.

 

Recreate : 현재 운영중인 Pod를 삭제하고 업데이트 된 Pod들을 생성(DownTime 발생)

Rolling Update : 먼저 업데이트된 Pod를 하나 생성하고 구버전의 Pod를 삭제하여 Downtime 없이 업데이트 가능 (리소스가 여유가 있을 때 사용가능)

 

Rollback

Deployment는 이전버전의 ReplicaSet을 10개까지 저장(revisionHistoryLimit 속성을 설정하면 개수를 변경 가능)

 

Deployment

ReplicaSet을 관리하여 애플리케이션의 배포를 더욱 세밀하게 관리(버전 업데이트 or 롤백)한다.

 

ReplicaSet란 Pod 개수를 유지시켜준다. yaml 을 작성할 때 replica 개수를 지정하면 그 개수에 따라 pod의 개수를 유지한다

 

업데이트 시 ReplicaSet의 Replicas를 0으로 만들어 롤백시 에 사용한다.

 

kubectl은 Kubernetes에 명령을 내리는 CLI(Command Line Interface) 이다. 오브젝트와 컨트롤러를 생성, 수정, 삭제 등 명령을 입력할 수 있다.

 

 

Yaml

Yaml은 오브젝트를 정의하는 파일양식이다.

Yaml 구조는 아래와 같다.

  • apiVersion : 연결할 API server의 버전
  • kind : 리소스의 유형
  • metadata : 리소스가 기본 정보를 갖고 있는 필드 name, label, namespace 등
  • spec : 배포되는 리소스의 원하는 상태