쿠버네티스 기본 사용법

홍준섭·2022년 10월 10일

개발 공부

목록 보기
7/20

파드를 생성하는 방법

nginx 웹서버 파드를 생성하는 방법

kubectl run nginx-pod --image=nginx
kubectl create deployment dpy-nginx --image=nginx

run으로 파드를 생성하면 단일 파드 1개만 생성되고 관리된다. 그리고 create deployment로 파드를 생성하면 디플로이먼트라는 관리 그룹 내에서 파드가 생성된다. 비유를 들자면, run으로 생성된 파드는 초코파이 1개이고, create deployment로 생성된 파드는 초코파이 상자에 들어 있는 초코파이 1개이다

오브젝트란?

쿠버네티스를 사용하는 관점에서 파드와 디플로이먼트는 스펙과 상태등의 값을 가지고 있다. 이러한 값을 가지고 있는 파드와 디플로이먼트를 개별 속성을 포함해 부르는 단위를 오브젝트라고 한다.

기본 오브젝트

  • 파드: 쿠버네티스에서 실행되는 최소 단위, 즉 웹 서비스를 구동하는 데 필요한 최소 단위이다. 독립적인 공간과 사용 가능한 IP를 가지고 있다. 하나의 파드는 1개 이상의 컨테이너를 갖고 있기 때문에 여러 기능을 묶어 하나의 목적으로 사용할 수도 있다.
  • 네임 스페이스: 쿠버네티스 클러스터에서 사용되는 리소스들을 구분해 관리하는 그룹이다.
  • 볼륨: 파드가 생성될 때 파드에서 사용할 수 있는 디렉터리를 제공. 기본적으로 파드는 영속되는 개념이 아니라 제공되는 디렉터리도 임시로 사용. 하지만 파드가 사라지더라도 저장과 보존이 가능한 디렉터리를 볼륨 오브젝트를 통해 생성하고 사용할 수 있다.
  • 서비스: 파드는 클러스트 내에서 유동적이기 때문에 접속 정보가 고정일 수 없다. 따라서 파드 접속을 안정적으로 유지하도록 서비스를 통해 내/외부로 연결. 그래서 서비스는 새로 파드가 생성될 때 부여되는 새로운 IP를 기존에 제공하던 기능과 연결해 준다. 쉽게 설명하면 쿠버네티스 외부에서 내부로 접속할 때 내부가 어떤 구조로 돼 있는지, 파드가 살았는지 죽었는지 신경 쓰지 않아도 이를 논리적으로 연결하는 것이 서비스이다. 기존 인프라에서 로드밸런서, 게이트웨이와 비슷한 역할을 한다.

디플로이먼트

쿠버네티스에서 가장 많이 쓰이는 디플로이먼트 오브젝트는 파드에 기반을 두고 있으며, 레플리카셋 오브젝트를 합쳐 놓은 형태이다.

레플리카셋으로 파드 수 관리하기

kubectl scale pod nginx-pod --replicas=3

스펙을 지정해 오브젝트 생성하기

디플로이먼트를 생성하면서 한꺼번에 여러 개의 파드를 만들수는 없을까? create에서는 replicas 옵션을 사용할 수 없고, scale은 이미 만들어진 디플로이먼트에서만 사용할 수 있다. 이런 설정을 적용하려면 필요한 내용을 파일로 작성해야 한다. 이때 작성하는 파일을 오브젝트 스펙이라고 한다.

apiVersion: apps/v1
kind: Deployment
metadata:
	name: echo-hname
    labels:
    	app: nginx
spec:
	replicas: 3
    selector:
    	matchLabels:
        	app: nginx
    template:
   		metadata:
        	labels:
            	app: nginx
        spec:
        	containers:
            - name: echo-hname
              image: sysnet4admin/echo-hname

apply로 오브젝트 생성하고 관리하기

run으로는 단일 파드만 생성 할 수 있고 create로 디플로이먼트를 생성하면 파일의 변경 사항을 바로 적용할 수 없다. 이런 경우에 apply를 사용한다. 일회성으로 사용하는 경우 create사용하고 그 외의 경우 apply 사용

쿠버네티스의 기능

  • 컨테이너 자동 복구
  • 파드의 동작 보장 기능
    디플로이먼트에 속한 파드인 경우 파드의 수를 항상 확인하고 부족하면 새로운 파드를 만든다.
  • 노드 자원 보호하기
    최근에 몇 차례 문제가 생긴 노드의 경우 영향도가 적은 파드를 할당해 일정 기간 사용하면서 모니터링해야 한다. 즉 노드에 문제가 생기더라도 파드의 문제를 최소화한다. 쿠버네티스는 cordon 기능을 통해 문제가 생길 가능성이 있는 노드를 스케줄 되지 않게 설정한다.
  • 노드 유지보수하기
    drain 기능을 제공. drain은 지정된 노드의 파드를 전부 다른 곳으로 이동시켜 해당 노드를 유지보수할 수 있게 한다. drain은 실제로 파드를 옮기는 것이 아닌 노드에서 파드를 삭제하고 다른 곳에서 다시 생성한다. 그런데 DaemonSet은 각 노드에 1개만 존재하는 파드라서 drain으로 삭제 할 수 없다.
  • 파드 업데이트하고 복구하기
    파드를 운영하다 보면 컨테이너에 새로운 기능을 추가하거나 치명적인 버그가 발생해 버전을 업데이트해야 할때가 있다. 또는 업데이트하는 도중 문제가 발생해 다시 기존 버전으로 복구해야 하는 일도 발생.
profile
개발 공부중입니다

0개의 댓글