매니페스트 파일(정의 파일) 작성

728x90
반응형

출처 : 그림과 실습으로 배우는 도커 & 쿠버네티스

 

 

매니페스트 파일(Manifest File)

  • 쿠버네티스는 매니페스트 파일에 기재된 내용에 따라 파드를 생성한다.
  • 매니페스트 파일의 내용이 쿠버네티스에 업로드되면 그 내용이 etcd에 등록되고 서버 환경을 해당 상태로 유지한다.

 

YAML 형식으로 매니페스트 파일 작성

  • 파드나 서비스에 대한 설정을 매니페스트라고 하고, 설정을 적은 파일을 매니페스트 파일이라고 한다.
  • 매니페스트 파일은 YAML 또는 JSON 형식으로 기재한다.
  • 도커 컴포즈와 달리 쿠버네티스에서는 매니페스트 파일의 이름이 지정돼 있지 않다.

 

매니페스트 파일은 리소스 단위로 작성한다

  • 매니페스트 파일은 리소스 단위로 작성한다.
  • 리소스는 파드, 서비스, 디플로이먼트, 레플리카세트 등을 의미한다.

 

매니페스트 파일은 여러 파일로 분할할 수 있다

  • 매니페스트 파일은 리소스 단위로 분할해 작성해도 되고, 한 파일에 합쳐  작성해도 된다.
  • 한 파일로 작성할 때는 각 리소스를 '---'로 구분한다.
  • 리소스 단위로 파일을 나눌 때는 각 리소스를 구별할 수 있도록 이름을 붙인다.

 

 

매니페스트 파일로 작성할 내용

  • 매니페스트 파일은 4가지의 주 항목이 있다.
    • apiVersion: API 그룹 및 버전
    • kind: 리소스 유형
    • metadata: 메타데이터. 리소스의 이름이나 레이블을 기재
    • spec: 리소스 내용
  • 리소스를 정의하려면 API 그룹과 리소스 유형을 지정해야 한다.
  • 레이블은 key-value 쌍의 형태로 메타데이터로 설정한다.
  • 레이블을 부여하면 셀렉터 기능을 사용해 특정 레이블이 부여된 파드만을 배포하는 등 특정 파드를 선택해 설정할 수 있다.

 

 

파드 작성

  • 매니페스트 파일의 API 그룹(apiVersion)이나 리소스 유형(kind)은 정형화되어 있지만 메타데이터(metadata)나 스펙(spec)은 리소스의 유형이나 설정 내용에 따라 작성 내용이 달라진다.
  • 파드, 디플로이먼트, 서비스를 대상으로 메타데이터와 스펙을 작성하는 방법을 학습한다.
metadata:
  name:			<-(중항목) 파드의 이름
  labels:		<-(중항목) 레이블
spec:
  containers:		<-(중항목) 컨테이너 구성
    - name:		<-(소항목) 컨테이너 이름
      image:		<-(소항목) 이미지 이름
      ports:		<-(소항목) 포트 설정

 

  • 파드는 대부분 디플로이먼트에 포함되는 형태로 기재된다.
  • 작성할 내용은 주항목 'metadata: '와 'spec: ' 아래에 하위 항목을 작성한다.
  • 파드는 3개의 중항목을 가진다. 메타 데이터 아래로 name과 labels, 스펙 아래로 containers를 기재한다. volumes 항목도 있지만 작성하지 않는 경우가 많다.
  • containers 항목 아래로 소항목 name, image, port가 포함된다.

 

[실습] 매니페스트 파일 작성 - 파드

  • 아파치 컨테이너를 대상으로 파드의 매니페스트 파일을 작성한다.
  • 매니페스트 파일은 YAML 형식을 따른다.

 

실습 내용

  1. 주항목 작성
  2. 메타데이터 작성
  3. 스펙 작성

 

생성할 파드와 컨테이너 정보

  • API 그룹/버전
    • v1
  • 리소스 유형
    • Pod
  • 파드 이름
    • apa000pod
  • 레이블
    • app: apa000kube
  • 컨테이너 이름
    • apa000ex91
  • 이미지 이름
    • httpd
  • 포트 설정
    • containerPort: 80

 

실습

 

내 문서에 kube_folder 라는 이름의 폴더를 하나 생성한다. 그리고 메모장으로 매니페스트 파일을 작성하고 파일 이름은 apa000pod.yml로 지정한다.

 

 

apiVersion: v1
kind: Pod
metadata:
  name: apa000pod
  labels:
    app: apa000kube
spec:
  containers:
    - name: apa000ex91
      image: httpd
      ports:
      - containerPort: 80

 

주항목을 작성한 다음, 메타데이터와 스펙의 항목들을 작성한다.

