inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[쿠버네티스] Object를 그려보며 쿠버네티스 이해 #7

_hamtaro_o
1

1. 레이블-셀렉터 시스템의 중요성

 

2. 기본 환경 구성과 네임스페이스

2.1 마스터 노드 디렉토리 구조

/root/k8s-local-volume/1231

2.2 네임스페이스의 역할과 네이밍

네임스페이스 기본 구조

apiVersion: v1
kind: Namespace
metadata:
  name: anotherclass-123
  labels:
    part-of: k8s-anotherclass
    managed-by: kubectl

네임스페이스 네이밍 전략

오브젝트 이름 중복 관리 규칙

네임스페이스 삭제와 연쇄 효과

참고: Persistent Volume(PV) 같은 클러스터 레벨 오브젝트는 네임스페이스 삭제 시에도 별도 삭제 필요

 

 

3. 레이블 시스템의 이해

3.1 레이블링의 개념과 현실적 비유

옷 라벨과 Kubernetes 레이블의 유사성

레이블링의 실무적 가치

3.2 레이블의 두 가지 역할

정보성 라벨링

기능성 라벨링

3.3 Kubernetes 권장 레이블 구조

Prometheus를 통한 실제 사례 분석

app.kubernetes.io/part-of: 애플리케이션 전체 이름

labels:
  app.kubernetes.io/part-of: kube-prometheus

app.kubernetes.io/component: 기능별 구성 요소

labels:
  app.kubernetes.io/component: prometheus

app.kubernetes.io/name: 실제 애플리케이션 이름

labels:
  app.kubernetes.io/name: prometheus

app.kubernetes.io/instance: 인스턴스 식별자

labels:
  app.kubernetes.io/instance: prometheus-k8s

app.kubernetes.io/version: 애플리케이션 버전

labels:
  app.kubernetes.io/version: "2.44.0"

app.kubernetes.io/managed-by: 관리 도구

labels:
  app.kubernetes.io/managed-by: helm

3.4 실습 환경의 레이블 구조

강의에서 사용된 실제 레이블 구조

metadata:
  labels:
    app.kubernetes.io/part-of: k8s-anotherclass
    app.kubernetes.io/component: backend-server
    app.kubernetes.io/name: api-tester
    app.kubernetes.io/instance: api-tester-1231
    app.kubernetes.io/version: "1.0.0"
    app.kubernetes.io/managed-by: kubectl

3.5 커스텀 레이블과 프리픽스 활용

도메인 기반 프리픽스

labels:
  app.kubernetes.io/name: api-tester
  company.com/team: platform
  custom.domain.com/owner: devops-team

기타 유용한 레이블들

labels:
  # 환경 정보
  environment: production
  stage: dev
  # 소유권 정보  
  owner: team-backend
  # 애플리케이션 역할
  app-role: server
  # 릴리즈 정보
  release: release-1.2.1

 

4. Deployment와 Pod 관리 체계

4.1 Deployment의 역할과 구조

기본 구조

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: anotherclass-123
  name: api-tester-1231
  labels:
    app.kubernetes.io/part-of: k8s-anotherclass
    app.kubernetes.io/component: backend-server
    app.kubernetes.io/name: api-tester
    app.kubernetes.io/instance: api-tester-1231
    app.kubernetes.io/version: "1.0.0"
spec:
  replicas: 2
  strategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app.kubernetes.io/name: api-tester
      app.kubernetes.io/instance: api-tester-1231

4.2 Deployment-ReplicaSet-Pod 생성 메커니즘

실제 동작 과정

이름 생성 규칙

Deployment: api-tester-1231
    ↓ (임의 문자열 추가)
ReplicaSet: api-tester-1231-abc123
    ↓ (추가 임의 문자열)
Pod: api-tester-1231-abc123-def456

역할 분담

ReplicaSet의 Pod 관리 특성

4.3 Pod 템플릿과 레이블 상속

