- toc {:toc}
Kubernetes Objects
-
Objects : Pods, ReplicationController, DeploymentController, Volumes, StatefulSets…
-
쿠버네티스의 Objects는 객체 지향 프로그래밍에서 Objects를 표현한 것과 상당히 유사하다.
- 팟 클래스를 팟 객체로 띄우거나 ReplicaSet Controller 또한 클래스로 지정해 객체를 생성해 사용하는 것과 유사하기 때문이다.
- 클래스에 해당하는 것이 kind 혹은 resource type이라 말한다. 이를 실행시킨 것을 객체라고 한다.
-
쿠버네티스는 주로 RESTful 용어를 통해서 API 개념을 표현을 사용한다.
- 쿠버네티스에게 RESTful API를 통해서 요청하고 응답을 받는다.
-
리소스 타입 : URL에서 사용되는 이름(pods, namespaces, services)
-
리소스 타입의 하나의 인스턴스 → 리소스 혹은 객체
-
모든 리소스 타입들은 kind라 부르는 구체적인 표현을 갖는다.
-
리소스 인스턴스들의 모음을 collection이라 한다.
-
몇몇 리소스 타임들을 위해 API는 리소스 아래 URI 경로들로 표현되는 하나 혹은 더 많은 하위 자원들을 포함한다.
-
Object configuration
- Spec (e.g. yaml 파일 전달)
- 객체에 대한 desired state를 묘사한다.
- 객체가 갖기를 원하는 특징을 말한다.
- Status (e.g. get 명령)
- 객체의 actual state를 묘사한다.
- 쿠버네티스 시스템에 의해 공급되고 업데이트된 상태이다.
- 쿠버네티스 컨트롤 계획이 동적으로 객체의 actual state가 desired state와 일치하도록 관리한다.
- Spec (e.g. yaml 파일 전달)
REF: Resource in RESTful
- 리소스는 타입과 관련된 데이터, 다른 리소스들과의 관계, 작동하는 일련의 방법을 지닌 객체이다.
- 이것은 객체 지향 프로그래밍의 객체 인스턴스와 유사한다.
- 하지만 객체 인스턴스는 많은 방식을 갖지만 리소스에 대해 정의된 표준 방식은 몇 없다.
- 객체 인스턴스는 많은 메소드를 갖지만, 그에 반해 리소스는 몇 가지 표준 메소드만 정의되어 있다.
Record of Intent
- 객체를 생성함으로써 쿠버네티스 시스템에 클러스터의 desired state, 의도를 밝히는 것과 같다.
- 모든 객체들은 공통의 메타데이터를 갖는다.
- 하나의 객체는 클라이언트들이 만들거나 업데이트하거나 삭제하거나 가져오는 특정 행동을 수행할 수 있도록 하는 여러 리소스들을 가질 수 있다.
Kubernetes API
- 쿠버네티스의 작동 → API로 구성해서 사용한다.
- Client API : 클라이언트가 원하는 객체의 생성, 수정, 삭제 등의 동작을 특정 명령을 통해 동작시킬 수 있도록 한다.
- 내가 원하는 동작을 위해 객체를 생성하고 작동을 시키는 코드를 직접 짜는 것이 아닌, 이미 짜여진 코드를 API 호출을 통해서 동작시킬 수 있다는 점에서 편리하다.
- 내가 작성한 프로그램에서 쿠버네티스 API를 사용할 수 있다.
Images and Registries
Image
-
도커의 이미지와 동일하다.
-
이미지를 쿠버네티스 팟에 사용하기 전에 레지스트리에 push할 필요가 있다.
-
컨테이너의 이미지 속성은 개인 레지스트리와 태그를 포함한 도커 커멘드와 같은 문법을 지원한다.
-
imagePullPolicy
- IfNotPresent : 이미지가 Local, 해당 노드에 있지 않다면, 이미지를 pull하여 실행한다.
- Always : 이미지를 팟이 시작되는 때에 항상 pull한다. (수시로 업데이트가 되고 최신 이미지를 사용하고 싶은 경우)
- Never : Remote의 레지스트리를 사용하지 않고 Local에 있는 것만 사용한다.(보안 상의 경우)
-
왜 latest 태그를 피해야 하는가?
- 이미지의 어떤 버전이 실행 중 인지를 파악하기 어렵다.
- 적절하게 롤백하기 어렵다.