작성을 완료하고 파일을 저장한다.

 

 

디플로이먼트 작성

  • 디플로이먼트의 스펙은 템플릿의 형태로 파드의 설정을 기재한다.
  • 디플로이먼트는 파드의 deploy(배포)를 관리하는 요소로, 파드가 사용하는 이미지 등 파드에 대한 정보를 갖고 있다.
apiVersion:
kind:
metadata:
  name:			<-(중항목) 디플로이먼트 이름
spec:
  selector:		<-(중항목) 셀렉터 설정
    matchLabels:	<-(소항목) 셀렉터가 선택할 관리 대상 레이블
  replicas:		<-(중항목) 레플리카 설정
  template:		<-(중항목) 템플릿 (파드의 정보)
    metadata:		<-(소항목) 파드의 메타데이터를 기재
    spec:		<-(소항목) 파드의 스펙을 기재

 

셀렉터(Selector)

  • 디플로이먼트가 특정한 레이블이 부여된 파드를 관리할 수 있도록 하는 설정
  • matchLabels:  뒤로 레이블을 기재한다.
  • 이 레이블은 template 아래의 metadata에 기재된 것이다.

 

레플리카(Replica)

  • 파드의 레플리카에 대한 관리로, 파드의 수를 몇 개로 유지할 것인지 설정한다.
  • 이 값을 0으로 설정하면 파드가 사라진다.

 

템플릿(Template)

  • 생성할 파드의 정보를 기재한다.
  • 기재 내용은 파드에 기재된 내용(메타데이터 및 스펙)과 거의 유사하다.
  • 파드에서 지정했던 파드 이름은 설정하지 않는다. 파드의 수가 늘어나면 레이블로 관리하기 때문이다.

 

[실습] 매니페스트 파일 작성 - 디플로이먼트

  • 아파치를 소재로 디플로이먼트의 매니페스트 파일을 작성한다.
  • 디플로이먼트의 매니페스트 파일을 작성하면 파드의 매니페스트 파일은 삭제해도 된다.

 

apiVersion: v1
kind: Deployment
metadata:
  name: apa000dep
spec:
  selector:
    matchLabels:
      app: apa000kube
  replicas: 3
  template:
    metadata:
      labels:
        app: apa000kube
    spec:
      containers:
      - name: apa000ex91
        image: httpd
        ports:
        - containerPort: 80

 

 

서비스 작성

  • 디플로이먼트와 세트인 서비스의 매니페스트 파일을 작성한다.
  • 서비스의 역할은 파드로 들어오는 요청을 관리하는 것이므로 설정 내용도 통신과 관련이 있다.
apiVersion:
kind:
metadata:
  name:		<- 서비스의 이름
spec:
  type:		<- 서비스의 유형
  ports:	<- 포트 설정
  - port:	<- 서비스의 포트
    targetPort:	<- 컨테이너의 포트
    protocol:	<- 통신에 사용되는 프로토콜
    nodePort:	<- 워커 노드의 포트
  selector:	<- 셀렉터 설정

 

유형(Type)

  • 유형은 서비스의 종류를 의미한다.
  • 외부로부터 서비스에 어떤 유형의 IP 주소 (또는 DNS)로 접근할지를 설정한다.
  1. ClusterIP : 클러스터 IP를 통해 서비스에 접근하도록 함(외부에서는 접근 불가)
  2. NodePort : 워커 노드의 IP를 통해 서비스에 접근하도록 함
  3. LoadBalancer : 로드 밸런서의 IP를 통해 서비스에 접근하도록 함
  4. ExternalName : 파드에서 서비스를 통해 외부로 나가기 위한 설정

 

포트

  • port : 서비스
  • nodePort : 워커 노드. 30000~32767 사이의 값을 설정 가능
  • targetPort : 컨테이너의 포트
  • procotol : 통신 프로토콜. 일반적으로 TCP를 사용

 

셀렉터

  • 서비스가 특정 레이블이 부여된 파드를 선택적으로 관리하기 위한 설정이다.
  • 레이블은 파드나 디플로이먼트에서 컨테이너 부분의 설정에 지정된 레이블을 사용한다.
  • 디플로이먼트에서는 matchLabels: 가 필수 항목이지만 서비스에서는 matchLabels:를 사용해서는 안 된다.

 

[실습] 매니페스트 파일 작성 - 서비스

  • 서비스는 파드에 대한 접근을 관리하므로 포트 등 통신과 관련된 내용을 기재한다.

 

 

apiVersion: v1
kind: Service
metadata:
  name: apa000ser
spec:
  type: NodePort
  ports:
  - port: 8099
    targetPort: 80
    protocol: TCP
    nodePort: 30080
  selector:
    app: app000kube
728x90
반응형