이전 글
[EKS] Amazon EKS - What is conatiner?
[EKS] Amazon EKS - What is Kubernetes?
Pod
`Pod`는 쿠버네티스로 배포할 수 있는 가장 작은 단위이고, 일반적으로 하나 또는 그 이상의 컨테이너로 구성된다. 각 마이크로 서비스들은 이러한 `Pod`들로부터 동작한다. 여러 마이크로 서비스들을 하나의 `Pod` 안에서 관리하지 않음으로써 모듈화와 개별적인 스케일링의 이점을 얻을 수 있다. 그렇다면 이러한 `Pod`들을 쿠버네티스 상에서 어떻게 배포할 수 있을까?
manifest file
쿠버네티스 manifest 파일은 JSON 또는 YAML 형식으로 쿠버네티스 오브젝트의 상태를 기술한다.
apiVersion: v1
kind: Pod
metadata:
name: hello-app
labels:
app: myapp
spec:
containers:
- name: helloapp
image: reg/helloapp:v1
ports:
- containerPort: 80
`apiVersion`: 쿠버네티스 API 버전, 여기서 v1은 Pod 리소스를 정의할 때 사용하는 API 버전이다.
`kind`: 생성하려는 쿠버네티스 리소스의 유형을 정의한다.
`metadata`: Pod를 식별하기 위한 메타데이터를 정의.
`spec`: Pod의 구체적인 내용을 정의. 해당 Pod에 어떤 컨테이너가 들어갈지와 어떤 이미지를 사용할 것인지 등
위 manifest 파일에서는 `Pod`의 배포와 관련한 내용을 작성했지만, `Pod`는 일시적 또는 일회용으로 간주되기 때문에 이러한 방식으로는 잘 사용되지 않는다. 일반적으로 `deployment` 또는 `replicat set`을 사용한다.
Deployment & Replica Set
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-deployment
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: helloapp
image: reg/helloapp:v1
ports:
- containerPort: 80
위 예제는 쿠버네티스의 `deployment` yaml 파일의 예시이다. 위에서 작성한 `Pod`의 명세가 `template` 항목에 들어가 있는 것을 볼 수 있다. `deployment`는 이러한 `Pod`의 명세를 `template`으로 활용하면서 `Pod`들을 생성한다.
`spec`: deployment의 구체적인 스펙을 명시한다. `replica`를 통해 3개의 Pod 복제본을 유지하도록 할 수 있다.`selector`는 Pod들이 deployment 상에서 어떤 범위에 속하는지를 식별할 수 있게 해준다.
좀 더 이해가 쉽도록 그림으로 나타내면 위와 같이 `Deployment` 안에 `Replica Set` 안에 3개의 `Pod` 복사본들이 들어 있는 형태로 생각할 수 있다. 명시적으로 `Replica Set`을 생성해주지는 않았지만 `Deployment`는 자동으로 `Replicat Set`을 생성하고 이를 통해 스케일을 관리하고 `Pod`들을 관리한다. 예를들어 `Pod`가 다운되는 상황에 대해 새로운 Replica를 생성하는 작업 등이 있다.
`Deployment`는 `Pod`들을 쉽게 관리하는 이러한 이점들과 더불어 업데이트 측면에서도 큰 장점이 있다. `Pod`에 사용하는 이미지의 버전을 바꾸는 상황을 상상해보자. 위 yaml 파일에서 image 의 버전을 `reg/helloapp:v2`로 바꿔주기만 하면 모든 `Pod`들이 refresh 된다. `Deployment`는 이러한 기능들을 제공하며 다운타임 없이 변경사항을 쉽게 관리할 수 있도록 도와준다. 그렇다면 쿠버네티스에서는 이러한 오브젝트들의 생명주기를 어떻게 관리할까?
Control loop
`control loop`는 config 상태를 확인하고 현재 상태가 config 상태와 일치하는지를 지속적으로 검사한다. 만약 replica의 수가 3에서 4로 바뀌고, 이미지의 버전이 v1에서 v2로 바뀌는 등의 변화가 생긴다면, 이러한 변화를 감지하고 해당 작업을 수행한다. 쿠버네티스는 이러한 과정을 통해 오브젝트들의 생명주기를 관리하며 컨테이너들의 self-healing 등의 기능을 수행할 수 있다.
'k8s' 카테고리의 다른 글
[EKS] Amazon EKS - Amazon EKS Explained (0) | 2024.07.07 |
---|---|
[EKS] Amazon EKS - What is Kubernetes? (0) | 2024.07.04 |
[EKS] Amazon EKS - What is container? (0) | 2024.07.03 |
[k8s] Kubernetes Overview (0) | 2024.06.14 |