• 디플로이먼트는 쿠버네티스가 애플리케이션의 인스턴스를 어떻게 생성하고 업데이트해야 하는지를 지시한다.
  • 디플로이먼트가 만들어지면, 쿠버네티스 컨트롤 플레인이 해당 디플로이먼트에 포함된 애플리케이션 인스턴스가 클러스터의 개별 노드에서 실행되도록 스케줄한다.
  • 이렇게 머신의 장애나 정비에 대응할 수 있는 자동 복구(self-healing) 메커니즘을 제공한다.

 

그럼 이제 디플로이먼트를 사용해서 간단한 Pod들을 배포해보려한다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx # 이거는 pod에 영향을 주지 않는다.
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx   # MatchLable의 값이 아래의 metadata의 labels와 동일한 값이여야 동작
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

 

주의!!: 라벨의 정보를 변경하면 pod를 새로 생성한다. 도중에 변경하는일을 최소화하자!

 

spec의 matchLabels와 metadata의 labels가 동일해야 정상적으로 동작한다.

 

그럼 이제 다음 명령어로 디플로이를 생성한다. kubectl apply -f  deploy-nginx.yaml

 

정상적으로 pod들이 생성되었다. 그런데 이름이 조금 신기하다. 이름이 무엇을 뜻하는지 알아보고자 한다.

우선 앞의 nginx-deployment는 익숙하다. 우리가 생성한 yaml파일에 metadata를 보면 작성한 이름이 나와있다.

그렇다면 그 뒤는 무엇일까? replicaset을 확인해보면 답을 찾을 수 있다.

 

metadata 이름 뒤에 replicaset의 이름이 붙은것을 확인가능하다!

그렇다면 자연스레 마지막부분은 pod의 이름이 되는 것을 알 수 있고 pod의 이름은 다음과 같은 구조를 지니는 것을 확인가능하다.

 

pod 전체 구조 = deployment의 이름 + replicaset 이름 + pod 이름

아마 이름 보다는 해시값이라 해야 맞지않을까 라고 생각한다.

+ Recent posts