Deployment 리소스 소개
쿠버네티스 클러스터 안에는 모든 리소스들을 오브젝트 형태로 관리한다. 컨테이너의 집합 (Pod), 컨테이너 집합을 관리하는 컨트롤러 (ReplicaSet), 사용자 (Service Account) 등등 을 모두 하나의 오브젝트로 사용 할 수 있다. 이 오브젝트들은 YAML 파일을 이용해서 생성 할 수 있다. 이 YAML 파일들을 Manifest(매니페스트) 파일이라고 부른다. 이 파일은 일련의 설정 정보를 포함하고 있으며, 쿠버네티스 클러스터에게 어떤 리소스를 생성하고 구성해야 하는지를 지시한다. 매니페스트 파일의 예시:
# Nginx 컨테이너로 구성된 파드를 직접 생성하는 yaml 파일 예시
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
쿠버네티스 매니페스트 YAML파일은 일반적으로 apiVersion, kind, metadata, spec 네 가지 항목으로 구성 된다.
- apiVersion yaml 파일에서 정의한 오브젝트의 API 버전
- kind 리소스의 종류(
kubectl api-resources
명령어의 KIND 항목에서 확인 가능) - metadata 리소스의 부가 정보(label, annotation, name 등)
- spec 리소스를 생성하기 위한 자세한 정보(파드에서 실행될 컨테이너 정보, 도커 이미지 정보, 포트 정보 등).
-
은 list 형식이라고 생각하면 된다.example-container
라는 이름의nginx:latest
이미지를 가진 컨테이너가 있다는 뜻이고, 포트는 80을 사용한다는 뜻이다.
kubectl apply -f <yaml 파일 이름>
명령어를 통해 쿠버네티스에 파드를 생성할 수 있다.
kubectl은 이러한 매니페스트 파일을 사용하여 쿠버네티스 클러스터를 관리하기 위한 커맨드 라인 도구이다. 개발자나 시스템 관리자는 kubectl을 활용하여 매니페스트 파일을 통해 Kubernetes 클러스터 내의 리소스를 생성, 조회, 수정, 삭제할 수 있다.
kubectl은 다양한 기능과 옵션을 제공한다. 일반적으로 다음과 같은 작업을 수행할 수 있다:
-
클러스터와의 연결: kubectl을 사용하여 Kubernetes 클러스터와 통신하고, 사용자 인증 및 인가를 설정한다.
-
리소스 관리: kubectl을 통해 파드, 서비스, 디플로이먼트 등의 리소스를 생성, 조회, 수정, 삭제할 수 있습니다. 또한, 클러스터 내의 다양한 리소스들의 상태를 확인할 수 있다.
-
로그 및 이벤트 확인: kubectl을 사용하여 파드의 로그를 확인하거나 클러스터의 이벤트를 조회할 수 있다. 이를 통해 애플리케이션의 동작 상태를 추적하고 디버깅할 수 있다.
-
스케일링 및 롤링 업데이트: kubectl을 사용하여 애플리케이션을 스케일 업/다운하거나, 롤링 업데이트를 수행할 수 있다. 이를 통해 애플리케이션의 확장성과 가용성을 관리할 수 있다.
Deployment
실제 쿠버네티스 환경에서 사용하는 오브젝트다. 디플로이먼트를 생성하면 이에 대응하는 레플리카셋도 함께 생성된다.
예시:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-nginx
template:
metadata:
name: my-nginx-pod
labels:
app: my-nginx
spec:
containers:
- name: nginx
image: nginx:1.10
ports:
- containerPort: 80
레플리카셋을 정의한 Yaml 파일과 비교해서 kind 밖에 바뀐 것이 없다. 디플로이먼트를 사용하는 핵심적인 이유는 애플리케이션의 업데이트와 배포를 편하게 하기 위해서이다. 새로운 별도의 레플리카셋이 생성되고 변경된 버전의 팟을 생성해 새로운 레플리카셋에 넣고 기존의 레플리카셋에 들어있는 팟의 수를 줄인다. 숫자로 나타내면 다음과 같다.
기존 레플리카셋 팟 숫자 - 새로운 레플리카셋의 팟 숫자. 3 - 0, 3 - 1, 2 - 2, 1 - 3, 0 - 3
kubectl describe deployment {deployment name}
의 명령어를 통해 내부적으로 어떤 이벤트들이 진행되었는지 확인할 수 있다.그리고 이러한 버전 변경에 대한 정보를 보관하고 있어 쉽게 롤백이 가능하다.kubectl rollout history deployment {deployment name}
버전 정보 조회kubectl rollout undo deployment {deployment name} --to -revision={버전 숫자}
해당 버전으로 변경