K8s 오브젝트

Ziggy Stardust·2025년 1월 10일
0

K8s 에선 오브젝트(Object) 라는 개념이 있습니다.
상태를 반영구적으로 가지며 바라는 상태 를 유지하기 위해 자신의 역할을 수행하는 K8s 의 개념입니다.

K8s 는 기본적으로 마이크로서비스 아키텍쳐이다는 점을 알고 있으면 좋습니다.

이러한 오브젝트는 yaml 포맷으로 정의할 수 있습니다.

오브젝트 필수 필드

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  labels:
    app: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx:latest
  • apiVersion : 이 오브젝트를 해석할 API 버전 (예 : apps/v1)
  • kind : 어떤 종류*타입)의 오브젝트인지 (예 : Deployment)
  • metadata : name, label, namespace 등 메타데이터 정보
  • spec : 사용자가 원하는 상태를 정의

오브젝트를 생성하는데선언형명령형 두 방식이 존재합니다.

  1. 선언형으로 생성
    yaml 파일에 오브젝트의 정보를 담아 생성합니다.
kubectl apply -f {replica.yml}
  • 문서로 관리하며 변경사항을 적용할 수 있습니다.
  • 협업 시 유용하며 추적과 관리가 편리합니다.
  1. 명령형으로 생성
    kubectl create , kubectl delete 같은 명령어로 설정 과정을 직접 처리해야합니다.
  • 빠르게 반영할 수 있지만 추적이 힘듭니다.

대표적인 오브젝트 종류

  • Pod : K8s 의 가장 작은 배포 단위. 여러 컨테이너를 포함한다.
  • ReplicaSet : Pod 를 지정된 수만큼 유지시킵니다.
  • Deployment : Pod 의 배포를 담당합니다. (레플리카의 상위 레벨 오브젝트. ReplicaSet 의 내용을 포함할 수 있다.)
  • Service : Pod 에 네트워크 서비스 제공 (리눅스 같은 K8s 클러스타 바로 밖과 K8s 클러스터 내부를 연결시킨다.)
  • ConfigMap / Secret : 애플리케이션 설정값, 민감 정보 등을 외부에서 주입한다.
  • Ingress : 외부 트래픽을 내부 Service 에게 라우팅한다.

외에도 여러 오브젝트가 존재합니다.

많이 쓰는 kubectl 명령어

  • 생성 / 업데이트
kubectl apply -f {svc.yml}
  • 조회
kubectl get {오브젝트 타입}
kubectl get pods
kubectl get services
  • 상세 정보 확인
kubectl describe {오브젝트 타입} {오브젝트 이름}
  • 삭제
kubectl delete -f {svc.yml}

kubectl delete {오브젝트 타입} {오브젝트 이름}

살짝 중요한 점

같은 namespace 안에선 name으로 식별합니다. 따라서 name 은 namespace 안에서 유일해야 합니다.
labels 라는 필드가 존재하는데 중복되어도 좋고 그루핑 등에 사용될 수 있습니다.

profile
spider from mars

0개의 댓글