
Udemy CKA 강의 내용을 정리하였습니다.
k8s 오브젝트(Pod, Replica, Deployment, Service 등) 생성 시 yaml 파일을 사용할 수 있습니다.
k8s definition 파일에는 다음 4가지 필드를 반드시 포함해야 합니다.
# pod-definition.yaml
apiVersion:
kind:
metadata:
spec:
apiVersion: 사용할 k8s API 버전을 명시합니다. 어떤 오브젝트를 생성할지에 따라 사용하는 API 버전이 달라집니다. 다음은 대표적인 오브젝트들이 사용하는 API 버전입니다.
| Kind | Version |
|---|---|
| Pod | v1 |
| Service | v1 |
| ReplicaSet | apps/v1 |
| Deployment | apps/v1 |
kind: 어떤 오브젝트를 생성할 것인지 명시합니다. Pod, ReplicaSet 등이 있습니다. 대소문자를 구별하기 때문에 유의해서 작성합니다.
metadata: 오브젝트에 대한 정보를 명시합니다. 오브젝트의 이름, 라벨 등을 작성합니다. label 하위에는 원하는 정보를 key-value 형태로 자유롭게 작성합니다. 수많은 Pod가 생성되었을 때 이 label에 작성한 값을 해시태그처럼 활용하여 Pod들을 선택하고 원하는 기능을 적용하게 됩니다.

spec: 오브젝트를 생성하기 위해 필요한 정보들을 작성합니다. spec 하위 내용은 오브젝트의 종류에 따라 달라집니다. 우선 단일 컨테이너를 실행하는 Pod의 spec은 다음과 같이 작성합니다.
# pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers: # 실행할 컨테이너 목록
- name: nginx-container # 컨테이너 목록의 시작에 '-'를 붙인다.
image: nginx # 컨테이너에서 실행할 이미지
Pod를 생성하고 조회하기 위해 다음과 같은 명령어를 사용합니다. create 이외에도 apply 등의 명령어를 자주 사용하지만 해당 부분에 대해서는 추후 명령형과 선언형 파트에서 알아봅시다.
# yaml 파일로 pod 생성
$ kubectl create -f pod-definition.yaml
# pod 목록 조회
$ kubectl get pods
# pod 상세 정보 조회
$ kubectl describe pod myapp-pod
k8s에는 뇌 역할을 담당하는 controller 오브젝트들이 있습니다. 이 중에서도 Replica를 관리하는 ReplicaSet 대해 알아봅시다.
Replica Set과 Replication Controller는 비슷하지만 다른 개념입니다.
기본적으로 같은 역할을 수행하긴 하지만 Replica Set이 더욱 최신 기술이며 권장되는 방식입니다.
현재는 Replica Set이 Replication Controller를 대체한 상태입니다.
ReplicaSet은 선언한 Pod 개수를 유지하는 역할을 합니다. 일부 Pod가 실행이 중단되어도 ReplicaSet이 다시 선언한 Pod 개수만큼 실행되도록 Pod를 새로 띄워줍니다.
ReplicaSet은 여러 노드에 걸쳐 로드 밸런싱과 스케일링을 수행할 수 있습니다. 유저 요청이 급증하면 다른 노드에 Pod를 띄울 수 있고 여러 노드에 걸져 로드 밸런싱을 수행합니다.

template: ReplicaSet에서 생성할 Pod 템플릿을 작성합니다.replicas: 유지할 Pod 개수를 지정합니다.selector: 해당 ReplicaSet이 관리할 Pod를 matchLabels에서 지정합니다. (즉, 기존 실행 중이던 Pod도 ReplicaSet이 관리할 수 있습니다.)아래와 같은 명령어로 Replica Set을 생성, 수정할 수 있습니다. 물론 아래와 같은 명령어 외에도 선언적으로 다룰 수 있는 방법이 있습니다. 해당 부분 역시 명령형과 선언형 파트에서 알아보겠습니다.
# Replica Set 생성
$ kubectl create -f replicaset-definition.yml
# Replica Set 조회
$ kubectl get replicaset
# Scale - yml 파일에서 replicas 조정 후 replace
$ kubectl replace -f replicaset-definition.yml
# Scale - scale 명령어로 replica 수 조정
$ kubectl scale --replicas=6 -f replicaset-definition.yml

위 그림을 보면 Deployment 안에 ReplicaSet이 있는걸 볼 수 있습니다. Deployment를 생성하면 ReplicaSet이 자동으로 생성됩니다. 이 내용은 바로 다음 부분에서 한 번 더 살펴보겠습니다.
Deployment를 정의하는 yaml 파일은 ReplicaSet을 정의하는 yaml 파일과 동일합니다.
차이점은 kind에 ReplicaSet이 아닌 Deployment를 작성하는 것 뿐입니다.

Deployment를 실행하고 조회하는 명령어입니다.

위 명령어로 나온 결과물을 보면 Deployment를 생성했을 때 Deployment에 지정한 이름을 바탕으로 ReplicaSet, Pod가 생성된 것을 확인할 수 있습니다.