티스토리 뷰
Pod
쿠버네티스는 스케줄링, 로드밸런싱, 스케일링 등의 관리 작업을 수행하는데, 이 작업의 단위가 Pod이다. 하나의 Pod는 한 개의 컨테이너 혹은 여러 개의 컨테이너로 구성되어 있다. Pod는 특정 상태를 저장하고 있지 않으며, 언제든 삭제가 가능한 자원이다.
apiVersion: v1 # kubernetes resource 의 API Version
kind: Pod # kubernetes resource name
metadata: # 메타데이터 : name, namespace, labels, annotations 등을 포함
name: counter
spec: # 메인 파트 : resource 의 desired state 를 명시
containers:
- name: count # container 의 이름
image: busybox # container 의 image
args: [/bin/sh, -c, 'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done'] # 해당 image 의 entrypoint 의 args 로 입력하고 싶은 부분
Pod는 위와 같이 YAML 파일로 구성하며, spec에 들어가는 내용이 메인파트이다.
원하는 폴더에 위의 예시 YAML파일을 생성하고, minikube를 실행한 후에 apply해보았다.
모든 namespace의 pod들을 조회할 수 있는데, 여기서 namespace는 리소스를 구분짓는(격리하는) 가상의 단위라고 보면 될 것 같다.
아래의 명령어를 통해서 pod의 자세한 스펙에 대해서 조회할 수 있다.
$ kubectl describe pod <podname>
Pod의 실행 결과 log를 조회해볼 수 있는데, 1초에 한 번씩 현재 시간을 표시하는 counter pod의 로그는 위와 같이 나온다.
exec 명령어를 통해서 특정 Pod 내부로 접속할 수 있다.
delete 명령어를 통해서 pod를 삭제한다(약 30초의 시간이 걸린다).
Deployment
Deployment는 Pod가 컨테이너를 감싼듯이, Pod를 감싸는 개념이라고 생각하면 된다. 말그대로 pod를 배포함으로써 Pod를 복제하기 때문에 여러 버전을 안전하게 관리하는 역할을 한다.
apiVersion: apps/v1 # kubernetes resource 의 API Version
kind: Deployment # kubernetes resource name
metadata: # 메타데이터 : name, namespace, labels, annotations 등을 포함
name: nginx-deployment
labels:
app: nginx
spec: # 메인 파트 : resource 의 desired state 를 명시
replicas: 3 # 동일한 template 의 pod 을 3 개 복제본으로 생성합니다.
selector:
matchLabels:
app: nginx
template: # Pod 의 template 을 의미합니다.
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx # container 의 이름
image: nginx:1.14.2 # container 의 image
ports:
- containerPort: 80 # container 의 내부 Port
YAML파일 안의 replicas는 복제본의 수를 뜻한다.
pod와 마찬가지로 YAML파일을 만들어주고, apply를 통해 실행, get을 통해서 조회한다.
deployment YAML에서 정의했듯이 pod 3개가 복제되어 있다.
pod 하나(pkb2s)를 삭제해보고, 다시 get pod로 조회해보면 pkb2s는 삭제되었지만 krqvx 라는 새로운 pod가 다시 생성된 것을 알 수 있다. 이렇게 deployment는 pod가 삭제되어도 삭제된 pod를 복제해서 안전하게 가지고 있다.
scale 명령어를 통해서 손쉽게 pod replicaset 갯수를 늘릴 수 있다(지금 보다 작은 갯수를 입력하면 그 만큼 줄어든다).
deployment를 삭제한다면, 위와 같이 pod도 함께 삭제된다.
이상으로 쿠버네티스 작언 단위인 container를 관리하는 pod와 deployment를 YAML파일을 통해 생성하고 삭제해 보았다.
'Study > MLOps' 카테고리의 다른 글
도커와 쿠버네티스 (4) - 쿠버네티스 with minikube (0) | 2021.12.08 |
---|---|
도커와 쿠버네티스 (3) - 도커 이미지 (0) | 2021.12.01 |
Building ML Pipelines 따라잡기 (6) - 모델 학습 (0) | 2021.11.30 |
도커와 쿠버네티스 (2) - 도커 설치 (0) | 2021.11.26 |
도커와 쿠버네티스 (1) - 개념과 실습환경 (0) | 2021.11.25 |
- Total
- Today
- Yesterday
- dl
- container
- PO
- productowner
- nlp
- 스타트업
- MLOps
- Oreilly
- 딥러닝
- 자연어처리
- pmpo
- 전처리
- 머신러닝
- Bert
- PM
- Tennis
- Kubernetes
- ML
- 쿠버네티스
- DDUX
- deeplearning
- 인공지능
- mlpipeline
- productmanager
- torch
- 파이프라인
- 머신러닝파이프라인
- docker
- productresearch
- 도커
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |