Infra/Kubernetes

[쿠버네티스 입문] 4-2. 오브젝트와 컨트롤러

에드박 2023. 1. 5. 02:57

쿠버네티스는 오브젝트(object)와 오브젝트를 관리하는 컨트롤러(controller)로 나뉨

 

사용자는 템플릿 등으로 쿠버네티스에 자원의 '바라는 상태'를 정의하고,

컨트롤러바라는 상태와 현재 상태가 일치하도록 오브젝트들을 생성/삭제 함

 

오브젝트

  • pod
  • service
  • volumn
  • namespace
  • 등등

컨트롤러

  • ReplicaSet
  • Deployment
  • StatefulSet
  • DemonSet
  • Job
  • 등등

네임스페이스

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

 

네임스페이스는 쿠버네티스 클러스터 하나를 여러 개 논리적인 단위로 나눠서 사용하는 것

네임스페이스를 활용하면 클러스터 하나를 여러 개 팀이나 사용자가 함께 공유할 수 있다.

 

클러스터 안에서 용도에 따라 구분할 때도, 네임스페이스를 사용

 

쿠버네티스가 기본으로 생성하는 네임스페이스들

  • default : 기본 네임스페이스. 쿠버네티스 명령에 별도의 네임스페이스를 지정하지 않으면 default 네임스페이스에 명령을 적용함
  • kube-node-lease : 각 노드의 임대 오브젝트들을 관리하는 네임스페이스
  • kube-public : 클러스터 안 모든 사용자가 읽을 수 있는 네임스페이스
  • kube-system : 쿠버네티스 시스템에서 관리하는 네임스페이스. 쿠버네티스 관리용 파드나 설정이 포함됨.

kubectl 로 네임스페이스를 지정해서 사용할 때는 --namespace=kube-system 처럼 네임스페이스를 명시해야함

default 이외에 네임스페이스 사용할 때 매번 옵션을 입력하긴 번거롭다면 기본 네임스페이스 변경해 사용 가능

 

# 현재 컨텍스트 확인
$ kubectl config current-context

# 현재 컨텍스트 정보 확인
$ kubectl config get-contexts {컨텍스트 이름}
# example
$ kubectl config get-contexts docker-desktop

# 기본 네임 스페이스 변경
$ kubectl config set-context {컨텍스트 이름} --namespace={기본으로 사용할 이름}
# example
$ kubectl config set-context docker-desktop --namespace=kube-system

# 현재 컨텍스트 정보 확인 (위와 동일)
$ kubectl config get-contexts $(kubectl config current-context) --namespace=kube-system

NAMESPACE 가 빈 값에서 kube-system으로 변경된 것을 확인

 

# 기본 네임스페이스 확인

# Window
$ kubectl config view | findstr namespace

# macOS 및 linux
$ kubectl config view | grep namespace

# 파드의 기본 네임스페이스 설정 확인 시

$ kubectl get pods --all-namespace

# 기본 네임스페이스를 다시 default 로 변경 시

$ kubectl config set-context $(kubectl config current-context) --namespace=default
OR
$ kubectl config set-context $(kubectl config current-context) --namespace=""

 

namespace 변경을 편하게 해주는 툴 kubens

https://kim-dragon.tistory.com/72


템플릿

쿠버네티스 클러스터의 오브젝트나 컨트롤러가 어떤 상태여야 하는지를 적용할 때는 YAML 형식의 템플릿을 사용

 

템플릿의 기본 형식

---
apiVersion: v1
kind: Pod
metadata:
spec:
  • apiVersion: 사용하려는 쿠버네티스 API 버전을 명시
    • `kubectl api-versions` 명령으로 현재 클러스터에서 사용 가능한 API 버전을 확인 가능
  • kind : 어떤 종류의 오브젝트 혹은 컨트롤러에 작업인지 명시
  • metadata : 메타데이터 설정. 해당 오브젝트의 이름이나 레이블 등을 설정
  • spec : 파드가 어떤 컨테이너를 갖고 실행하며, 실행할 때 어떻게 동작해야 할지 명시

어떤 필드, 역할을 하는지는  kubectl explain  명령으로 살펴볼 수 있음

하위 필드의 정보도 확인 가능  kubectl explain pods.metadata  같은 형식

필드 설명 없이 특정 필드와 그 아래에 속한 모든 하위 필드를 한꺼번에 보려면 --recursive 옵션을 사용

 kubectl explain pods --recursive