![[쿠버네티스] Object를 그려보며 쿠버네티스 이해 #7](https://cdn.inflearn.com/public/files/blogs/da7e4177-8ac4-46f4-a796-43b272cbbd6b/스크린샷 2025-06-01 17.05.40.png)
[쿠버네티스] Object를 그려보며 쿠버네티스 이해 #7
1. 레이블-셀렉터 시스템의 중요성
레이블과 셀렉터 시스템은 단순한 메타데이터가 아닌 오브젝트 간 연결의 핵심 메커니즘
체계적인 네이밍과 레이블링은 팀 협업과 시스템 유지보수의 필수 요소
초기 설계의 중요성과 운영 중 변경의 어려움 고려 필요
2. 기본 환경 구성과 네임스페이스
2.1 마스터 노드 디렉토리 구조
Kubernetes 실습을 위한 마스터 노드 디렉토리 구조 생성 필요
Pod에서 파일 저장 용도로 사용되며 Persistent Volume과 연결되는 중요한 구성 요소
/root/k8s-local-volume/1231
로컬 볼륨을 활용한 데이터 저장 시나리오에서 필수적
Pod 생성 전에 미리 준비되어야 함
실제 운영에서는 네트워크 스토리지나 클라우드 스토리지 사용 권장
2.2 네임스페이스의 역할과 네이밍
네임스페이스 기본 구조
apiVersion: v1
kind: Namespace
metadata:
name: anotherclass-123
labels:
part-of: k8s-anotherclass
managed-by: kubectl
클러스터 내에서 고유한 이름 보유 필수
수업별 넘버링(123)을 통한 실습 환경 격리
각 수업에서 생성된 오브젝트가 다른 수업에 영향 미치지 않도록 구성
네임스페이스 네이밍 전략
포함될 애플리케이션의 범위를 명확히 표현
예시:
monitoring
(모니터링 관련 앱들),anotherclass-123
(실습 환경)기능별, 환경별, 팀별 구분 기준 적용
오브젝트 이름 중복 관리 규칙
네임스페이스 내에서 같은 종류 오브젝트 간 이름 중복 불허
서로 다른 종류 오브젝트(Deployment와 Service)는 같은 이름 허용
각 오브젝트 타입이 독립적인 네임스페이스를 가지기 때문
네임스페이스 삭제와 연쇄 효과
네임스페이스 삭제 시 해당 네임스페이스에 속한 모든 오브젝트 함께 삭제
실습 환경 정리 작업에 유용하지만 운영 환경에서는 신중히 사용
한 번의 명령으로 전체 프로젝트 리소스 일괄 삭제 가능
참고: Persistent Volume(PV) 같은 클러스터 레벨 오브젝트는 네임스페이스 삭제 시에도 별도 삭제 필요
3. 레이블 시스템의 이해
3.1 레이블링의 개념과 현실적 비유
옷 라벨과 Kubernetes 레이블의 유사성
옷에 붙은 라벨을 통해 제조 정보, 세탁 방법 등을 한눈에 파악 가능
Kubernetes에서도 동일한 원리로 오브젝트 관리와 식별에 활용
아무리 옷이 많아도 라벨만 잘 붙어있으면 정보 파악 가능
레이블링의 실무적 가치
초기에는 필요성을 못 느끼지만 오브젝트 수가 증가하면서 관리의 복잡성 증대
체계적인 라벨링을 통해 오브젝트가 속한 애플리케이션 정보를 즉시 파악
운영 효율성과 장애 대응 속도에 직접적 영향
팀 협업과 지식 공유에 필수적인 요소
3.2 레이블의 두 가지 역할
정보성 라벨링
오브젝트에 대한 메타 정보 제공
애플리케이션 식별, 버전 관리, 소유자 정보 등
사람이 읽고 이해하기 위한 목적
기능성 라벨링
오브젝트 간 연결과 선택을 위한 식별자
셀렉터를 통한 자동 매칭과 연결
시스템이 동작하기 위한 필수 요소
3.3 Kubernetes 권장 레이블 구조
Prometheus를 통한 실제 사례 분석
Kubernetes에서 권고하는 레이블링 방법을 실제로 적용한 사례
체계적인 레이블 구조를 통한 효과적인 오브젝트 관리 방법 제시
app.kubernetes.io/part-of: 애플리케이션 전체 이름
labels:
app.kubernetes.io/part-of: kube-prometheus
전체 서비스를 대표하는 최상위 레이블
여러 컴포넌트로 구성된 애플리케이션의 통합 식별자
마이크로서비스 아키텍처에서 서비스 그룹핑에 활용
app.kubernetes.io/component: 기능별 구성 요소
labels:
app.kubernetes.io/component: prometheus
애플리케이션 내에서 각각의 분리된 기능을 나타냄
Prometheus: 메트릭 수집과 성능 정보 API 제공
Exporter: 메트릭 데이터 제공
Grafana: 데이터 시각화
기능별 명확한 역할 구분을 통한 관리 효율성 증대
app.kubernetes.io/name: 실제 애플리케이션 이름
labels:
app.kubernetes.io/name: prometheus
구체적인 애플리케이션의 실제 이름
Component와 Name의 차이점 이해 중요
하나의 Component 내에 여러 Name이 존재 가능
예시: exporter component 내 kube-state-metrics, node-exporter 등
app.kubernetes.io/instance: 인스턴스 식별자
labels:
app.kubernetes.io/instance: prometheus-k8s
동일한 애플리케이션을 여러 개 설치할 때 구분하는 식별자
환경별(dev, staging, prod) 또는 목적별 구분에 활용
클러스터 내 동일 애플리케이션의 복수 배포 시 필수
인스턴스별 독립적인 관리와 모니터링 가능
app.kubernetes.io/version: 애플리케이션 버전
labels:
app.kubernetes.io/version: "2.44.0"
배포된 애플리케이션의 버전 정보
다른 레이블과 달리 애플리케이션 업데이트 시 변경 필요
롤백과 버전 관리에 중요한 정보
카나리 배포나 A/B 테스트 시 버전 구분에 활용
app.kubernetes.io/managed-by: 관리 도구
labels:
app.kubernetes.io/managed-by: helm
오브젝트를 생성하고 관리하는 도구 식별
kubectl, helm, kustomize, ArgoCD 등 배포 도구 구분
관리 주체 명확화를 통한 책임 소재 확실화
자동화 도구와 수동 관리의 구분
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
체계적인 레이블 구조를 실제 적용한 사례
수업별 인스턴스 넘버링(1231)으로 중복 방지
백엔드 서버 기능을 명확히 표시
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의 역할과 구조
Deployment는 Pod 생성과 업그레이드를 담당하는 핵심 오브젝트
애플리케이션 생명주기 관리에서 가장 중요한 역할 수행
선언적 방식으로 원하는 상태 정의 및 유지
기본 구조
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
이름으로 Deployment 생성ReplicaSet 자동 생성: Kubernetes가
api-tester-1231-xxxx
형태로 ReplicaSet 생성Pod 생성: ReplicaSet이
api-tester-1231-xxxx-yyyy
형태로 Pod 생성
이름 생성 규칙
Deployment: api-tester-1231
↓ (임의 문자열 추가)
ReplicaSet: api-tester-1231-abc123
↓ (추가 임의 문자열)
Pod: api-tester-1231-abc123-def456
Deployment 이름에 임의의 문자열을 추가하여 ReplicaSet 이름 생성
ReplicaSet 이름에 다시 임의 문자열을 추가하여 Pod 이름 생성
각 레벨에서 고유성 보장
역할 분담
Deployment: Pod의 업데이트와 롤백 관리 담당
ReplicaSet: Pod의 복제본 수 유지와 생성/삭제 담당
Pod: 실제 애플리케이션 컨테이너 실행
ReplicaSet의 Pod 관리 특성
ReplicaSet이 실제로 replicas 수만큼 Pod 생성
Pod 하나가 삭제되면 ReplicaSet이 즉시 감지하여 새 Pod 생성
항상 지정된 수의 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
Pod 템플릿의 레이블이 실제 생성되는 모든 Pod에 적용
nodeSelector를 통한 특정 노드 배치 설정
마스터 노드의 실제 레이블(
kubernetes.io/hostname: k8s-master
)과 매칭
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 사용)
Deployment가 ReplicaSet을 통해 Pod 관리
레이블-셀렉터 매칭을 통한 계층적 연결 구조
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
Service가 해당 레이블을 가진 모든 Pod에 트래픽 라우팅
동적 Pod 생성/삭제에도 자동으로 연결 관계 유지
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 # 직접 이름 참조
HPA는 scaleTargetRef를 통해 Deployment 직접 참조
레이블-셀렉터 방식이 아닌 이름 기반 참조
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
스토리지 리소스 할당에서도 동일한 매칭 메커니즘 적용
특정 요구사항에 맞는 PV 자동 선택
5.4 Kubernetes의 두 가지 연결 방식
레이블-셀렉터 방식
Deployment, Service, ReplicaSet, PVC 등에서 주로 사용
유연하고 동적인 연결 관계 지원
조건 기반 다중 오브젝트 선택 가능
직접 이름 참조 방식
ConfigMap, Secret, PVC 등에서 사용
Pod 설정에서 직접 오브젝트 이름 지정
volumes:
- name: config-volume
configMap:
name: api-tester-1231-config
HPA의 scaleTargetRef: Deployment를 직접 이름으로 참조
각 오브젝트 타입별 최적화된 연결 방식 제공
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 실무에서의 셀렉터 관리 전략
모든 문법을 암기할 필요 없음
검증된 템플릿 활용하여 필요한 부분만 수정
점진적 학습을 통한 복잡한 패턴 습득
개인 또는 팀 차원의 템플릿 라이브러리 구축 권장
Google Drive나 개인 드라이브에 잘 가지고 있으면 됨
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에 전달 가능
Prometheus 예시에서는 성능 정보 계산 공식을 저장 (
prometheus-k8s-rule
)애플리케이션 기동 시 초기 데이터로 활용
목적에 따른 ConfigMap 네이밍:
properties
,rules
,config
등사용 목적에 따라 네이밍을 추가하면 좋음
Pod에서 ConfigMap 참조
containers:
- name: app
envFrom:
- configMapRef:
name: api-tester-1231-properties
Pod가 ConfigMap 모든 데이터를 환경변수로 수신
애플리케이션은 표준적인 환경변수 접근 방법으로 값들 사용
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
Secret 데이터는 Pod 내부 특정 경로에 파일로 마운트 가능
애플리케이션이 환경변수가 아닌 파일 시스템을 통해 민감 정보 접근
ConfigMap과 달리 stringData 필드 사용
이 내용들을 가지고 이 파일이 Pod 안에 만들어짐
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
네임스페이스에 속하지 않는 클러스터 레벨 오브젝트
마스터 노드의 실제 레이블(
kubernetes.io/hostname: k8s-master
)과 연결로컬 볼륨 경로와 노드 어피니티를 통한 정확한 위치 지정
PV를 만들 때 문제가 생기기 때문에 디렉토리를 미리 만들어 둔 것
8.2 노드 레이블과 연결 메커니즘
마스터 노드의 자동 생성 레이블
# Kubernetes가 자동으로 생성하는 노드 레이블
labels:
kubernetes.io/hostname: k8s-master
kubernetes.io/os: linux
node-role.kubernetes.io/master: ""
Kubernetes가 클러스터를 구성하면서 자동으로 만들어 놓은 오브젝트에 레이블 존재
Pod의 노드 선택
# Pod template의 nodeSelector
nodeSelector:
kubernetes.io/hostname: k8s-master
노드의 실제 레이블과 정확히 매칭
특정 노드에 Pod와 PV를 모두 배치하여 로컬 스토리지 활용
nodeSelector로 지정한 마스터 노드에서 이 레이블과 연결
레이블의 정보 역할과 기능성 역할
정보 역할만 하는 레이블: 사람이 보기 위한 메타데이터
기능성 역할을 하는 레이블: 시스템이 오브젝트를 연결하기 위해 사용
Pod는 nodeSelector와 PV는 nodeAffinity로 노드 레이블과 연결
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 네이밍 전략
Pod에는 여러 Service 연결 가능
클러스터 내부 전용:
internal
접미사외부 접속 전용:
external
접미사목적에 따른 명확한 네이밍으로 관리 효율성 증대
사용 목적에 맞게 네이밍을 추가하면 됨
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 네이밍 전략
특정 이벤트를 위한 임계치 조정으로 여러 HPA 오브젝트 생성 가능
목적에 따른 네이밍으로 구분 (
default
,event
,peak-hours
등)특정 이벤트를 위해서 임계치를 다르게 해준 오브젝트를 따로 만들어 놓게 되면 이런 이름을 쓸 수 있음
11. 오브젝트 레벨과 스코프
11.1 클러스터 레벨 vs 네임스페이스 레벨
클러스터 레벨 오브젝트
Persistent Volume, Node, Namespace가 대표적
전체 클러스터에서 유일하며 모든 네임스페이스에서 접근 가능
클러스터 관리자 권한 필요
네임스페이스 삭제 시에도 별도 삭제 필요
네임스페이스 개념이 없어 글로벌 범위에서 관리
네임스페이스 레벨 오브젝트
Deployment, Service, ConfigMap, Secret, PVC가 해당
특정 네임스페이스 내에서만 존재
네임스페이스 삭제 시 함께 삭제
멀티 테넌시 환경에서 리소스 격리와 접근 제어의 핵심
11.2 오브젝트 연결 방식의 분류
레이블-셀렉터 기반 연결
Deployment → ReplicaSet → Pod
Service → Pod
PVC → PV (선택적)
동적이고 유연한 연결 관계
조건 기반 다중 오브젝트 선택 가능
직접 이름 참조 기반 연결
HPA → Deployment (scaleTargetRef)
Pod → ConfigMap (configMapRef)
Pod → Secret (secretRef)
Pod → PVC (persistentVolumeClaim)
명시적이고 안정적인 연결 관계
Kubernetes의 연결 방식 정리
크게 두 가지 연결 방식 제공
오브젝트마다 다른 방법을 제공
각 오브젝트 타입별 최적화된 연결 방식 선택
12. 모니터링과 관찰 가능성
12.1 Prometheus를 통한 메트릭 수집
메트릭 수집 아키텍처
Prometheus: 중앙 집중식 메트릭 수집과 저장, 성능 정보에 대한 API 제공
Exporter: 다양한 소스로부터 메트릭 데이터 제공
Grafana: 수집된 메트릭의 시각화와 대시보드 구성
kube-state-metrics의 역할
Kubernetes 클러스터 자체의 메트릭 정보 제공
오브젝트 상태, 리소스 사용량, 클러스터 헬스 모니터링
클러스터 운영에 필수적인 관찰 데이터 생성
Node Exporter의 기능
개별 노드(VM)의 시스템 메트릭 수집
CPU, 메모리, 디스크, 네트워크 사용률 모니터링
인프라 레벨의 성능 데이터 제공
12.2 모니터링 네임스페이스 설계
metadata:
namespace: monitoring
모니터링 관련 모든 컴포넌트를 전용 네임스페이스에 배치
시스템 모니터링 도구들의 격리와 독립적 관리
모니터링 인프라의 안정성 보장
네임스페이스 이름은 이 네임스페이스에 들어가는 앱들에 대한 범위를 나타내는 이름이 좋음
13. 실무에서의 고려사항과 교훈
13.1 레이블과 네이밍의 중요성에 대한 실무 교훈
2년 경력 후의 깨달음
강의에서 언급된 실무 경험담이 보여주는 핵심 교훈
레이블과 셀렉터, 네이밍 규칙이 단순 기술 설정을 넘어 팀 협업과 시스템 유지보수에 직결
초기 설계의 중요성과 나중에 수정하기 어려운 현실적 제약
실제로 Kubernetes를 시작하고 2년 정도가 지나서야 이 부분을 신경쓰기 시작
조기 학습의 중요성
실제 구성한 YAML 파일에 대한 설명 요구 상황 시 당황하지 않기 위함
체계적인 레이블링과 네이밍이 전문성의 지표
기본기의 탄탄함이 복잡한 운영 환경에서의 자신감으로 연결
만약에 이걸 신경쓰기 전에 제가 구성한 야물파일들을 보고 누군가 이 구성을 왜 이렇게 했는지 물어봤다면 매우 부끄러웠을 것
현실적인 경험담의 교훈
이름을 잘 모르는 동료 상황과 유사한 느낌
시간이 어느 정도 지났을 때 모르고 있으면 찾피한 상황들 발생
지금부터 배울 내용이 바로 이런 느낌
13.2 운영 환경에서의 변경 관리
레이블과 이름 변경의 위험성
오브젝트 이름과 레이블은 연결 요소이므로 변경 시 연쇄 영향 발생
운영 중인 시스템에서는 네이밍 변경이 매우 부담스러운 작업
초기 설계 단계에서 충분한 검토와 계획 필요
이런 부분들은 운영에 올라가기까지 정말 많이 고민을 해보시고 만들길 당부
템플릿 기반 관리 전략
개인 또는 팀 차원의 YAML 템플릿 라이브러리 구축
Google Drive나 Git 저장소를 활용한 템플릿 관리
검증된 패턴을 재사용하여 일관성 유지와 실수 방지
그런 템플릿을 불러가가 했던 개인 구글 드라이브가 했던 내가 언제든 바로 쓸 수 있는 형태로만 잘 가지고 있으면 됨
13.3 과정에서의 어려움과 중요성
이과정이 제일 어려운 부분
네이밍과 레이블 구성을 위한 과정이 가장 어려운 부분
이런 걸 처음 많이 고민해서 만들어 놔야 되는 게 이름이랑 레이블들은 다 오브젝트 연결 요소
나중에 수정하다가 예리가 날 수도 있음
운영까지 간 상황에서의 부담
이미 운영까지 간 상황이라면 벌써 아닌 네이밍조차도 수정하기가 많이 부담스러움
초기 계획과 설계의 중요성
13.4 학습과 복습 전략
점진적 숙달 방법
처음에는 많은 내용처럼 보이지만 실제로는 자주 사용하는 핵심 기능들
반복 사용을 통한 자연스러운 습득
부담 갖지 말고 꾸준한 실습을 통한 숙련도 향상
조금만 쓰다보면 금방 익숙해질 부분들이니까 너무 부담 갖지 마시고
실습 환경 활용
생성된 오브젝트들을 직접 조작하며 내용 복습
다양한 명령어와 참고 자료를 활용한 능동적 학습
이론과 실습의 균형을 통한 깊이 있는 이해
다음 수업을 들기 전에 현재 만들어진 오브젝트들을 이것저것 놀리보면서 내용을 한번 복습을 해보세요
14. 전체 시스템 아키텍처 정리
14.1 실제 구성된 오브젝트 관계도
수업별 넘버링 체계
Namespace:
anotherclass-123
(수업별 넘버링)각 수업에서 만들었던 오브젝트가 전체 수업에 영향이 없도록 하기 위한 목적
수업 때마다 네이밍 이름을 다르게 하여 격리
Pod 업데이트 관리
Deployment: Pod의 업데이트를 관리하고 ReplicaSet이 복제본을 관리하는 역할
ReplicaSet: 복제본을 관리하는 역할을 하는 거
정확하게는 Deployment가 파드의 업데이트를 관리
selector와 matchLabels 연결
Deployment와 ReplicaSet에 어떤 select와 label로 연결되어 있음
Service도 Pod에 연결할 때 마찬가지
PVC랑 PV도 이렇게 연결
selector와 label은 오브젝트를 매칭해주는 역할
14.2 클러스터 전체 구성
네임스페이스와 클러스터 레벨 분리
Service, PVC와 PV도 연결되는데 노드도 클러스터를 구성
Kubernetes가 자동으로 만들어 놓은 오브젝트가 있고 이 오브젝트에도 레이블이 있음
PAD에서는 노드 셀렉터가 그리고 PV에서는 노드 어피니티가 이 레이블과 연결
레이블의 이중 역할 재강조
레이블에는 정보와 기능성 역할을 하는 레이블의 정보 역할만 하는 레이블이 있음
앞에 prefix를 붙일 수도 있어요 (도메인을 가리킴)
특히 Kubernetes 분석에 있는 아울 파일들에서 이런 예제들을 많이 볼 수가 있음
15. 결론
15.1 핵심 구성 요소별 역할 정리
네임스페이스를 통한 논리적 그룹핑으로 리소스 격리와 관리
Deployment와 Service를 통한 애플리케이션 배포와 네트워킹
ConfigMap과 Secret을 통한 구성 관리와 보안
PV/PVC를 통한 데이터 영속성 보장
HPA를 통한 자동 확장과 리소스 최적화
15.2 레이블-셀렉터 시스템의 핵심 가치
오브젝트 간 연결 관계와 레이블-셀렉터 메커니즘의 정확한 이해 필수
체계적인 레이블링과 네이밍이 단순 기술 지식을 넘어 실무 성공의 핵심 요소
초기 설계의 중요성과 운영 중 변경의 어려움을 고려한 신중한 접근 필요
15.3 실무 적용을 위한 권장사항
Kubernetes 권장 레이블 적극 활용
app.kubernetes.io/*
프리픽스를 활용한 표준화된 레이블링part-of, component, name, instance, version, managed-by 구조 활용
추가적으로 의미 있는 정보들을 더 만들면 좋음
댓글을 작성해보세요.
이거 AI가 정리 해준건가요? 너무 꼼꼼한데?