본문 바로가기
스터디/Cloud & k8s

[k8s] 쿠버네티스 오브젝트(Kubernetes Objects) 종류

by zoodi 2022. 10. 19.
728x90

쿠버네티스 오브젝트(Kubernetes Objects)란?

쿠버네티스 오브젝트는 쿠버네티스 시스템에서 영속성을 가지는 오브젝트입니다.  쿠버네티스는 클러스터의 상태를 나타내기 위해 이 오브젝트를 이용합니다. 

  • 어떤 컨테이너화된 애플리케이션이 동작중인지, 어느 노드에서 동작 중인지
  • 그 애플리케이션이 이용할 수 있는 리소스
  • 그 애플리케이션이 어떻게 동작할지에대한 정책 (재시작, 업그레이드 등)

 

애플리케이션 개발자는 오브젝트를 생성/변경/삭제하여 쿠버네티스 시스템에 내 애플리케이션이 어떻게 표현될지 전달합니다.

이를 원하는 상태(desired state)라고 합니다. 

 

대부분의 정보를 .yaml 파일로 kubectl (커맨드 라인 인터페이스)에 제공합니다. kubectl은 api 요청이 이루어질 때 json 형태로 정보를 변환시킵니다. 아래 예시는 배포를 위한 필수 필드와 오브젝트 스펙을 보여주는 yaml 파일입니다.

 

 deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

 

 

쿠버네티스에서 관리되는 기본 오브젝트는 4가지가 있습니다.

  • pod
  • service
  • volume
  • namespace

 

쿠버네티스 오브젝트 - POD

Kubernetes 에서는 컨테이너를 Pod 이라는 단위로 묶어서 배포합니다. 하나의 Pod가 하나의 논리적 호스트 (머신) 을 의미하며 쿠버네티스에서 가장 기본적인 배포단위로 보면됩니다. 쿠버네티스 특징 중 하나로 컨테이너를 개별적으로 하나씩 배포하는 것이 아니라 pod 단위로 배포합니다.

pod은 1개 이상의 컨테이너를 포함합니다.

  • pod: Kubernetes에서 생성하고 관리할 수 있는 최소 컴퓨팅 단위 (컨테이너를 노드에 배치할때도 POD 단위로 스케쥴)

쿠버네티스 오브젝트 - Service

service는 pod 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법입니다. pod는 컨트롤러가 관리하므로 고정되어 있지 않고 클러스터 안을 옮겨다닙니다. 이 과정에서 노드를 옮겨 실행되기도하고 클러스터 안 pod의 ip가 변경되기도합니다.

이렇게 동적으로 변하는 pod에 고정적으로 접근할 때 사용하는 방법이 서비스입니다.

 

서비스는 pod에 고유한 ip 주소와 pod 집합에대한 단일 DNS명을 부여하여 pod이 클러스터 안 어디에있든 고정 주소를 통해 접근 가능하게 합니다.

 

쿠버네티스 오브젝트 - Volume

쿠버네티스 볼륨은 pod의 구성요소로 컨테이너와 동일하게 pod 스펙에서 정의됩니다. 볼륨은 독립적인 쿠버네티스 오브젝트가 아니므로 자체적으로 생성, 삭제 될 수 없습니다. 접근하려는 컨테이너에서 각각 마운트(물리정인 장치 디스크를 특정한 위치 디렉토리에 연결시켜주는 과정)가 되어야합니다.

 

 

Voume 예시

 

 

 

 

  • Volume 2개를 pod에 추가하고 3개의 컨테이너에 적절한 경로에 마운트
  • 리눅스에서 파일 시스템을 파일 트리의 임의 경로에 마운트하는 방식 사용
  • 같은 볼륨을 2개의 컨테이너에 마운트하면 컨테이너는 동일한 파일로 동작 가능
  • 마운트 되지 않은 볼륨이 같은 파드안에 있더라도 접근할 수 없다. 접근하려면 volumeMount를 컨테이너 스펙에 추가하면된다.

 

 

사용가능한 볼륨 유형

  • emptyDir: 일시적인 데이터를 저장하는데 사용되는 간단한 빈 디렉토리
  • hostPath: 워커 노드의 파일 시스템을 파드의 디렉터리로 마운트하는데 사용
  • configMap, servre, downwardAPI: 쿠버네티스 리소스나 클러스터 정보를 파드에 노출하는데 사용되는 특별한 유형의 볼륨
  • persistentVolumnClain: 동적으로 프로비저닝된 퍼시스턴트 스토리지를 사용하는 방법

 

이 외에도 사용가능한 볼륨 유형이있으며 자세한 적용방법은 링크를 참고하면 좋을 것 같습니다~

출처 및 참고 👉쿠버네티스 볼륨 스토리지 연결

 

 

쿠버네티스 오브젝트 - Namespace

네임스페이스는 쿠버네티스 클러스터 하나를 여러 개의 논리적인 단위로 나눠서 사용하는 것입니다. pod와 service 등은 네임스페이스 별로 생성이나 관리가 될 수 있고, 사용자 권한 역시 namespace별로 나눠서 부여할 수 있습니다. (namespace는 중첩 불가능)

리소스 이름은 네임스페이스 내에서 유일해야하지만, 네임스페이스를 통틀어서 유일한 필요는 없습니다. 동일한 네임스페이스 내에서 리소스를 구별하기 위해 label을 사용합니다.

 

사용중인 클러스터 조회

kubectl get namespace

결과

NAME              STATUS   AGE
default           Active   1d
kube-node-lease   Active   1d
kube-public       Active   1d
kube-system       Active   1d

 


출처:

쿠버네티스 오브젝트: https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/kubernetes-objects/

https://velog.io/@dojun527/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8

728x90

댓글