template:
  metadata:
    labels:
      app.kubernetes.io/part-of: k8s-anotherclass
      app.kubernetes.io/component: backend-server
      app.kubernetes.io/name: api-tester
      app.kubernetes.io/instance: api-tester-1231
      app.kubernetes.io/version: "1.0.0"
  spec:
    nodeSelector:
      kubernetes.io/hostname: k8s-master
    containers:
    - name: app
      image: kubetm/app

 

5. 셀렉터를 통한 오브젝트 연결

5.1 레이블-셀렉터 매칭 시스템

기본 동작 원리

매칭 규칙

# Deployment의 selector
selector:
  matchLabels:
    app.kubernetes.io/name: api-tester
    app.kubernetes.io/instance: api-tester-1231

# Pod의 labels (매칭 대상)
metadata:
  labels:
    app.kubernetes.io/part-of: k8s-anotherclass
    app.kubernetes.io/component: backend-server
    app.kubernetes.io/name: api-tester
    app.kubernetes.io/instance: api-tester-1231
    app.kubernetes.io/version: "1.0.0"

인스턴스 기반 고유 매칭

5.2 주요 오브젝트별 연결 방식

Deployment ReplicaSet Pod

# Deployment selector → ReplicaSet 연결
selector:
  matchLabels:
    app.kubernetes.io/name: api-tester
    app.kubernetes.io/instance: api-tester-1231

# ReplicaSet selector → Pod 연결 (동일한 selector 사용)

Service Pod

# Service
apiVersion: v1
kind: Service
metadata:
  name: api-tester-1231
spec:
  selector:
    app.kubernetes.io/name: api-tester
    app.kubernetes.io/instance: api-tester-1231
  ports:
  - port: 80
    targetPort: 8080

HPA Deployment

# HPA
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: api-tester-1231-default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: api-tester-1231  # 직접 이름 참조

5.3 PVC와 PV 연결

# PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: api-tester-1231-files
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: api-tester
      app.kubernetes.io/instance: api-tester-1231-files
      
# PV  
apiVersion: v1
kind: PersistentVolume
metadata:
  name: api-tester-1231-files
  labels:
    app.kubernetes.io/name: api-tester
    app.kubernetes.io/instance: api-tester-1231-files

5.4 Kubernetes의 두 가지 연결 방식

레이블-셀렉터 방식

직접 이름 참조 방식

volumes:
- name: config-volume
  configMap:
    name: api-tester-1231-config

 

6. 다양한 셀렉터 문법

6.1 기본 문법 (Service 등)

selector:
  app: api-tester
  instance: api-tester-1231

6.2 matchLabels 문법 (Deployment, ReplicaSet, PVC 등)

selector:
  matchLabels:
    app.kubernetes.io/name: api-tester
    app.kubernetes.io/instance: api-tester-1231

6.3 노드 어피니티의 복잡한 표현

nodeAffinity:
  required:
    nodeSelectorTerms:
    - matchExpressions:
      - key: kubernetes.io/hostname
        operator: In
        values:
        - k8s-master

6.4 실무에서의 셀렉터 관리 전략

 

7. 환경변수와 구성 관리

7.1 ConfigMap을 통한 환경변수 관리

apiVersion: v1
kind: ConfigMap
metadata:
  name: api-tester-1231-properties
  namespace: anotherclass-123
  labels:
    app.kubernetes.io/part-of: k8s-anotherclass
    app.kubernetes.io/name: api-tester
    app.kubernetes.io/instance: api-tester-1231
data:
  database_url: "postgresql://localhost:5432/mydb"
  log_level: "info"

ConfigMap의 다양한 활용

Pod에서 ConfigMap 참조

containers:
- name: app
  envFrom:
  - configMapRef:
      name: api-tester-1231-properties

7.2 Secret을 통한 민감 정보 관리

apiVersion: v1
kind: Secret
metadata:
  name: api-tester-1231-postgresql
  namespace: anotherclass-123
  labels:
    app.kubernetes.io/part-of: k8s-anotherclass
    app.kubernetes.io/name: api-tester
    app.kubernetes.io/instance: api-tester-1231
