쿠버네티스

YAML 파일을 쿠버네티스에 적용하기 - Pod

우잉~ 2024. 11. 11. 15:49

 

쿠버네티스에는 Pod, Replica, Deployment, Service 등과 같은 객체를 YAML 파일을 사용하여 생성할 수 있다.

 

쿠버네티스 YAML 파일에 필수로 들어가야 하는 항목이 총 4가지 있다.

 

1. apiVersion: 생성하려는 객체에 대해 사용하는 쿠버네티스 API 버전을 나타낸다. v1, apps/v1beta1, extensions/v1beta1 등의 값으로 설정할 수 있다.

2. kind: 생성하려는 객체 유형의 이름을 작성하면 된다.

3. metadata: 객체 이름(name), 라벨(labels)과 같은 데이터를 작성하는 필드로, 딕셔너리 형태로 작성해야 한다. 예를 들어 수백 개의 pod가 프론트엔드 애플리케이션, 백엔드 애플리케이션, 데이터베이스를 실행하고 있을 때 각각 front-end, back-end, database와 같은 라벨로 구분해두면 나중에 pod를 필터링하기 쉬워진다.

(metadata 작성 예시)

metadata: 
  name: myapp-pod
  labels:
    app: myapp
    type: front-end

 

4. spec: specification의 약어로, 생성하려는 객체에 대한 추가 정보를 작성하는 필드이다. 쿠버네티스에게 정보를 알려주기 위해 작성된다고 생각하면 된다. containers와 같은 딕셔너리 형태의 속성을 추가하여 리스트로 작성하면 된다. containers는 객체 목록으로 name은 컨테이너 이름, image는 docker hub 이미지 이름이다. 만약 docker hub 이미지를 사용하지 않을 거라면, 이미지 리포지토리의 전체 경로를 작성하면 된다.

(spec 작성 예시)

# pod-definition.yml

apiVersion: v1
kind: Pod
metadata: 
  name: myapp-pod
  labels:
    app: myapp
    type: front-end
spec: 
  containers:
    - name: nginx-container
      image: nginx

 

* 여러 컨테이너를 추가할 수도 있음!!! 위 예시는 단일 컨테이너이다.

 

 

작성 완료된 YAML 파일을 kubectl create -f [yaml 파일 이름]명령을 이용하여 생성할 수 있다. + apply는 생성된 포드에 대해서 사용할 수 있음!

> kubectl create -f pod-definition.yml

 

※ 직접 만들어봤는데... 진짜 들여쓰기에 민감하다. tab을 사용했는데 그냥 스페이스 두 번 치는 게 더 나은 것 같다 ㅠ ㅠ

 


 

실습 - VSCode를 사용하여 YAML 파일 작성하기

 

 

VSCode를 이용하여 yaml 파일 작성하기 위해서는 약간의 환경 설정이 필요하다.

yaml 설치

 

 

yaml - 톱니바퀴 - settings

 

 

YAML 파일에 대해 쿠버네티스 스키마를 이용하기 위해서는 코드를 추가해야 한다.

 

 

nginx.yaml 파일 작성

 

저장된 파일을 powershell에서 확인할 수 있다.

 

 

수동으로 작성하지 않고 편리하게 명령어를 이용하여 작성할 수도 있다.

kubectl run redis --image=redis123 --dry-run=client -o yaml > redis.yaml

 

--dry-run 명령은 리소스를 실제로 생성하지 않고, 원하는 리소스 정의를 yaml 파일로 저장할 수 있다. → yaml 파일을 미리 만들고 검토할 수 있다. 그리고 실제로 적용되는 것은 아님!

--dry-run=client: 로컬 클라이언트 측에서만 시뮬레이션함.

--dry-run=server: 클러스터 서버에서 검증을 수행함. 리소스를 적용할 수 있는지 확인만 함. 적용 X.

 

-o yaml: 출력을 yaml 형식으로 함. 예를 들어 -o json이면 json 형태로 출력이 됨

 

명령어를 수행하면 redis.yaml 파일이 아래의 내용을 포함하여 생성된다.