Kubernetes Objects
- 오브젝트 종류
- 오브젝트 버전
- 오브젝트 정의
- 오브젝트 관리
Kubernetes Objects
* Objects : 쿠버네티스에서 생성하고 관리할 수 있는 것들
* Resource : Objects를 이용해서 만든 것 (resource를 생성할 때, 명령방식과 YAML 방식이 있는데 YAML이 일반적)
* 참고 : https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/kubernetes-objects/
쿠버네티스 오브젝트 이해하기
이 페이지에서는 쿠버네티스 오브젝트가 쿠버네티스 API에서 어떻게 표현되고, 그 오브젝트를 어떻게 .yaml 형식으로 표현할 수 있는지에 대해 설명한다. 쿠버네티스 오브젝트 이해하기 쿠버네티
kubernetes.io
오브젝트 종류
k8s에서 생성할 수 있는 모든 objects 보여줌
kubectl api-resouces
- Label/LabelSelector (검색용도/object와 object의 관계를 정의할 때 사용)
- Workload (★중요)
- Pod (← k8s의 핵심, Pod는 곧 container, but pod =/= container --- pod가 더 큰 개념)
- Controller (pod를 제어)
-ReplicationController
- ReplicaSets (복제)
- DaemonSets
- Jobs (Batch 작업 - 시작과 끝이 있는)
- CronJobs (Batch 작업)
- Deployments (배포 ← k8s의 핵심, deployments → ReplicaSets → Pod 순으로 관리, stateless의 대표)
- StatefulSets
- HorizontalPodAutoscaler (HPA, pod의 autoscaling 담당)
- Network
- Service (L4 LB)
- Endpoints (Backend)
- Ingress (k8s에 기본 포함이 x add-on으로 추가 필요 / L7 LB)
- Storage
- PersistentVolume (PV / Volume 저장)
- PersistentVolumeClaim (PVC / PV 요청)
- ConfigMap (pod에 data를 제공하기 위한 key-value storage)
- Secret (pod에 data를 제공하기 위한 key-value storage)
- Authentication (~/.kube/config 파일과 관련된 내용)
- ServiceAccount (SA / 계정관련)
- RBAC (역할기반 접근제어)
- Role (역할)
- ClusterRole (역할)
- RoleBinding (계정과 역할 연결)
- ClusterRoleBinding (계정과 역할 연결)
- Resource Isolation
- Namespaces
- Resource Limits
- Limits
- Requests
- ResourceQuota
- LimitRange
- Scheduling
- NodeName
- NodeSelector
- Affinity (선호도)
- Node Affinity (pod와 node간에 관계 정의)
- Pod Affinity (pod와 pod간에 관계 정의)
- Pod Anti Affinity - Taints/Tolerations
- Drain(배출)/Cordon(스케줄링 그만)
오브젝트 버전
* 참고 : https://kubernetes.io/ko/docs/reference/using-api/#api-%EA%B7%B8%EB%A3%B9
API 개요
운영 수준의 컨테이너 오케스트레이션
kubernetes.io
kubectl api-versions
apps/v1
- apps: API 그룹
- v1: 버전
* 그룹이 없는 api는 core 그룹 (쿠버네티스가 처음 나올때부터 존재)
- Stable
- vX(숫자)
- v1, v2
- 안정화된 버전
- Beta
- v1betaX, v2betaX
- 충분히 검증 --- 오류 X
- 버전이 올라가되면 기능 변경이 있을 수 있음
→ downtime 발생할 수도 있음 : 특정 기능을 사용하기 위해 재시작
* Mission Critical (절대 죽으면 안되는 서비스 / 항상 고가용성 구축)은 Beta기능을 사용해서 구축하면 x
- Alpha
- v1alphaX, v2alphaX
- 기본 비활성화
- 개발 중인 API
개발 과정 : Dev → Alpha → Beta → Stable
v1alpha1 → v1alpha2 → v1alpha3 → v1beta1 → v1beta2 → v1
오브젝트 정의
#모든 resource에 항상 정의
apiVersion:
kind:
metdata:
spec:
- kind: 오브젝트의 종류
- apiVersion: 지원하는 오브젝트의 버전
- metadata: 오브젝트의 메타데이터(=데이터를 설명하기 위한 데이터)
- 이름, 네임스페이스, 레이블, 어노테이션
- spec: 오브젝트에 대한 선언, 오브젝트에 대해 어떤 상태를 의도하는지
#pods를 어떻게 정의하느냐에 대한 내용 (ansible docs와 유사)
kubectl explain pods
kubectl explain pods.metadata
kubectl explain pods.spec
kubectl explain pods.spec.containers
kubectl explain pods.spec.containers.images
kubectl explain pods.spec --recursive
오브젝트 관리
* 참고 : https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/object-management/
쿠버네티스 오브젝트 관리
kubectl 커맨드라인 툴은 쿠버네티스 오브젝트를 생성하고 관리하기 위한 몇 가지 상이한 방법을 지원한다. 이 문서는 여러가지 접근법에 대한 개요를 제공한다. Kubectl로 오브젝트 관리하기에 대
kubernetes.io
- 명령형 커멘드 : kubectl 명령으로만 구성 (YAML 파일 작성 x)
kubectl create
kubectl run
kubectl expose
- 명령형 오브젝트 구성 : YAML 파일을 순서대로 하나씩 실행 (절차형)
kubectl create -f a.yaml
kubectl replace -f a.yaml
kubectl patch -f a.yaml
kubectl delete -f a.yaml
- 선언형 오브젝트 구성 : YAML 파일의 모음을 한번에 directory로 실행
kubectl apply -f resources/
'IT > Kubernetes' 카테고리의 다른 글
[Kubernetes] Namespace, Label & LabelSelector, Annotations (0) | 2022.05.17 |
---|---|
[Kubernetes] Workload - Pods (0) | 2022.05.17 |
[Kubernetes] Kubespray로 쿠버네티스 설치하기 (0) | 2022.05.17 |
[Kubernetes] Work node 추가 및 Version Upgrade (0) | 2022.05.16 |
[Kubernetes] Kubernetes Architecture 및 설치 & Tips (0) | 2022.05.16 |