쿠버네티스 Object 이해하기

각 오브젝트는 자신에게 맞는 레벨을 가지고 있다.

Namespace와 PV 경우에는 cluster 레벨에 속하는 오브젝트이고 deployment와 service 등은 Namespace 레벨에 속하는 오브젝트이다.

  • Cluster 레벨의 오브젝트 (가장 포괄적인 레벨)
    • Namespace 레벨의 오브젝트
      • Deployment : POD를 관리하기 위한 오브젝트
        • namespace : namespace 오브젝트의 name을 값으로 입력하면 해당 namespace의 소속이 된다.
        • replicas : 만들게 될 POD의 수
        • template : POD를 어떻게 만들지 정의
          • nodeSelector : POD를 만들 노드를 선택
          • containers : 컨테이너 이름과 이미지 위치, 컨테이너의 환경설정등 정의
            • image : dockerhub에서 이미지 다운
            • envFrom : POD에 환경 변수 값 제공
            • probe
              • startupProbe : 앱이 잘 기동 되었는지 체크(실패 : 재기동)
              • readinessProbe : 트래픽 관리, App에 트래픽을 연결할지 결정하는 속성(실패 : 연결해제)
              • livenessProbe : 서비스 관리, App이 정상이 아니면 재시작을 시킬지 판단하는 속성(실패 : 재기동)
            • resource : Pod 하나에 주어질 자원 정보, 설정하지 않으면 POD가 노드의 모든 자원을 사용할 수 있게 된다.
            • volumeMounts
              • name : Volumes 파라미터의 name과 매칭되어 해당 name의 object(persistentVolumeClaim)와 매칭된다.
              • mountpath : POD 내부에 만들어지는 디렉터리
          • volumes
            • name 값을 가지고 pvc와 secret 등의 오브젝트와 volumeMounts의 mountPath와 연결
        • Service
          • ⁠⁠metadata 3요소
            • namespace, name, labels
          • 해당 서비스의 역할은 트래픽을 POD에게 연결해 주는 것
        • ConfigMap / Secret
          • data : POD의 환경 변수로 들어갈 값(Secret에서는 계정 정보 등 더 중요한 값을 전달한다.)
          • stringData : 정의 된 내용을 가지고 POD 안에 파일로 만든다.
        • PVC(PersistentVolumeClaim)
          • resources : 저장 공간을 얼마나 사용할지 정의
          • accessModes : 이 저장공간의 access 모드 정의
        • HPA(Horizontal Pod Autoscaler) : 부하에 따라 POD를 늘려주거나 줄여주는 스케일링 역할 수행
          • metrics
            • resource : 해당 리소스가 정의 해놓은 평균 사용량을 넘어가면 스케일 아웃을 진행
    • PV(Persistent Volumes) 레벨의 오브젝트
      • ⁠⁠PV 오브젝트는 namespace 레벨의 오브젝트에 속하지 않기 때문에 namespace를 정의하는 파라미터가 없다.
      • local
        • path : local에 있는 해당 경로를 volume으로 사용하겠다는 것.
      • nodeAffinity : volume으로 사용할 노드를 정의
  • 네임스페이스 안에서 같은 종류의 오브젝트끼리는 이름이 같으면 안된다.
    • ex) Service와 deployment는 다른 오브젝트이므로 이름이 같아도 된다.

 

 

Labels 정의 방법

  • labels : 오브젝트에 있는 App 정보를 바로 파악하기 위해 사용
    • part-of : 어플리케이션의 전체 이름, 전체 서비스를 대표하는 이름
    • component : 이 서비스를 구성하고 있는 각각의 분리된 기능
    • name : 어플리케이션의 실제 이름
    • instance : 목적에 따라 여러 개의 프로메테우스를 새로 설치를 할 때 값을 다르게 줘서 사용
    • managed-by : object 생성 주체 확인 용도

 

 

작명 팁

  • namespace : 해당 namespace에 들어가는 app들에 대한 범위를 나타내는 이름
  • object의 name : 어플리케이션 네임과 인스턴스의 네임을 합쳐서 만든다

  • selector와 labels를 이용해서 오브젝트 간을 연결
    • selector에 있는 내용과 일치하는 labels를 갖은 오브젝트 또는 파드를 찾아서 연결한다.
    • labels에는 selector에 없는 추가 내용이 있어도 되지만, selector에는 labels에 없는 내용이 있으면 안된다.
    • instance가 유니크한 값이기 때문에 selector와 labels에 instance만 있어도 원하는 오브젝트나 파드를 연결할 수 있다.따라서 instance 값 외에 추가적인 내용을 넣는 것은 선택사항이다.
    • selector의 형태는 오브젝트의 종류에 따라서 포맷이 달라진다.
   
selector labels
deployment replicaset
replicaset pod
service pod
pvc pv

 

selector와 labels를 이용하여 오브젝트들을 매칭하는 방법 외에도 오브젝트 내에서 대상을 연결하는 속성을 제공해주는 방법이 있다.

  • HPA : scaleTargetRef에서 deployment의 name을 정의해 준다.
  • configMap, Secret, PVC도 파드에서 오브젝트를 직접 연결하는 속성이 있다.

Designed by JB FACTORY