[Kubernetes] Kubernetes Objects

Kubernetes Objects

workload

  • Pod - Kubernetes에서 배포 가능한 가장 작은 단위로, 하나 이상의 컨테이너를 포함한다.
  • Controller 
    • Deployment: ReplicaSet을 관리하여 원하는 Pod 수를 보장
    • ReplicaSet : 일반적으로 Deployment를 통해 관리되며 특정 수 의 Pod 복제본을 유지
    • StatefulSet : 각 Pod에 고유한 ID를 부여하며 상태를 가진 애플리케이션을 관리
    • DaemonSet : 클러스터의 모든 노드에서 단일 Pod를 실행
    • Job : 특정 작업을 한 번 실행하고 완료
    • CronJob : 정기적으로 반복되는 작업을 스케줄링
    • HorizontalPodAutoscaler(HPA) : 파드의 오토스케일링을 수행

Storage

  • ConfigMap : 애플리케이션 설정 데이터를 관리
  • Secret : 민감한 데이터를 암호화하여 저장
  • PersistentVolume (PV) : 클러스터에서 관리하는 스토리지 리소스
  • PersistentVolumeClaim (PVC) : Pod가 스토리지를 요청하는 방법

Network

  • Ingress 
    • 외부 HTTP(S) 트래픽을 클러스터 내부 서비스로 라우팅
    • URL 경로 기반 트래픽 분배 가능
    • SSL/TLS 인증서 관리 지원
  • Service - 클러스터 내에서 실행 중인 Pod 간의 네트워크 접근을 관리  
    • ClusterIP : 클러스터 내부에서만 접근 가능
    • NodePort : 클러스터 외부에서 접근 가능 (각 노드의 특정 포트를 통해)
    • LoadBalancer : 클라우드 제공자의 로드 밸런서를 생성하여 외부 트래픽 처리

Authentication(~/.kube/config 파일로 관리)

  • ServiceAccount (SA) - Kubernetes에서 실행되는 Pod가 API 서버에 접근할 때 사용하는 계정
  • RBAC - Kubernetes에서 리소스 접근 권한을 정의하고 계정 또는 그룹에 할당(역할 기반 접근 제어) 
    • Role : 특정 네임스페이스 내에서 리소스에 대한 권한을 정의
    • ClusterRole : 클러스터 범위의 리소스 접근 권한을 정의, 네임스페이스에 관계없이 클러스터 전역에서 사용
    • RoleBinding : Role과 사용자(ServiceAccount, User)를 연결, 특정 네임스페이스 내에서 사용자의 역할을 설정
    • ClusterRoleBinding : ClusterRole과 사용자(ServiceAccount, User)를 연결, 클러스터 전역에서 권한을 설정

Namespace 

  • Kubernetes 리소스를 논리적으로 분리하는 단위

Resource Limits

  • Limits : 컨테이너가 사용할 수 있는 리소스의 상한선
  • Requests : 컨테이너가 보장받을 최소 리소스
  • ResourceQuota : 네임스페이스 단위에서 리소스 사용량 제한
  • LimitRange : 네임스페이스 내에서 리소스 제한 및 기본값 설정

Scheduling

  • NodeName : 특정 노드에 Pod를 강제로 배치
  • NodeSelector: Pod를 특정 라벨이 있는 노드에만 배치.
  • Affinity 
    • Node Affinity : Pod가 특정 노드에서 실행되도록 제어
    • Pod Affinity : Pod가 특정 Pod와 가까운 노드에 배치되도록 제어
    • Pod Anti-Affinity : Pod가 특정 Pod와 같은 노드에 배치되지 않도록 제어
  • Taints/Tolerations
    • Taints : 특정 노드에 Pod가 스케줄링되지 않도록 설정.
    • Tolerations : Taints를 무시하고 특정 Pod를 노드에 스케줄링.
  • Drain/Cordon
    • Drain : 노드에서 실행 중인 Pod를 다른 노드로 이동(배출).
    • Cordon : 노드를 유지하면서 새로운 Pod가 스케줄링되지 않도록 막음. -> Drain 실행 시 자동으로 Cordon이 활성화됨

Kubernetes 오브젝트 개요 및 구성 요소

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

  • apiVersion: 사용 중인 Kubernetes API 버전을 명시
  • kind: 생성하려는 오브젝트의 종류를 지정
  • metadata: 오브젝트를 고유하게 식별할 데이터를 포함 (ex: 이름, UID, 네임스페이스 등)
  • spec: 오브젝트의 의도된 상태를 선언

Deployment 예시

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-deployment
  labels:
    app: redis
spec:
  replicas: 3  # 3개의 Pod 실행
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
        - name: redis
          image: redis:6.2.10  # Redis 컨테이너 이미지
          ports:
            - containerPort: 6379  # Redis 기본 포트
          resources:  # 리소스 요청 및 제한 설정
            requests:
              memory: "256Mi"
              cpu: "500m"
            limits:
              memory: "512Mi"
              cpu: "1"

Kubectl explain 명령어 사용법

특정 오브젝트의 사용 가능한 필드를 확인한다. 

  • 예시: kubectl explain <오브젝트_이름>
  • 하위 필드 탐색 (재귀적으로 사용 가능)
    • kubectl explain <오브젝트_이름>.<필드명>
    • kubectl explain <오브젝트_이름>.<필드명>.<필드명>...
kubectl explain pods
kubectl explain pods.spec
kubectl explain pods.spec.containers
kubectl explain pods.spec.containers.ports

Kubernetes API 버전 체계

  • kubectl api-versions: 현재 사용 가능한 API 버전을 확인한다. 

버전 단계특징리스크

Stable vX, v1, v2 - 안정화 완료, 변경 가능성 없음 안정적, 즉시 사용 가능
Beta v1betaX, v2betaX - 충분히 검증되었지만, 일부 기능 변경 가능 변경 시 downtime 발생 가능
Alpha v1alphaX, v2alphaX - 기본적으로 비활성화, 실험적인 기능 제공 높은 불안정성

API 발전 단계

Dev → Alpha → Beta → Stable

Kubernetes 오브젝트 관리 방법

  • 명령형 커맨드
    • kubectl create
    • kubectl run
    • kubectl expose
  • 명령형 오브젝트 구성 - YAML 파일 기반으로 절차적으로 오브젝트 생성 및 관리
    • kubectl create -f a.yml
    • kubectl apply -f a.yml
    • kubectl replace -f a.yml
  • 선언형 오브젝트 구성 - 한 번에 여러 YAML 파일을 디렉토리 단위로 실행
    • kubectl apply -f resources/

 

'kubernetes' 카테고리의 다른 글

[Kubernetes] Label, Select & Annotation  (0) 2024.12.03
[Kubernetes] Namespace  (0) 2024.11.29
[kubernetes] Pod  (0) 2024.11.27
[Kubernetes] Kubernetes architecture  (0) 2024.11.21
[Kubernetes] Kubernetes Cluster 환경 구축  (0) 2024.11.20