📌 YAML
- K8S YAML 파일은
Pods, Replications, Deployment 등 오브젝트 생성을 위한 입력으로 사용
- 항상 상위에 4개의 field를 포함한다 (Root Level Property) 루트 레벨 속성
apiVersion:
kind:
metadata:
spec:
- 필수 필드이니 반드시 구성 파일에 있어야 한다.
✅ apiVersion
- 이 개체(YAML파일로 생성하려는 것)를 생성할 때 사용하는 K8S api 버전
- 만드려는게 무엇이냐에 따라 올바른 버전 사용하고 있어야함
- 현재 만드는 것이
Pod이기 때문에 v1으로 설정
# vi pod-definition.yaml
apiVersion: v1
kind:
metadata:
spec:
- 이 필드에서 사용가능한 value:
v1, apps/v1 등등
✅ kind
- 개체 유형을 가리킴
- 위 경우에 Pod
- 사용 가능한 다른 value: `ReplicaSet’, ‘Deployment’, ‘Service’ 등등
apiVersion: v1
kind: Pod
metadata:
spec:
- 이름이나 레이블 등
- 이 들은 metadata의 자식요소임
- 공백의 개수 상관없지만 형제 요소끼리는 공백이 같아야함!
name 필드는 문자열 즉, Pod의 이름
labels 필드는 dictionary, 원하는 대로 키(key)와 값(value) 쌍을 가질 수 있음
- 다른 labels을 추가로 지정할 수 있고 이는 식별을 용이하게 함
- 수백개의 프론트엔드, 백엔드, 데이터베이스를 레이블로 지정해주면 이를 기반으로 파드를 필터링
- 중요한건
labels에서는 원하는 대로 키나 값 쌍을 가질 수 있다는것
- 그래서 각각의 매개변수가 무엇을 기대하는지 이해하는게 중요
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
✅ spec
- 쿠버네티스에게 만들 개체에 대한 스펙을 알려줌
- 스펙은 하나만 들어감
- 아래에
containers 필드를 자식으로 가진다
containers는 목록 또는 배열
- 멀티플 컨테이너를 생성할 수 있기때문
- (대시문자)는 목록의 첫번째를 알려줌
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
⌨️ Pod 생성하는 명령어
$ kubectl create -f pod-definition.yaml
$ kubectl get pods
$ kubectl describe pods