아이엠 !나이롱맨😎
article thumbnail
반응형
이 글은 쿠버네티스 공부한 흔적을 남기기 위한 글입니다.

 

기본 오브젝트로 쿠버네티스 클러스터를 구성할 수 있지만 한계가 있습니다. 이러한 한계를 극복하고자 기본 오브젝트 외 다양한 오브젝트들이 존재하는데 이번엔 디플로이먼트 오브젝트에 대해 알아보겠습니다.

 

디플로이먼트

디플로이먼트는 한마디로 파드 + 레플리카셋입니다.

 

* 참고 : 레플리카셋은 파드의 수를 보장해주는 오브젝트입니다.

 

쿠버네티스 클러스터에서의 API 서버와 컨트롤러 매니저는 단순히 파드의 감시가 아닌 디플로이먼트처럼 다양한 오브젝트를 감시합니다.

 

디플로이먼트를 생성할 때 사용하는 명령어로는 기본적으로 create, apply 을 사용합니다.

 

디플로이먼트로 생성한 파드를 늘리고 싶으면 scale 명령어를 다시 쳐야하지만 yaml을 사용하여 디플로이먼트의 spec을 정해주면 처음부터 원하는대로 디플로이먼트를 생성할 수 있습니다.

 

yaml 작성이 좀 복잡하긴 하지만 디플로이먼트를 유동적으로 생성할 수 있습니다.


yaml으로 디플로이먼트 spec 작성하기

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

 

이 예시에 대한 설명은 다음과 같다.

  • .metadata.name 필드에 따라 nginx-deployment 이름으로 디플로이먼트가 생성된다.
  • .spec.replicas 필드에 따라 디플로이먼트는 3개의 레플리카 파드를 생성한다.
  • .spec.selector 필드는 디플로이먼트가 관리할 파드를 찾는 방법을 정의한다. 이 사례에서는 파드 템플릿에 정의된 레이블(app: nginx)을 선택한다. 그러나 파드 템플릿 자체의 규칙이 만족되는 한, 보다 정교한 선택 규칙의 적용이 가능하다.

추가로 .metadata.labels의 app은 향후 어느 리소스가 이 app 값을 디플로이먼트를 참고하려할때 필요한 값을 지정해주기 위한 것이고, .spec.selector.matchLabels의 app은 .spec.template.metadata.labels의 app을 참조하는 것이다.

 

.spec.template.metadata.labels의 app을 지정해줌으로써 .selector.matchLabels에서 리소스를 찾을 수 있다.

참고: 
.spec.selector.matchLabels 필드는 {key,value}의 쌍으로 매핑되어있다. matchLabels 에 매핑된 단일 {key,value}은 matchExpressions 의 요소에 해당하며, key 필드는 "key"에 그리고 operator는 "In"에 대응되며 value 배열은 "value"만 포함한다. 매칭을 위해서는 matchLabels 와 matchExpressions 의 모든 요건이 충족되어야 한다.
  • template 필드에는 다음 하위 필드가 포함되어있다.
    • 파드는 .metadata.labels 필드를 사용해서 app: nginx 라는 레이블을 붙인다.
    • 파드 템플릿의 사양 또는 .template.spec 필드는 파드가 도커 허브의 nginx 1.14.2 버전 이미지를 실행하는 nginx 컨테이너 1개를 실행하는 것을 나타낸다.
    • 컨테이너 1개를 생성하고, .spec.template.spec.containers[0].name 필드를 사용해서 nginx 이름을 붙인다.

시작하기 전에, 쿠버네티스 클러스터가 시작되고 실행 중인지 확인한다. 위의 디플로이먼트를 생성하려면 다음 링크를 따른다.

 

 

 

디플로이먼트

디플로이먼트(Deployment) 는 파드와 레플리카셋(ReplicaSet)에 대한 선언적 업데이트를 제공한다. 디플로이먼트에서 의도하는 상태 를 설명하고, 디플로이먼트 컨트롤러(Controller)는 현재 상태에서 의

kubernetes.io

반응형

article prev thumbnail
article next thumbnail
profile on loading

Loading...