# 쿠버네티스의 YAML 설정 파일에 대해서 알아보자.
- Deployment란?
디플로이먼트는 간단하게 말해서 pod + 리플리카 셋 입니다.
리플리카 셋은 파드의 수를 수시로 체크하고 상태를 유지해주는 오브젝트 입니다.
디플로이 먼트를 생성할때는 기본적으로 create, apply를 사용합니다.
- Configuration 파일의 3가지 구성요소?
1. metadata : 리소스의 라벨, 이름 등을 지정함
2. specificaion : 각 컴포넌트에 대한 상세 설명 및 어떤 오브젝트 종류인지에 내용을 설명
3. status : 쿠버네티스가 자동으로 생성, 자신의 원하는 상태가 되도록 현재 상태를 나타냄
- 예를 들어 spec에 replicas가 2라고 명시되어 있지만 현재 상태는 status에는 1개로 명시 되어 있다면, 목표 상태로 맞추기 위해 replicas를 하나 더 생성하게 된다.
- apiVersion은 스크립트를 실행하기 위한 쿠버네티스 API 버전을 명시하고 Kind는 리소스의 종류를 명시한다. (POD, Service, ReplicaSet, Deployment)
[ Labels & Selectors ]
Labels : Pod와 같은 오브젝트에 첨부된 키와 값의 쌍이다. 오브젝트의 특성을 식별하는데 있어 사용자에게 중요하지만, 시스템에 직접적인 의미는 없다.
Selectors : Label을 기반으로 오브젝트를 어떻게 선택하는지에 대한 방법의 표현이다.
- 예를 들어 하나의 오브젝트에 Key-Value로 Label을 지정하고, Selector로 env: dev인걸 선택하면, env가 dev인 것들만 나오게 된다는 뜻이다.
- 예제를 통해서 자세히 알아보자.
예제1) nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata: # 3가지 필수 구성요소중 하나
name: nginx-deployment # 해당 이름으로 디플로이 먼트가 생성됨.
labels:
app: nginx
spec: # 3가지 필수 구성요서중 하나 specification, 나머지 하나는 status
replicas: 3 # 3개의 리플리카 pod를 생성한다.
selector: # 디플로이먼트가 관리할 파드를 찾는 방법을 정의, matchLabels이 nginx인 파드를 디플로이먼트가 관리한다.
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx # 파드는 .metadata.labels 필드를 사용 app: nginx 라는 레이블을 붙인다.
spec:
containers:
- name: nginx # 컨테이너 1개를 생성, .spec.template.spec.containers[0].name 필드를 사용해서 nginx 라는 이름을 붙인다.
image: nginx:1.14.2 # 파드가 도커 허브의 nginx 1.14.2 버전 이미지를 실행하는 nginx 컨테이너 1개를 실행하는 것을 나타낸다.
ports:
- containerPort: 80
- .metadata.name 필드에 따라 nginx-deployment 이름으로 디플로이먼트가 생성된다.
- .spec.replicas 필드에 따라 디플로이먼트는 3개의 레플리카 파드를 생성한다.
- .spec.selector 필드는 디플로이먼트가 관리할 파드를 찾는 방법을 정의한다. 이 사례에서는 파드 템플릿에 정의된 레이블(app: nginx)을 선택한다. 그러나 파드 템플릿 자체의 규칙이 만족되는 한, 보다 정교한 선택 규칙의 적용이 가능하다.
- template 필드에는 다음 하위 필드가 포함되어있다.
- 파드는 .metadata.labels 필드를 사용해서 app: nginx 라는 레이블을 붙인다.
- 파드 템플릿의 사양 또는 .template.spec 필드는 파드가 도커 허브의 nginx 1.14.2 버전 이미지를 실행하는 nginx 컨테이너 1개를 실행하는 것을 나타낸다.
- 컨테이너 1개를 생성하고, .spec.template.spec.containers[0].name 필드를 사용해서 nginx 이름을 붙인다.
- 추가로 .metadata.labels의 app은 향후 어느 리소스가 이 app 값을 디플로이먼트를 참고하려할때 필요한 값을 지정해주기 위한 것이고, .spec.selector.matchLabels의 app은 .spec.template.metadata.labels의 app을 참조하는 것이다.
.spec.template.metadata.labels의 app을 지정해줌으로써 .selector.matchLabels에서 리소스를 찾을 수 있다.
- 아래 명령을 이용하여 yaml 파일로 명시한 방법으로 디플로이먼트를 생성한다.
kubectl apply -f nginx-deployment.yaml
예제2) tomcat-deployment.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: tomcat-deployment
spec:
selector:
matchLabels:
app: tomcat
replicas: 4
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:9.0
ports:
- containerPort: 8080
nodeSelector: # nodeSelector는 이미지를 가져다가 설치할 때 노드의 SSD에 설치하라고 지정하는 selector이다.
storageType: ssd
nginx 예제와 비슷하지만 nodeSelector는 이미지를 가져다가 설치할 때 노드의 SSD에 설치하라고 지정하는 selector이다.
마찬가지로 아래 명령을 이용하여 yaml 파일로 명시한 시방서로 디플로이먼트를 생성한다.
kubectl apply -f tomcat-deployment.yaml
- YAML 문법이 맞는지 검사하는 사이트
onlineyamltools.com/validate-yaml
- 끝 -
'⭐ Kubernetes & EKS > k8s (쿠버네티스)' 카테고리의 다른 글
kubernetes 클러스터 명령어 모음 및 자동완성 설정하기 (0) | 2022.10.27 |
---|---|
pod 삭제 명령어 (0) | 2022.03.04 |
Hpa 삭제 후 재 생성 (0) | 2021.11.10 |
k8s 새로운 namespace를 생성하고, nginx deply 후에 hpa를 활성화 해보자 (0) | 2021.11.09 |
k8s 쿠버네티스 기본 namespace 변경하기 (0) | 2021.11.09 |