쿠버네티스 입문 - 13 - 사용자 정의 자원
2020. 4. 9. 00:08ㆍ[정리] 기능별 개념 정리/Kubernetes
사용자 정의 자원
사용자 정의 자원 : 쿠버네티스에서 제공하는 내장 자원(Pod, Service) 이외에 사용자가 필요한 자원을 정의 할 수 있다.
사용자 정의 컨트롤러 : 사용자 정의 자원 자체는 구조화된 데이터이고 이를 이용해서 원하는 동작을 하려면 사용자 정의 컨트롤러 API 가 필요하다.
선언적 API
예시
파드를 2개 더 생성하라. (x)
파드가 2개 실행되어야 한다. (o)
트랜잭션을 엄수해야하는 정확한 상태를 명령하는 식이면 안된다.
오브젝트들이 어떤 상태인지를 바라는 지만 나타내야한다.
사용자 정의 자원을 정의 하는 방법
- CRD
템플릿을 만든다.
CRD를 관리하는 추가 서비스는 없어도된다.
사용자 정의 자원은 kube-apiserver 가 관리한다. - Aggregated API
Go 언어로 바이너리와 이미지를 만든다.
추가 서비스를 만들고 쿠버네티스 소스중 upstream 내용을 가져와 변경 사항을 반영해야한다.
Upstream 에는 새로운 API 서버 바이너리 를 만드는 작업도 해야한다.
CRD 를 이용한 사용자 정의 자원 MyPod 정의하기
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: mypods.crd.example.com
spec:
group: crd.example.com
version: v1
versions:
- name: v1
served: true
storage: true
scope: Namespaced
names:
plural: mypods
singular: mypod
kind: MyPod
shortNames:
- mpod
additionalPrinterColumns:
- name: Age
type: date
priority: 0
JSONPath: .metadata.creationTimestamp
- name: Image
type: string
description: my-awesome-cron-image:latest
priority: 1
JSONPath: .spec.image
.spec.versions[].served : 해당 버전을 사용가능한지
.spec.versions[].storage : 스토리지 버전으로 지정되어야하는 버전일 경우 true 로 설정한다.
.spec.additionalPrinterColumns[].JSONPath : 사용자 정의 자원을 만들 때 해당 필드가 템플릿의 어떤 경로에 있어야하는가를 지정.
CRD 로 만든 사용자 정의 자원 MyPod 사용하기
apiVersion: "crd.example.com/v1"
kind: MyPod
metadata:
name: my-new-pod-object
spec:
image: my-awesome-cron-image:latest
ports:
- containerPort: 8080
사용자 정의 자원을 사용할 때 조건
새 자원을 만들거나 업데이트할 때 쿠버네티스 클라이언트 라이브러리와 CLI 를 사용해야한다.
kubectl 을 이용해서 자원을 사용해야한다.
쿠버네티스 API 에서 제공하는 .spec, .status, .metadata 등의 필드를 사용해야한다.
관리하는 자원이나 다른 자원 모음을 추상화한 오브젝트를 사용해야한다.
'[정리] 기능별 개념 정리 > Kubernetes' 카테고리의 다른 글
쿠버네티스 입문 - 14 - 헬름 (0) | 2020.04.09 |
---|---|
쿠버네티스 입문 - 12 - 오토스케일링 (HPA) (0) | 2020.04.08 |
쿠버네티스 입문 - 11 - 로깅과 모니터링 (0) | 2020.04.08 |
쿠버네티스 입문 - 10 - 쿠버네티스 DNS (0) | 2020.04.08 |
쿠버네티스 입문 - 09 - 클러스터 네트워킹 (0) | 2020.04.08 |