본문 바로가기
IT/Kubernetes

[Kubernetes] Kubernetes Objects

by 깅지수 2022. 5. 17.

Kubernetes Objects 

  • 오브젝트 종류
  • 오브젝트 버전
  • 오브젝트 정의
  • 오브젝트 관리

 


 

Kubernetes Objects

 

* Objects : 쿠버네티스에서 생성하고 관리할 수 있는 것들

* Resource : Objects를 이용해서 만든 것 (resource를 생성할 때, 명령방식과 YAML 방식이 있는데 YAML이 일반적)
* 참고 : https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/kubernetes-objects/

 

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

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

kubernetes.io

 


오브젝트 종류

 

 

k8s에서 생성할 수 있는 모든 objects 보여줌

kubectl api-resouces

 

  • Label/LabelSelector (검색용도/object와 object의 관계를 정의할 때 사용)
  • Workload (★중요)
    •  Pod (← k8s의 핵심, Pod는 곧 container, but pod =/= container --- pod가 더 큰 개념)
    •  Controller (pod를 제어)
      ReplicationController
      - ReplicaSets (복제)
      - DaemonSets
      - Jobs (Batch 작업 - 시작과 끝이 있는)
      - CronJobs (Batch 작업)
      Deployments (배포 ← k8s의 핵심, deployments → ReplicaSets → Pod 순으로 관리, stateless의 대표)
      - StatefulSets
      - HorizontalPodAutoscaler (HPA, pod의 autoscaling 담당)
  • Network
    •  Service (L4 LB)
    •  Endpoints (Backend)
    •  Ingress (k8s에 기본 포함이 x add-on으로 추가 필요 / L7 LB)
  • Storage
    •  PersistentVolume (PV / Volume 저장)
    •  PersistentVolumeClaim (PVC / PV 요청)
    •  ConfigMap (pod에 data를 제공하기 위한 key-value storage)
    •  Secret (pod에 data를 제공하기 위한 key-value storage)
  • Authentication (~/.kube/config 파일과 관련된 내용)
    • ServiceAccount (SA / 계정관련)
    •  RBAC (역할기반 접근제어)
      - Role (역할)
      - ClusterRole (역할)
      - RoleBinding (계정과 역할 연결)
      - ClusterRoleBinding (계정과 역할 연결)
  • Resource Isolation
    • Namespaces
  • Resource Limits
    • Limits
    • Requests
    • ResourceQuota
    • LimitRange
  • Scheduling
    • NodeName
    • NodeSelector
    •  Affinity (선호도)
      - Node Affinity (pod와 node간에 관계 정의)
      - Pod Affinity (pod와 pod간에 관계 정의)
      - Pod Anti Affinity
    •  Taints/Tolerations
    •  Drain(배출)/Cordon(스케줄링 그만)

 


 

오브젝트 버전

 

* 참고 : https://kubernetes.io/ko/docs/reference/using-api/#api-%EA%B7%B8%EB%A3%B9 

 

API 개요

운영 수준의 컨테이너 오케스트레이션

kubernetes.io

kubectl api-versions


apps/v1
- apps: API 그룹
- v1: 버전
* 그룹이 없는 api는 core 그룹 (쿠버네티스가 처음 나올때부터 존재)

 

  • Stable
    • vX(숫자)
    • v1, v2
    • 안정화된 버전
  • Beta
    • v1betaX, v2betaX
    • 충분히 검증 --- 오류 X
    • 버전이 올라가되면 기능 변경이 있을 수 있음
      downtime 발생할 수도 있음 : 특정 기능을 사용하기 위해 재시작

         * Mission Critical (절대 죽으면 안되는 서비스 / 항상 고가용성 구축)은 Beta기능을 사용해서 구축하면 x

  • Alpha
    • v1alphaX, v2alphaX
    • 기본 비활성화
    • 개발 중인 API

 

개발 과정 : Dev  Alpha → Beta → Stable
               v1alpha1 → v1alpha2 → v1alpha3 → v1beta1 → v1beta2 → v1

 

오브젝트 정의

 

#모든 resource에 항상 정의
apiVersion:
kind:
metdata:
spec:


kind: 오브젝트의 종류
apiVersion: 지원하는 오브젝트의 버전
- metadata: 오브젝트의 메타데이터(=데이터를 설명하기 위한 데이터)
       - 이름, 네임스페이스, 레이블, 어노테이션
- spec: 오브젝트에 대한 선언, 오브젝트에 대해 어떤 상태를 의도하는지


#pods를 어떻게 정의하느냐에 대한 내용 (ansible docs와 유사)
kubectl explain pods
kubectl explain pods.metadata
kubectl explain pods.spec
kubectl explain pods.spec.containers
kubectl explain pods.spec.containers.images
kubectl explain pods.spec --recursive

 

 

오브젝트 관리

* 참고 : https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/object-management/

 

쿠버네티스 오브젝트 관리

kubectl 커맨드라인 툴은 쿠버네티스 오브젝트를 생성하고 관리하기 위한 몇 가지 상이한 방법을 지원한다. 이 문서는 여러가지 접근법에 대한 개요를 제공한다. Kubectl로 오브젝트 관리하기에 대

kubernetes.io

 

  • 명령형 커멘드 : kubectl 명령으로만 구성 (YAML 파일 작성 x)
kubectl create
kubectl run
kubectl expose
  • 명령형 오브젝트 구성 : YAML 파일을 순서대로 하나씩 실행 (절차형)
kubectl create -f a.yaml
kubectl replace -f a.yaml
kubectl patch -f a.yaml
kubectl delete -f a.yaml
  • 선언형 오브젝트 구성 : YAML 파일의 모음 한번에 directory로 실행
kubectl apply -f resources/