티스토리 뷰

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에 들어가는 내용이 메인파트이다.

생성한 pod를 실행하고, get pod로 실행됨을 확인

원하는 폴더에 위의 예시 YAML파일을 생성하고, minikube를 실행한 후에 apply해보았다.

모든 namespace의 pod를 조회하는 명령어 수행 결과

모든 namespace의 pod들을 조회할 수 있는데, 여기서 namespace는 리소스를 구분짓는(격리하는) 가상의 단위라고 보면 될 것 같다.

아래의 명령어를 통해서 pod의 자세한 스펙에 대해서 조회할 수 있다.

$ kubectl describe pod <podname>

Pod의 log 조회

Pod의 실행 결과 log를 조회해볼 수 있는데, 1초에 한 번씩 현재 시간을 표시하는 counter pod의 로그는 위와 같이 나온다.

pod 내부로 접속한 모습

exec 명령어를 통해서 특정 Pod 내부로 접속할 수 있다.

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는 복제본의 수를 뜻한다.

deployment 생성 후 apply

pod와 마찬가지로 YAML파일을 만들어주고, apply를 통해 실행, get을 통해서 조회한다.

replicaset pods

deployment YAML에서 정의했듯이 pod 3개가 복제되어 있다.

pod autohealing

pod 하나(pkb2s)를 삭제해보고, 다시 get pod로 조회해보면 pkb2s는 삭제되었지만 krqvx 라는 새로운 pod가 다시 생성된 것을 알 수 있다. 이렇게 deployment는 pod가 삭제되어도 삭제된 pod를 복제해서 안전하게 가지고 있다.

scale up

scale 명령어를 통해서 손쉽게 pod replicaset 갯수를 늘릴 수 있다(지금 보다 작은 갯수를 입력하면 그 만큼 줄어든다).

delete deployment

deployment를 삭제한다면, 위와 같이 pod도 함께 삭제된다.

 

이상으로 쿠버네티스 작언 단위인 container를 관리하는 pod와 deployment를 YAML파일을 통해 생성하고 삭제해 보았다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함