쿠버네티스/도커(레플리카셋으로 파드 관리, 스펙을 지정해 오브젝트 생성)

맹민재·2022년 8월 19일
0

많은 사용자를 대상으로 웹 서비스를 하려면 다수의 파드가 필요한데, 이를 하니씩 생성한다면 매우 비효율적이다. 그래서 쿠버네티스에서는 다수의 파드를 만드는 레플리카셋 오브젝트를 제공한다.

파드를 3개 만들겠다고 레플리카셋에 선언하면 컨트롤러 매니저와 스케줄러가 워커 노드에 파드 3개를 만들도록 선언한다. 그러나 레플리카 셋은 파드 수를 보장하는 기능만 제공하기 때문에 롤링 업데이트 기능 등이 추가된 디플로이먼트를 사용해 파드 수를 관리하기를 권장한다.

replica를 사용해 pod 증가

kubectl scale pod nginx-pod --replica=3

만약 create deployment를 통해 디플로이먼트로 생성한것이 아닌 
run으로 생성한 pod에 replica를 생성하면 다음과 같은 오류가 난다.
Error from server (NotFound): the server could not find the requested resource

run으로 생성된 pod는 디플로이먼트 오브젝트에 속하지 않기 때문에 오류발생


디플로이먼트 오브젝트는 정상적으로 적용

Replica 한 deployment 오브젝트 삭제

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

kubectl create deployment 명령으로 디플로이먼트를 생성하는것은 1개의 pod만 가능하다. create 명령에서는 replica 옵션을 사용할 수 없고, scale은 이미 만들어진 디플로이먼트에서만 사용할 수 있다.

이런 설정을 적용하려면 필요한 내용을 파일로 작성해햐 한다. 이 때 작성하는 파일을 오브젝트 스펙(spec)이라 한다. 오브젝트 스펙은 일반적으로 yaml 문법으로 작성한다.

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

yaml 파일 구성 살펴보기

apiVersion -> 이 오브젝트를 생성하기 위해 사용하고 있는 쿠버네티스 API 버전이 어떤 것인지
kind -> 어떤 종류의 오브젝트를 생성하고자 하는지
metadata - name -> 디플로이먼트의 이름
metadata - labels -> 디플로이먼트의 레이블

*spec -> 오브젝트에 대해 어떤 상태를 의도하는지 작성

replicas -> 레플리카셋을 몇 개 생성할지 결정
selector - matchLabels -> 레이블 셀렉터를 지정함으로서 클라이언트와 사용자는 오브젝트를 식별할 수 있다.

template -> 파드를 생성하기 위한 명세
template - spec -> 새롭게 생성될 파드에 대해 어떤 상태를 의도하는지 작성.
spec - containers -> 템플릿에서 사용할 컨테이너 이미지 지정

yaml 파일로 pod 생성 명령

yaml 파일 수정해서 replica 변경하기

sed -i 's/replicas: 3/replicas : 6/' ~/_Book_k8sInfra/ch3/3.2.4/echo-hname.yaml

sed(streamlined editor) 명령어
vi 명령어와 마찬가지로 원본 텍스트 파일을 편집하는 유용한 명령어

  • sed와 vi가 다른 점은 sed는 명령어 형태로 편집이 되며 vi처럼 실시간 편집이 아니다.

  • 원본을 건드리지 않고 편집하기 때문에 작업이 완료되었어도 기본적으로 원본에는 전혀 영향이 없다는 점입니다.(단, sed옵션에서 -i 옵션을 지정한다면 원본을 바꾸게 된다.)

  • s/는 주어진 패턴을 원하는 패턴으로 변경하겠다는 의미

변경된 내용 적용

kubectl create -f ~/_Book_k8sInfra/ch3/3.2.4/echo-hname.yaml
echo-hname이 이미 존재하기 때문에 오류가 발생

apply 명령
create 명령으로는 디플로이먼트 생성 후 파일의 변경 사항을 바로 적용할 수 없다는 단점이 있다. 이를 위해 쿠버네티스는 apply명령어를 제공

 kubectl apply -f ~/_Book_k8sInfra/ch3/3.2.4/echo-hname.yaml

처음부터 apply 명령으로 생성한 것이 아니어서 경고는 뜨지만 작동에는 문제없다. 하지만 일관성에서 문제가 생길 수 있으니 주의해야한다.
*변경 사항이 발생할 가능성이 있는 오브젝트는 처음부터 apply로 생성하는 것이 좋다

오브젝트 생성 명령어 비교

구분RunCreateApply
명령 실행제한적임가능함안 됨
파일 실행안 됨가능함가능함
실행 편의성매우 좋음매우 좋음좋음
기능 유지제한적임지원됨다양하게 지원
profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글