Kubernetes Object
Kubernetes에서 Object는 Kubernetes 클러스터에서 관리되는 배포 가능한 단위입니다. Kubernetes는 이러한 객체를 사용하여 애플리케이션, 서비스 및 리소스를 정의하고 관리합니다.
Kubernetes의 객체는 클러스터에서 실행되는 작업의 구성, 상태 및 행동을 설명합니다. 각 객체는 API 오브젝트를 통해 정의되며, YAML 또는 JSON 형식으로 작성됩니다. 일반적으로 사용되는 Kubernetes 객체에는 다음과 같은 것들이 있습니다.
- Pods: 하나 이상의 컨테이너 그룹을 호스팅하는 가장 기본적인 배포 단위입니다.
- Services: 일련의 파드 집합에 대한 네트워크 엔드포인트를 노출하는 방법을 정의합니다.
- Deployments: 애플리케이션의 복제본을 관리하고, 롤링 업데이트 및 롤백과 같은 배포 전략을 수행하는 데 사용됩니다.
- StatefulSets: 상태를 유지해야 하는 애플리케이션에 대한 스테이트풀한 배포를 정의합니다.
- ConfigMaps: 애플리케이션에 필요한 설정 데이터를 저장합니다.
- Secrets: 암호화된 정보나 기타 민감한 데이터를 저장합니다.
- DaemonSets: 모든 노드 또는 일부 노드에 파드를 실행하는 데 사용됩니다.
- Jobs: 일회성 작업을 실행하는 데 사용됩니다.
- CronJobs: 정기적으로 실행되는 작업을 정의합니다.
이러한 객체들은 Kubernetes 클러스터의 상태 및 구성을 정의하고, Kubernetes 시스템이 원하는 상태를 유지하도록 도와줍니다. 클러스터 관리자 및 개발자는 이러한 객체를 사용하여 애플리케이션을 배포하고 관리할 수 있습니다.
Kubernetes YAML
YAML은 "YAML Ain't Markup Language"의 재귀적 약어로, 인간이 쉽게 읽고 쓸 수 있는 데이터 직렬화 언어입니다. YAML은 구조화된 데이터를 표현하는 데 사용되며, 주로 설정 파일, 데이터 전송, 구성 관리 등 다양한 용도로 활용됩니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
annotations:
description: frontend
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
apiVersion
- kind에 지정된 Kubernetes Object에 사용되는 API 버전을 지정
kind
- YAML을 이용해 생성하고자 하는 Kubernetes Object를 지정
metadata
- Object를 구분지어 줄 수 있는 데이터 정보(이름, Label, Namespace 등)
annotations
- 쿠버네티스 오브젝트에 메타데이터를 첨부할 때 사용. 라벨처럼 map 형태로 구성되지만 사람보다는 machine을 위한 용도로 사용되며 검색이 불가능한 metadata를 지정하는데 사용
label
- Kubernetes Object에 첨부된 key-value 값으로 오브젝트의 특성을 식별하는데 사용
spec
- Kubernetes에 배포될 자원에 대한 요구 사항을 명시
selector
- 효율적으로 레이블을 이용해 오브젝트를 쉽게 식별할 수 있게함. 컨트롤러가 모니터링해야하는 대상을 명시
template
- 새 pod를 런칭하는데 사용할 템플릿. selectors의 값이 template의 labels과 일치해야 관리되는 파드를 제대로 선택.
의도를 담은 레코드(record of intent)
오브젝트를 생성하게 되면, 쿠버네티스 시스템은 그 오브젝트 생성을 보장하기 위해 지속적으로 작동
오브젝트 설정을 위한 두 가지 중첩된 필드
- Spec : 오브젝트가 가져야 할 요구되는 상태(desired status)와 특징을 서술하는 곳
- Status : 오브젝트의 실제 상태를 기술하고 쿠버네티스 시스템에 의해 업데이트 됨. 쿠버네티스 control plane은 오브젝트의 실제 상태를 사용자가 서술한 상태와 일치시키기 위해 능동적으로 관리
k8s 사용자 입장에서 알아야하는 쿠버네티스 오브젝트들
Workload 생성을 위한 기본 컨셉
Pod
- Kubernetes 내에서 정의되는 가장 작은 단위의 워크로드 혹은 관리 리소스
ReplicaSet
- Selector를 기반으로 하여 Pod의 스케쥴, 스케일링, 삭제를 담당
Deployment
- Pod와 ReplicaSet에 대한 선언적 관리 방법
- 어플리케이션 배포의 기본 단위 리소스
. Deployment = ReplicaSet(의도한 파드 개수) + Pod(어플리케이션의 최소 실행 단위)
Sidecar
- 기본 컨테이너의 기능을 확장하거나 강화하는 용도의 컨테이너
DaemonSet
- 모든(또는 일부) 노드가 동일한 Pod를 실행
Addon
- Kubernetes Cluster에서 기능을 구현 및 확장하는 역
'Kubernetes' 카테고리의 다른 글
[Kubernetes] 바닐라 쿠버네티스(Vanilla Kubernetes) 란? (0) | 2024.08.10 |
---|---|
[Kubernetes] Kubernetes Storage (0) | 2024.04.14 |
[Kubernetes] Kubernetes Architecture (0) | 2024.04.14 |
[Kubernetes] node에서 실행중인 pod 조회 (0) | 2024.04.08 |
[Kubernetes] Istio vs Ningx Ingerss 비교 (0) | 2024.04.06 |