쿠버네티스에서는 선언적(declarative) 설정을 할 때 매니페스트 파일(yaml)을 사용한다.
매니페스트 파일의 기본
매니페스트 파일 예시
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%
매니페스트 파일 리소스 등록
이 매니페스트 파일을 클러스터에 등록 ( API 에게 송신 )
kubectl apply -f webserver.yaml
replicaset.apps/webserver created
클라이언트의 명령을 받은 쿠버네티스 마스터의 API Service는 파일의 내용을 클러스터의 구성 정보인 etcd에 저장한다.
쿠버네티스는 이 etcd에 기록된 정보를 바탕으로 리소스를 관리한다.
매니페스트 파일 리소스 삭제
매니페스트 파일로 정의한 리소르를 클러스터에서 삭제하려면 파일명을 -f 옵션으로 지정하여 다음 명령을 실행한다.
kubectl delete -f webserver.yaml
replicaset.apps "webserver" deleted
매니페스트 파일 기본 구조
apiVersion: [1. API의 버전 정보]
kind: [2. 리소스의 종류]
metadata:
name: [3. 리소스의 이름]
spec:
[4. 리소스의 상세 정보]
1. API의 버전 정보
호출할 API 버전을 지정. 버전에 따라 안정성과 지원 레벨이 다르다.
- alpha
v1alpha1 - beta
v2beta3 - 안정판
v1 과 같은 번호가 붙는다
2. 리소스의 종류
쿠버네티스의 리소스 종류를 지정.
- 어플리케이션의 실행 : Pod/RelpcaSet/Deployment
- 네트워크 관리 : Service/Ingress
- 어플리케이션 설정 정보의 관리 : ConfigMap/Secrets
- 배치 잡의 관리 : Job/CronJob
3. 리소스의 이름
리소스의 이름을 설정한다. kubectl 명령 등으로 조작할 때 식별에 사용하므로 짧고 알기 쉬운 이름이 좋다.
4. 리소스의 상세 정보
- 에서 설정한 리소스의 종류에 따라 설정할 수 있는 값이 달라진다.
YAML의 문법
YMAL 3가지 특성
- 인덴트로 데이터의 계층 구조를 나타낸다.
데이터의 계층 구조를 인덴트(들여쓰기)로 나타낸다. 인덴트에는 스페이스를 사용한다. - 종료 태그가 필요없다.
- 플로 스타일과 블록 스타일
데이터의 구조를 표기할 때는 인덴트로 데이터 구조를 나타내는 스타일을 플로우 스타일
[]. {} 등으로 데이터 구조를 나타내는 스타일을 블록 스타일이라고 한다.
YAML에서는 어떤 표기 방법이든 상관없으며 둘을 섞어서 표기할 수 도 있다.
알아두면 좋은 YAML의 문법
- 주석 행
'#' 이후는 주석
여러행 주석처리는 없기 때문에 각행에 주석 처리를 해야한다. - 데이터형
YAML은 다음과 같은 데이터형을 자동으로 판별한다.
정수, 부동소수점수, 진리값(true/false, yes/no)
이 외의 것은 문자열로 취급한다. 홑따옴표/겹따옴표로 둘러싸면 강제적으로 문자열로 취급한다. - 배열
데이터 앞에 '-' 를 붙여서 배열을 나타낸다. '-' 뒤에는 반드시 스페이스를 넣어야 한다. - 해시
YAML에서는 해시를 나타낼때 key와 Value를 ':' 로 구분한다. ':' 다음에는 반드시 스페이스를 넣어야한다.
해시도 배열과 마찬가지로 인덴트를 사용하여 내포 구조를 나타낼 수 있다.
완벽한 IT 인프라 구축의 자동화를 위한 Kubernetes(쿠버네티스) - Asa Shiho지음
2022.05.01 - [리뷰/도서] - [도서]완벽한 IT 인프라 구축의 자동화를 위한 Kubernetes(쿠버네티스)
'Cloud-native > Kubernetes' 카테고리의 다른 글
[Kubernetes]What is Namespace in Kubernetes - 쿠버네티스 리소스 분리 (0) | 2022.05.06 |
---|---|
[Kubernetes]How to label Kubernetes pods (0) | 2022.05.06 |
[Kubernetes]What is Kubernetes DNS (0) | 2022.05.06 |
[Kubernetes]쿠버네티스 리소스 - 배치 잡 관리(Job/CronJob) (0) | 2022.05.06 |
[Kubernetes]쿠버네티스 리소스 - 어플리케이션 설정 정보 관리(ConfigMap/Secrets) (0) | 2022.05.06 |