stringData:
  username: admin
  password: secretpassword

 

8. 스토리지 관리와 노드 연결

8.1 Persistent Volume의 클러스터 레벨 특성

apiVersion: v1
kind: PersistentVolume
metadata:
  name: api-tester-1231-files
  labels:
    app.kubernetes.io/name: api-tester
    app.kubernetes.io/instance: api-tester-1231-files
spec:
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  local:
    path: /root/k8s-local-volume/1231
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - k8s-master

8.2 노드 레이블과 연결 메커니즘

마스터 노드의 자동 생성 레이블

# Kubernetes가 자동으로 생성하는 노드 레이블
labels:
  kubernetes.io/hostname: k8s-master
  kubernetes.io/os: linux
  node-role.kubernetes.io/master: ""

Pod의 노드 선택

# Pod template의 nodeSelector
nodeSelector:
  kubernetes.io/hostname: k8s-master

레이블의 정보 역할과 기능성 역할

 

9. 서비스와 네트워킹

9.1 Service의 용도별 네이밍

# 내부 통신용 Service
apiVersion: v1
kind: Service
metadata:
  name: api-tester-1231-internal
spec:
  type: ClusterIP
  selector:
    app.kubernetes.io/name: api-tester
    app.kubernetes.io/instance: api-tester-1231

---
# 외부 노출용 Service  
apiVersion: v1
kind: Service
metadata:
  name: api-tester-1231-external
spec:
  type: NodePort
  selector:
    app.kubernetes.io/name: api-tester
    app.kubernetes.io/instance: api-tester-1231

Service 네이밍 전략


10. 자동 확장과 부하 관리

10.1 HPA의 다양한 정책 관리

기본 HPA 설정

# 기본 HPA
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: api-tester-1231-default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: api-tester-1231
  minReplicas: 2
  maxReplicas: 4
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 40

특별한 이벤트용 HPA

# 특별한 이벤트용 HPA
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: api-tester-1231-event
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: api-tester-1231
  minReplicas: 5
  maxReplicas: 20

HPA 네이밍 전략

 

11. 오브젝트 레벨과 스코프

11.1 클러스터 레벨 vs 네임스페이스 레벨

클러스터 레벨 오브젝트

네임스페이스 레벨 오브젝트

11.2 오브젝트 연결 방식의 분류

레이블-셀렉터 기반 연결

직접 이름 참조 기반 연결

Kubernetes의 연결 방식 정리

 

12. 모니터링과 관찰 가능성

12.1 Prometheus를 통한 메트릭 수집

메트릭 수집 아키텍처

kube-state-metrics의 역할

Node Exporter의 기능

12.2 모니터링 네임스페이스 설계

metadata:
  namespace: monitoring

 

13. 실무에서의 고려사항과 교훈

13.1 레이블과 네이밍의 중요성에 대한 실무 교훈

2년 경력 후의 깨달음

조기 학습의 중요성

현실적인 경험담의 교훈

13.2 운영 환경에서의 변경 관리

레이블과 이름 변경의 위험성

템플릿 기반 관리 전략

13.3 과정에서의 어려움과 중요성

이과정이 제일 어려운 부분

운영까지 간 상황에서의 부담

13.4 학습과 복습 전략

점진적 숙달 방법

실습 환경 활용

 

14. 전체 시스템 아키텍처 정리

14.1 실제 구성된 오브젝트 관계도

수업별 넘버링 체계

Pod 업데이트 관리

selector와 matchLabels 연결

14.2 클러스터 전체 구성

네임스페이스와 클러스터 레벨 분리

레이블의 이중 역할 재강조

 

15. 결론

15.1 핵심 구성 요소별 역할 정리

15.2 레이블-셀렉터 시스템의 핵심 가치

15.3 실무 적용을 위한 권장사항

Kubernetes 권장 레이블 적극 활용

데브옵스 · 인프라 쿠버네티스 일프로

답변 1

0

일프로

이거 AI가 정리 해준건가요? 너무 꼼꼼한데?