yaml 파일이란
key: value
형태로 간단하고 직관적인 설정 파일이다. 다양한 목적으로 활용되며 특히 쿠버네티스에서 리소스들을 구성하고 다룰 때 주로 사용한다.
콜론(:)
을 기준으로 왼쪽에 key
오른쪽에 value
값을 지정country: Korea
nickname: havi
field: cloud-infra
position: devops-engineer
오브젝트
형태로 계층 구조를 표현하려면 들여쓰기
사용한다탭
또는 스페이스
의 일괄적인 칸 수를 정하여 구조화 한다devops:
container: docker
orchestration: kubernetes
cicd: jenkins
monitoring: prometheus
배열
형태로 구성하는 경우 두가지 방법이 있다# 1. 하이픈(-)을 활용하는 방법
cloudProvider:
- AWS
- Azure
- GCP
# 2. 대괄호([])를 활용하는 방법
cloudProvider: [ AWS, Azure, GCP ]
배열
형태의 구성요소가 오브젝트
형태인 경우하이픈(-)
으로 구분한다cloudProvider:
- name: AWS
provider: Amazon
- name: Azure
provider: Microsoft
- name: GCP
provider: Google
# yaml 파일 root에 입력해야 하는 필수 속성들
apiVersion: # api 버전
kind: # 오브젝트 종류
metadata: # 참조 정보
spec: # 상세 정보
# sample-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
labels:
abc: 123 # labels 하위속성 이름은 원하는 명칭으로 정할 수 있다
spec:
containers:
- name: sample-nginx
image: nginx
# sample-replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myapp-replicaset
labels:
app: myapp
spec:
selector:
matchLabels:
app: myapp
replicas: 3
template:
metadata:
name: nginx
labels:
app: myapp
spec:
containers:
- name: nginx
image: nginx
# sample-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
labels:
tier: frontend
app: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 5
template:
metadata:
name: nginx
labels:
app: myapp
spec:
containers:
- name: nginx
image: nginx
# sample-service.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30004
selector:
app: myapp
# Pod
kubectl run nginx \
--image=nginx \
--dry-run=client -o yaml > sample-nginx.yaml
# 기존에 존재하는 object 로부터 yaml 파일 생성
kubectl get pod nginx -o yaml > nginx-pod.yaml
# Deoployment
kubectl create deployment sample-nginx \
--replicas=3 \
--image=nginx \
--dry-run=client -o yaml > sample-deployment.yaml
# Service
kubectl expose pod redis \
--port=6379 \
--name redis-service
--dry-run=client -o yaml > sample-service.yaml
# 최초 생성
kubectl create -f sample.yaml
# 수정 적용 ?
kubectl apply -f sample.yaml
# 대체
kubectl replace --force -f sample.yaml
# 삭제
kubectl delete -f sample.yaml
# labels 검색 (selector 옵션 사용)
kubectl get po --selector env=dev