본문 바로가기
Kubernaetes

K8s deployment 이해하기 및 yaml 작성하기

by 앵남(Andy) 2022. 12. 4.

 

Deployment 

k8s == kubernetes k8s와 쿠버네티스는 같은 말이다. k와 s사이에 알파벳이 8개 존재한다는 의미 어떻게 이런 생각을 했을까 이름 하나 잘 만들었다고 생각한다. 쿠버네티스는 공부하면 공부할 수 록 알고 있어야 할 개념과 용어가 많은거 같다. 그중 하나가 deployment인데 쿠버네티스를 사용하기 위해서 꼭 알고 있어야할 개념 중 하나다.

 

일단 용어에서 볼 수 있듯이 Deployment의 용어를 찾아보자.

deployment

deployment 단어를 찾아보니 군사용어로 행동 개시, 배치 라는 의미도 있고 백신에서도 사용될 수 가 있는데 예를 들어, vaccine deployment(어떤 효과를 보기 위해서 무언가를 사용하다로 의미로 사용된다고 한다.) 즉, 백신을 맞히다.로 이해할 수 있다. 

 

그렇다면, 개발용어에서 deployment는 무엇일까? 배포하다로 사용되고 있다. 그렇다면 k8s에서 사용되는 deployment의 의미도 배포하다 일 것이다. 그렇다면 무엇을 배포하는지 궁금하다.  아래 스크립트를 보자.

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

해당 스크립트는 쿠버네티스 공식 홈에 있는 deployment.yaml 파일 내용이다. 만약 k9s를 모르고 본다면 단어 그대로 해석하고 어떤 기능을 하는지 모를 가능성이 크다. 

 

  • apiVersion: 해당 deployment를 생성하기 위해 사용하고 있는 쿠버네티스 api버전이 어떤 것인지 정의할 때 사용한다. 
  • kind: 위에서 말했던 것처럼 쿠버네티스는 다양한 오브젝트가 존재하는데 그중 하나가 deployment이다. 
  • metadata: deployment의 설정을 해주는 곳이다. (오브젝트를 유일하게 구분해줄 데이터)
  • name: deployment의 이름을 정의한다. 
  • label: deployment의 레이블을 설정한다.
  • spec: 오브젝트 상태를 정의하는 곳이다. 
  • replicas: pod의 개수를 몇개 유지할지 설정하는 곳이다 기본값은 1이다. 
  • selector:  어떤 레이블의 파드를 선택하여 관리할지에 대한 설정, 앱 컨테이너의 nginx 레이블을 식별하여 해당되는 파드들을 관리하며, 이 필드가 없을 경우 spec.template.metadata.labels에 설정된 내용들을 기본값으로 사용 
  • spec.template.metadata: 어떤 파드를 실행할지 정의하는 곳
  • spec.template.metadata.name: 생성될 파드의 이름을 지정 
  • spec.template.metadata.labels.app:nginx: 식별하는 레이블이 앱 컨테이너고 nginx로 식별한다. 
  • spec.spec: 컨테이너에 대한 설정을 지정한다. 컨테이너 명, 포트, 등등
  • containerPort: 컨테이너가 사용하는 포트 지정 
    •  컨테이너와 통신을 하기위해 설정이 필요, service.yaml 추후에 하겠지만 service.yaml에 targetport가 있는데 targetPort와   containerPort가 같지가 않는다면, 서비스는 해당 container로 트래픽을 전달할 수 없다. 
    •   container port가 deployment.yaml의 port이고, target port도 deployment.yaml에서
    •   service port가 service.yaml의 실제 서비스되는 port라고 할 수 있다.

 

deployment를 배포하는 방법과 작동방법은 추후에 작성하도록 하겠다. 

댓글