Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 특정 행 출력
- 포함 관계
- SQL 내장 함수
- redis 외부설정
- 특정 행
- 도커
- 웹 애플리케이션 아키텍처
- ubuntu redis
- REST 성숙도 모델
- apt-rdepends
- docker
- 쿠버네티스 패턴
- redis 설정
- 선언적 배포
- 예외 전가
- 웹 애플리케이션 요청 흐름
- Exception Handing
- abstract 제어자
- kafkaCLI
- 의존성 패키지 설치
- 폐쇄망
- 의존성 설치
- 예측 범위 내의 요구사항
- redis 명령어
- Oracle.DatabaseError
- Port already in use: 9999
- image 압축
- 객체
- 자료구조
- 오프라인 설치
Archives
- Today
- Total
리꾸므
[Kubenetes] manifest 본문
manifest 파일이란?
쿠버네티스의 오브젝트를 생성하기 위한 메타 정보를 YAML이나 JSON으로 기술한 파일,
manifest 파일에 기재된 내용에 따라 파드를 생성한다. 파일의 내용을 쿠버네티스에 업로드하면 그 내용이 데이터 베이스(etcd)에 '바람직한 상태'로 등록됩니다.
특징
- docker-compose와 달리 매니페스트 파일이름이 지정되어 있지 않습니다.
- 리소스 단위로 작성합니다.(서비스, 디플로이먼트 등)
- 한 파일로 작성시 각 리소스를 '---'로 구분합니다.
- 디플로이먼트 항목에 레플리카세트와 파드가 포함되어 있습니다.
- 매니페스트 파일은 여러 파일로 분할할 수 있습니다.
*오브젝트 : 파드, 서비스, 디플로이먼트
manifest 작성 내용
항목명 | 설명 |
apiVersion | API 그룹 및 버전 |
kind | 리소스 유형 |
metadata | 메타데이터, 오브젝트 구분 |
spec | 리소스 내용, 오브젝트가 어떤 상태를 의도하는지 |
리소스 | API 그룹 / 버전 | 리소스 유형 |
파드 | core/v1(v1로 축약 가능) | Pod |
서비스 | core/v1(v1로 축약 가능) | Service |
디플로이먼트 | apps/v1 | Deployment |
레플리카세트 | apps/v1 | ReplicaSet |
Pod
apiVersion:
kind:
metadata:
name: // 파드의 이름
labels: // 레이블
spec:
containers: // 컨테이너 구성
- name: // 컨테이너 이름
image: // 이미지 이름
ports: // 포트 설정
- 파드는 중항목이 3개입니다. 메타데이터 아래 'name', 'labels', 스펙 항목아래에 'containers' 항목입니다.
- spec아래에 컨테이너 구성을 기재합니다.
- metadata 항목 name은 파드의 이름이고 spec 밑 containers 항목 name은 컨테이너 이름입니다.
apiVersion: v1
kind: Pod
metadata:
name: pod1
labels:
app: nginx
spec:
containers:
- name: nginx01
image: nginx
ports:
- containerPort: 80
Deployment
apiVersion:
kind:
metadata:
name: // 디플로이먼트 이름
spec:
selector: // 셀렉터 설정
matchLabels: // 셀렉터가 선택할 관리 대상 레이블
replicas: // 레플리카 설정
template: // 템플릿-파드의 정보
metadata: // 파드의 메타데이터를 기재
spec: // 파드의 스펙을 기재
- 디플로이먼트는 중항목은 메타데이터 아래 'name', 'seletor', 'replicas', 'template' 총 4개이다.
- selector : 디플로이먼트가 특정한 레이블이 부여된 파드를 관리할 수 있도록 하는 설정입니다.
- 'matchLabels' 항목에 레이블을 기재합니다. 이 레이블은 template 아래의 metadata에 기재된 것입니다.
- replica : 파드의 레플리카에 대한 관리입니다. 파드 수를 '몇 개로 유지'할 것인지를 설정합니다. 이 값이 0일경우 파드는 사라집니다.
- template : 생성할 파드의 정보를 기재합니다. 기재 내용은 파드에 기재된 내용(메타데이터 및 스펙)과 거의 같습니다.
- 파드의 수가 늘어나면 레이블로 관리하기때문에 파드 이름을 잘 설정안합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx01
image: nginx
ports:
- containerPort: 80
Service
apiVersion:
kind:
metadata:
name: // 서비스의 이름
spec:
type: // 서비스의 유형
ports: // 포트 설정
- port: // 서비스의 포트
targetPort: // 컨테이너의 포트
protocol: // 통신에 사용되는 프로토콜
nodePort: // 워커 노드의 포트
selector: // 셀렉터 설정
- 서비스의 중항목은 메타데이터 아래 'name', 스펙 아래 'type', 'ports', seletor'
- type : 서비스의 종류를 말합니다. 외부로부터 서비스에 어떤 유형의 IP 주소로 접근할지를 설정합니다.
- ClusterIP : 클러스터IP를 통해 서비스에 접근하도록 합니다.(외부접근불가)
- NodePort : 워커 노드의 IP를 통해 서비스에 접근하도록 합니다. 30000~32767 사이의 값으로만 설정할 수 있습니다.
- LoadBalancer : 로드밸런서의 IP를 통해 서비스에 접근하도록 합니다.
- ExternalName : 파드에서 서비스를 통해 외부로 나가기 위한 설정입니다.
- port는 서비스, nodeport는 워커 노드, targetPort는 컨테이너 포트를 각각 설정합니다.
- selector : 특정 레이블이 부여된 파드를 특정하여 관리하기 위한 설정입니다. 다만 서비스에서는 'matchLabels'를 사용해서는 안됩니다.
- 내부동작이 다르기 때문입니다. 디플로이먼트는 셀렉터를 지정하면 레이블 셀렉터를 사용하여 '이 조건에 부합할 때'와 같은 설정이 가능하지만 서비스는 리소스를 직접 지정하기 때문에 해당 레이블을 그대로 기재해야합니다.
apiVersion: v1
kind: Service
metadata:
name: service01
spec:
type: NodePort
ports:
- port: 8090
targetPort: 80
protocol: TCP
nodePort: 30080
selector:
app: nginx
'발걸음 > 일지' 카테고리의 다른 글
[Debian] 폐쇄망 패키지 설치 (1) | 2023.12.07 |
---|---|
[Loki] 바이너리 설치 및 설정 (0) | 2023.08.24 |
[Harbor] 프로젝트 역할에 따른 권한 (0) | 2023.04.25 |
[Harbor] 오프라인 설치 및 sudo 권한 없는 서비스 계정으로 운영 (0) | 2023.04.24 |
[Docker] docker engine 설치 및 제거 (0) | 2023.03.16 |