매니페스트 파일
쿠버네티스에서는 클러스터 안에서 움직이는 컨테이너 애플리케이션이나 네트워크 설정, 배치 실행을 하는 잡 등과 같은 리소스를 작성합니다. 이와 같은 구체적인 설정 정보를 파일로 관리하는데, 이것이 매니페스트 파일(manifest file)입니다.
예를 들어 'Nginx가 움직이는 컨테이너 이미지를 바탕으로 한 웹 프론트 서버를 클러스터 안에서 10개 실행' 하는 경우 다음과 같이 매니페스트 파일을 작성합니다.
#webserver.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: webserver
spec:
replicas: 10
selector:
matchLabels:
app: webfront
template:
metadata:
labels:
app: webfront
spec:
containers:
- image: nginx
name: webfront-container
ports:
- containerPort: 80
이 매니페스트 파일을 클러스터에 등록하려면 kubectl 명령을 사용합니다.
$ kubectl apply -f webserver.yaml
클라이언트의 명령을 받은 쿠버네티스 마스터의 API Service는 파일의 내용을 클러스터의 구성 정보인 etcd에 저장합니다. 쿠버네티스는 이 etcd에 기록된 정보를 바탕으로 리소스를 관리합니다.
매니페스트 파일로 정의한 리소스를 클러스터에서 삭제하려면 다음과 같이 명령어를 실행합니다.
$ kubectl delete -f webserver.yaml
매니페스트 파일 작성 방법
매니페스트 파일 작성 방법은 쿠버네티스 리소스에 따라 다르지만 기본은 다음과 같은 구조로 되어있습니다.
apiVersion: [1. API의 버전 정보]
kind: [2. 리소스의 종류]
metadata:
name: [3. 리소스의 이름]
spec:
[4. 리소스의 상세 정보]
1. API의 버전 정보
호출할 API의 버전을 지정합니다. 버전에 따라 다음과 같이 안정성과 지원 레벨이 다릅니다.
- alpha(알파)
앞으로의 소프트웨어 릴리스에서 예고 없이 호환성이 없는 방법으로 변경될 가능성이 있는 버전. 검증 환경에서만 사용할 것을 권장합니다. 또 기능 지원은 통지 없이 중지되는 경우도 있습니다. 'v1alpha1' 등으로 설정합니다. - beta(베타)
충분히 테스트를 거친 버전입니다. 단, 기능은 삭제되지 않지만 상세 내용이 변경되는 경우가 있습니다. 때문에 실제 환경 이외에서 사용할 것을 권장합니다. 구체적으로는 'v2beta3' 등으로 설정합니다. - 안정판
안정판 버전에는 'v1'과 같은 버전 번호가 붙습니다. 실제 환경에서 이용합니다.
이 외에도 KubernetesAPI 확장을 위한 API 그룹 등을 설정할 수 있습니다.
2. 리소스의 종류
쿠버네티스의 리소스 종류를 지정합니다. 리소스는 다음과 같은 것들이 있습니다.
구분 | 리소스 |
애플리케이션의 실행 | Pod/ReplicaSet/Deployment |
네트워크의 관리 | Service/Ingress |
애플리케이션 설정 정보의 관리 | ConfigMap/Secrets |
배치 잡의 관리 | Job/CronJob |
3. 리소스의 이름
리소스의 이름을 설정합니다. kubectl 명령 등으로 조작을 할 때 식별에 사용하므로 짧고 알기 쉬운 이름이 좋습니다.
4. 리소스의 상세 정보
리소스의 상세 정보를 설정합니다. 리소스의 종류에 따라 설정할 수 있는 값이 달라집니다.
예를 들어 Pod의 경우 다음과 같은 값을 설정합니다.
- 컨테이너의 이름
- 컨테이너 이미지의 저장 위치
- 컨테이너가 전송할 포트 번호
- 컨테이너가 내부에서 사용하는 환경 변수에 대한 참조
쿠버네티스의 매니페스트 파일에 대하여 알아보았습니다.
참고
http://www.yes24.com/Product/Goods/78875805
'About > Kubernetes' 카테고리의 다른 글
[k8s] Namespace, ResourceQuota, LimitRange (0) | 2022.01.07 |
---|---|
[k8s] Volume - (emptyDir, hostPath, PV/PVC) (0) | 2022.01.06 |
[k8s] 애플리케이션 설정 정보 관리(ConfigMap/Secrets) (0) | 2022.01.04 |
[k8s] Service - (ClusterIP, NodePort, LoadBalancer) (0) | 2022.01.04 |
[k8s] Pod의 특징 (Container, Label, NodeSelector) (0) | 2022.01.04 |