쿠버네티스 어나더 클래스 지상편: Sprint1 Day5 Object 그려보며 이해하기
강의 환경 구성하기
오브젝트
Cluster Level 오브젝트: Namespace, PV
Namespace Level 오브젝트: Deployment, Service
Namespace를 삭제하면 오브젝트가 모두 삭제된다. PV는 별도로 삭제해야한다.
Namespace: 오브젝트를 그룹핑해주는 역할
Deployment: Pod를 만들고 업그레이드를 해주는 역할
→ metadata에 namespace 값: Deployment는 Namespace에 소속이 된다.
→ name: 한 namespace에서 이 이름은 중복되면 안된다.
→ replicas: Pod 생성 개수
→ template: 내용으로 Pod가 생성된다.
→ image: Docker Hub 이미지
→ startupProbe: App이 성공적으로 기동됐는지 체크 → rednessProbe App이 트래픽을 연결할 건지 결정 / LivenessProbe App이 정상이 아니면 재시작 여부 결정
→ resources 미 설정 시 Pod가 Node의 자원을 모두 사용함
Service: Pod에게 트래픽을 연결해주는 역할
→ name: Service와 Deployment는 서로 다른 오브젝트이므로 이름이 같아도 된다.
Configmap: Pod에 환경변수 값을 제공하는 역할
→ data: 환경 변수 내용
Pod에서는 여러개의 Configmap을 담을 수 있다.
Secret: Pod에 중요한 값을 제공하는 역할
PVC: Pod에서 PV를 지정할 때 사용
PV: 실제 볼륨을 지정하는 역할
HPA: 부하에 따라 Pod를 늘려주고 스케일링 해주는 역할
→ kind: 스케일 대상으로 Deployment 지정
→ metrics: 스케일 조건 지정
→ behavior: 부하가 증가한다고 해서 바로 늘어나지 않도록 설정
Label: 오브젝트에 걸려 있는 App의 정보를 바로 파악하기 위해 사용, K8s에서는 Label 정보를 관리할 것을 권고한다.
part-of: App의 전체 이름(전체 서비스를 대표하는 이름)
component: 서비스를 구성하고 있는 각각의 분리된 기능들
→ prometheus: 매트릭 수집, 성능 API 제공
→ exporter: 매트릭 제공
→ grafana: 성능 정보 시각화 제공
name: App의 실제 이름
→ kube-state-metrics: K8s 클러스터에 매트릭 제공
→ node-exporter: 노드(VM) 정보를 제공하는 App
instance: 식별자, 목적에 따라 여러개의 App을 설치할 때 값을 다르게 줘서 사용, K8s 어플리케이션 이름에 식별자를 추가하는 예시가 많음
version: App 버전이 변경되면 같이 수정 필요
namespace: Namespace에 포함되는 App들에 대한 범위를 나타내는 이름이면 좋다
Managed-by: 어떤 도구로 배포되었는가
K8s 오브젝트간 연결 방법
Lables와 Selector
오브젝트 내에서 대상을 연결하는 속성 사용
HPA 내에서 Deployment 지정 속성(sclaleTargetRef)
Configmap, Secret, PVC: Pod에서 직접 연결하는 속성
Deplyoment와 ReplicaSet
Deployment: Pod 업데이트 관리 → ReplicaSet: Pod 복제본 관리
Selector
Label는 Selector와 매칭되어 두 오브젝트를 연결하는 데 사용한다.
→ Instance는 중복되지 않으므로, Instance 만으로도 실수 없이 원하는 Pod를 매칭할 수 있다.
→ Instance외 추가적인 내용을 넣는 것은 선택사항이다.
Selector들은 각각의 사용 방법이 조금씩 다르다.
Node도 클러스터를 구성하면서 K8s가 구성한 Lable이 있다.
Pod에서는 nodeSelector가 PV에서는 nodeAffinity가 이 Lable과 연결된다.
추가적으로 의미있는 정보들을 더 만들면 좋다.
댓글을 작성해보세요.