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 형식을 따른다.
실습 내용
- 주항목 작성
- 메타데이터 작성
- 스펙 작성
생성할 파드와 컨테이너 정보
- 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)로 접근할지를 설정한다.
- ClusterIP : 클러스터 IP를 통해 서비스에 접근하도록 함(외부에서는 접근 불가)
- NodePort : 워커 노드의 IP를 통해 서비스에 접근하도록 함
- LoadBalancer : 로드 밸런서의 IP를 통해 서비스에 접근하도록 함
- 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
반응형
'Study > 도커와 쿠버네티스 (Docker & Kubernetes)' 카테고리의 다른 글
쿠버네티스 명령어 (0) | 2024.02.25 |
---|---|
쿠버네티스 설치 (0) | 2024.02.23 |
쿠버네티스의 구성과 관련 용어 (0) | 2024.02.23 |
마스터 노드와 워커 노드 (0) | 2024.02.23 |
쿠버네티스의 정의 (0) | 2024.02.23 |