쿠버네티스 Object 이해하기
- IT 정보/쿠버네티스
- 2024. 5. 18.
각 오브젝트는 자신에게 맞는 레벨을 가지고 있다.
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에게 연결해 주는 것
- metadata 3요소
- ConfigMap / Secret
- data : POD의 환경 변수로 들어갈 값(Secret에서는 계정 정보 등 더 중요한 값을 전달한다.)
- stringData : 정의 된 내용을 가지고 POD 안에 파일로 만든다.
- PVC(PersistentVolumeClaim)
- resources : 저장 공간을 얼마나 사용할지 정의
- accessModes : 이 저장공간의 access 모드 정의
- HPA(Horizontal Pod Autoscaler) : 부하에 따라 POD를 늘려주거나 줄여주는 스케일링 역할 수행
- metrics
- resource : 해당 리소스가 정의 해놓은 평균 사용량을 넘어가면 스케일 아웃을 진행
- metrics
- Deployment : POD를 관리하기 위한 오브젝트
- PV(Persistent Volumes) 레벨의 오브젝트
- PV 오브젝트는 namespace 레벨의 오브젝트에 속하지 않기 때문에 namespace를 정의하는 파라미터가 없다.
- local
- path : local에 있는 해당 경로를 volume으로 사용하겠다는 것.
- nodeAffinity : volume으로 사용할 노드를 정의
- Namespace 레벨의 오브젝트
- 네임스페이스 안에서 같은 종류의 오브젝트끼리는 이름이 같으면 안된다.
- 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도 파드에서 오브젝트를 직접 연결하는 속성이 있다.