많은 사용자를 대상으로 웹 서비스를 하려면 다수의 파드가 필요한데, 이를 하니씩 생성한다면 매우 비효율적이다. 그래서 쿠버네티스에서는 다수의 파드를 만드는 레플리카셋 오브젝트를 제공한다.
파드를 3개 만들겠다고 레플리카셋에 선언하면 컨트롤러 매니저와 스케줄러가 워커 노드에 파드 3개를 만들도록 선언한다. 그러나 레플리카 셋은 파드 수를 보장하는 기능만 제공하기 때문에 롤링 업데이트 기능 등이 추가된 디플로이먼트를 사용해 파드 수를 관리하기를 권장한다.
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는 디플로이먼트 오브젝트에 속하지 않기 때문에 오류발생
디플로이먼트 오브젝트는 정상적으로 적용
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
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로 생성하는 것이 좋다
구분 | Run | Create | Apply |
---|---|---|---|
명령 실행 | 제한적임 | 가능함 | 안 됨 |
파일 실행 | 안 됨 | 가능함 | 가능함 |
실행 편의성 | 매우 좋음 | 매우 좋음 | 좋음 |
기능 유지 | 제한적임 | 지원됨 | 다양하게 지원 |