infra/Kubernetes

kubernetes Object란?

jjuni_96 2025. 3. 15. 14:54
728x90

Object란?

쿠버네티스 시스템의 상태를 나타내는 영속성 엔티티

 

 

 

Object 주요 특징

Spec (명세)

사용자가 정의한 "원하는 상태"

 

설명 그대로 사용자가 kubernets에 원하는 상태를 정의하는 역할을 한다. 정의 가능 내용에는 아래와같은 내용들이 있다.

  1. 컨테이너 이름
  2. 사용 이미지
  3. 리소스 제한 (CPU, MEM)
  4. 볼륨 마운트 (Local, PVC)

 

Status (상태)

kubernetes Cluster의 "현재 상태"

 

Status는 현재 상태를 나타내며, Spec 에서 사용자가 정의한 상태를 유지하려고 능동적으로 작업한다.

"읽기 전용"이므로 사용자가 수정할 수 없고, 변경 시 event가 발생한다.

 

 

 

Object 종류

1. Pod

kubernetes 에서 배포되는 최소 단위이며, 하나 이상의 컨테이너를 그룹화하동일한 네트워크 네임스페이스를 공유

 

샘플 코드

apiVersion: v1
kind: Pod 
metadata: # kubernetes 에서 추가적인 정보를 입력하여 사용자가 구분, 인식하기 쉽게 하기 위함.
  name: my-pod
spec:
  containers:
    - name: nginx
      image: nginx

 

 

 

2. Deployment

Application 배포와 상태 관리를 해주는 Object 이다.
롤링 업데이트, 롤백을 지원

 

샘플 코드

apiVersion: apps/v1
kind: Deployment
metadata: # 사용자가 분류하기 위한 정보들
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.17.10

 

 

3. Service

Pod 사이의 통신외부 노출을 하기 위한 Object

 

샘플 코드

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

 

 

 

4. ConfigMap

Pod에 적용할 환경변수, 설정 파일을 작성하는 Object

 

샘플 코드

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_ENV: "production"
  LOG_LEVEL: "info"

 

 

5. Secret

Pod에 적용할 비밀번호, API 인증키 등의 정보를 안전하게 적용하기 위한 Object

 

샘플코드

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  password: cGFzc3dvcmQ=

 

 

 

6. PersistentVolume(PV) & PersistentVolumeClaim(PVC)

PV : 실제 저장소를 정의하기 위한 Object
PVC : Pod가 어떤 PV를 사용할지 정의해주는 Object

 

샘플코드 (PV)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data

 

샘플코드 (PVC)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

 

 

 

7. Ingress

외부에서 서비스에 접근할 수 있도록 HTTP(S) 라우터 설정을 하는 Object

 

샘플코드

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-service
                port:
                  number: 80

 

 

 

Object 간의 관계

주로 많이 사용하는 Object들로 간단한 관계도를 그려보았다. 많이 빠진 부분도 많지만 추가해나가면서 보완해나갈 예정이다.

 

 

 

 

 

 

맺음말

이 Object를 정리하게 된 계기는 Deployment, Service 파일이 어떤 역할을 하는것인지 명확하게 인지하지 못하고 테스트를 진행하였다. 그러다보니 목적지로 가는 길을 많이 돌아서 갔었고, 사소한 개념들로 인해 인프라적인 자원도 많이 낭비한다는 것을 깨닫게 되었고 이 파일을 작성하게 되었다.

 

kubernetes는 내가 작성한 것 외에도 다양한 Object들이 있으며 자세한건 공식 사이트에 들어가서 검색해보면 친절히(?) 다 설명 되어있다. 아직 부족한 부분도 많고 배워야할게 더 많다는것을 느끼며....

앞으로 많은 서비스들을 구축해보면서 필요한 부분은 추가적으로 작성해나갈 예정이니 많은 관심과 사랑(?) 부탁드립니다.

 

 

 

 

 

Refs

오브젝트 공식 문서 : https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/kubernetes-objects/

 

쿠버네티스 오브젝트 이해하기

이 페이지에서는 쿠버네티스 오브젝트가 쿠버네티스 API에서 어떻게 표현되고, 그 오브젝트를 어떻게 .yaml 형식으로 표현할 수 있는지에 대해 설명한다. 쿠버네티스 오브젝트 이해하기 쿠버네티

kubernetes.io

 

728x90
반응형
LIST