쿠버네티스는 크게 오브젝트(object)와 오브젝트를 관리하는 컨트롤러(controller)로 나눠져 있다.
쿠버네티스 오브젝트는 쿠버네티스 시스템에서 영속성을 가지는 오브젝트이다. 오브젝트를 생성하게 되면 쿠버네티스 시스템은 원하는 상태를 보장하기 위해 지속적으로 작동한다.
쿠버네티스는 클러스터의 상태를 나타내기 위해 이 오브젝트를 이용한다.
거의 모든 쿠버네티스 오브젝트는 오브젝트 구성을 결정해주는 두 개의 중접된 오브젝트 필드인 status
와 spec
를 포함한다.
컨트롤러는 status
가 spec
과 일치하도록 오브젝트를 생성/삭제한다.
우선 현재 상태를 확인해본다.
총 6개의 pod가 존재하는 것을 확인할 수 있다.
그리고 파드가 존재하는 디플로이먼트에서 spec과 status를 확인하고 수정해보기 위해 kubectl edit
명령어를 사용한다.
kubectl edit deployment [deployment name]
spec
과 status
에 대한 내용을 위와 같이 확인할 수 있다.
위에서 오브젝트는 spec
에 맞춰 status
가 변경된다고 했는데, 실제로 그런지 spec
의 replicas를 3으로 수정하여 확인해본다.
정말로 위와 같이 수정한 것처럼 3개의 파드로 변한것을 확인할 수 있다.
쿠버네티스에는 쿠버네티스에 의해 배포 및 관리되는 가장 기본적인 오브젝트가 4가지 존재한다.
파드는 쿠버네티스에서 가장 기본적인 배포 단위로 컨테이너를 포함하는 단위이다. 쿠버네티스의 특징 중 하나로 컨테이너를 개별적으로 하나씩 배포하는 것이 아닌 파드 단위로 배포한다. 이때 파드는 하나 이상의 컨테이너를 포함한다.
서비스는 파드 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법이다.
파드는 컨트롤러가 관리하므로 고정되어 있지 않고 클러스터 안을 옮겨 다닌다. 이 과정에서 노드를 옮겨 다니며 실행되기도 하고 클러스터 안 파드의 IP가 변경되고 한다. 이렇게 동적으로 변하는 파드들에 고정적으로 접근할 때 사용하는 방법이 쿠버네티스의 서비스이다.
서비스는 파드에게 고유한 IP 주소와 파드 집합에 대한 단일 DNS 명을 부여하여 파드가 클러스터 안 어디에 있든 고정 주소를 통해 접근이 가능하다.
컨테이너는 기본적으로 상태가 없는 앱 컨테이너를 사용한다. 상태가 없다는 것은 컨테이너 혹은 노드에 문제가 있어 컨테이너를 새로 실행했을 때 다른 노드로 자유롭게 옮길 수 있다는 뜻이다. 이는 컨테이너의 장점이다.
하지만 컨테이너가 실행되지 않거나 삭제된다면 현재까지 저장한 데이터가 사라진다는 단점이 있다.
앱의 특성에 따라 컨테이너에 문제가 발생해도 데이터를 보존해야 하는 경우가 생기는데, 이런 상황에서 사용하는 것이 볼륨이다. 볼륨은 컨테이너가 재시작하더라도 데이터를 유지한다.
네임스페이스는 쿠버네티스 클러스터 하나를 여러 개의 논리적인 단위로 나눠서 사용하는 것이다. 파드와 서비스등은 네임스페이스 별로 생성이나 관리가 될 수 있고, 사용자 권한 역시 네임스페이스 별로 나눠서 부여할 수 있다.
https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/kubernetes-objects/