[쿠버네티스 입문] 4-2. 오브젝트와 컨트롤러
쿠버네티스는 오브젝트(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