✔️ Kubernetes Objects
- Label/LabelSelector
- Workload
- Pod
- Controller
- ReplicationController
- ReplicaSets
- DaemonSets
- Jobs
- CronJobs
- Deployments
- StatefulSets
- HorizontalPodAutoscaler
- Network
- Service
- Endpoints
- Ingress
- Storage
- PersistentVolume
- PersistentVolumeClaim
- ConfigMap
- Secret
- Authentication
- ServiceAccount
- RBAC
- Role
- ClusterRole
- RoleBinding
- ClusterRoleBinding
- Resource Isolation
- Namespaces
- Resource Limits
- Limits
- Requests
- ResourceQuota
- LimitRange
- Scheduling
- NodeName
- NodeSelector
- Affinity
- Node Affinity
- Pod Affinity
- Pod Anti Affinity
- Taints/Tolerations
- Drain/Cordon
✔️ 모든 리소스는 오브젝트 형태로 관리된다.
쿠버네티스는 대부분의 리소스를 '오브젝트' 라고 불리는 형태로 관리한다.
kubectl api-resources
해당 명령을 통해 쿠버네티스에서 사용할 수 있는 오브젝트에는 어떤 것들이 있는지 확인할 수 있다.
vagrant@k8s-node1:~$ kubectl explain pod
KIND: Pod
VERSION: v1
DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is
created by clients and scheduled onto hosts.
또는 특정 오브젝트의 간단한 설명을 보기 위해 kubectl explain <Objects>
명령을 사용할 수 있다.
✔️ Label/LabelSelector
Label
- 파드와 같은 오브젝트에 첨부된 키와 값의 쌍LabelSelector
- 레이블 셀렉터를 통해 클라이언트와 사용자는 오브젝트를 식별
어떤 특정 객체와 다른 객체와의 연결이 된다. 연관성을 갖게 된다.
컨트롤러와 파드의 관계도 연결되는 관계이다.
오브젝트와 오브젝트를 연결할 때 사용하는 개념이 레이블과 레이블 셀렉터이다.
레이블은 AWS 리소스 생성시 태그와 유사한 개념이다.
정보를 붙이고 검색을 위해 사용한다.
핵심은 오브젝트와 오브젝트의 관계를 정의할 때 사용한다.
✔️ Workload
Pod
- 컨테이너를 다루는 기본 단위Controller
- 파드를 제어하는 제어기
컨테이너 어플리케이션의 기본 단위를 파드라고 부르며, 파드는 1개 이상의 컨테이너로 구성된 컨테이너의 집합이다.
Pod를 직접 만들어서 쓰는 경우는 없고 대부분 Controller를 통해 Pod를 만든다.
파드를 어떻게 제어할 것인가?에 대한 방법은 여러가지가 있다.
ReplicationController
ReplicaSets로 대체되어 현재 쓰이지 않는다.
ReplicaSets
- 일정 개수의 파드를 유지하는 컨트롤러
DaemonSets
- start만 있고 end는 없는, 계속적으로 실행하는 작업
Jobs
, CronJobs
- 배치 작업, 시작과 끝이 있는 작업
Deployments
- 레플리카셋, 파드의 배포를 관리한다.
StatefulSets
- 파드 집합의 디플로이먼트와 스케일링을 관리하며, 파드들의 순서 및 고유성을 보장한다.
Stateful vs Stateless
StatefulSets은 상태가 있는 것을 관리하고 Deployments는 상태가 없는 것을 관리한다.
HorizontalPodAutoscaler
- 파드를 관리한다. 일반적으로 워크로드에 포함되지는 않는다.
줄여서 HPA라고 하며 Pod의 오토 스케일링을 담당한다.
즉, 컨트롤러는 파드를 어떻게 제어할것인지 배포할것인지를 관리한다.
✔️ Network
Service
- 파드를 연결하고 외부에 노출, L4 로드밸런서 역할
Endpoint
- Service와 연결되어 로드밸런서의 백엔드를 정의하고 관리한다.
Ingress
- 외부 요청을 어떻게 처리할 것인지 정의, L7 로드밸런서 역할
✔️ Storage
컨테이너에 바인드, 볼륨 방식이든 스토리지를 제공하여 별도의 저장공간을 제공했다.
PV
- 저장소를 정의
PVC
- 파드가 볼륨을 사용하기 위해 Claim(요청)을 해야한다.
ConfigMap
- 컨테이너에서 필요한 환경 설정값을 파드에 전달
Secret
- 노출되어서는 안되는 비밀값을 저장한다.
etcd는 k8s를 관리하기 위한 key-value 스토리지라면
ConfigMap은 파드에 어떤 데이터를 제공하기 위한 key-value 스토리지이다.
대용량 데이터를 저장하기 위한 key-value 스토리지는 아니다.
✔️ Authentication
Service Account
: 애플리케이션이나 시스템 프로그램의 식별, 인증, 인가를 위한 계정
k8s는 기본적으로 역할 기반의 접근 제어를 사용한다.
- RBAC
- Role
- ClusterRole
- RoleBinding
- ClusterRoleBinding
Role로 끝나는 것은 전부 역할이며
Binding으로 끝나는 것은 계정과 역할을 연결할 때 사용하는 것이다.
✔️ Resource Isolation
Namespaces
- 리소스를 논리적으로 구분하는 장벽
✔️ Resource Limits
Limits
- 컨테이너는 limit 보다 많은 리소스를 사용할 수 없다.
Requests
- 사용 가능한 리소스가 충분하면, 컨테이너가 해당 리소스에 지정한 request 보다 더 많은 리소스를 사용할 수 있도록 허용
ResourceQuota
- 네임스페이스별 총 리소스 사용을 제한하는 제약 조건을 제공
LimitRange
- 네임스페이스에서 리소스 할당(파드 또는 컨테이너)을 제한하는 정책
✔️ Scheduling
NodeName
- 가장 간단한 형태의 노트 선택 제약 조건
NodeSelector
- 파드를 특정 레이블이 있는 노드로 제한하는 매우 간단한 방법을 제공
파드를 어떤 노드에 배치할 것인지 결정한다.
Affinity
- 파드와 노드간의 관계를 정의하거나, 파드와 파드간의 관계를 정의
Taint
- 노드가 파드 셋을 제외할 수 있다.
Tolerations
- 파드에 적용되며, 파드를 일치하는 테인트가 있는 노드에 스케줄되게 하지만 필수는 아니다. 테인트와 톨러레이션은 함께 작동하여 파드가 부적절한 노드에 스케줄되지 않게 한다. 하나 이상의 테인트가 노드에 적용된다. 이것은 노드가 테인트를 용인하지 않는 파드를 수용해서는 안되는 것을 나타낸다.
Drain
- 노드에 존재하는 모든 파드를 제거하여 노드를 비우고, 파드들을 다른 노드에 새롭게 스케쥴링한다.
Cordon
- 특정 노드를 선택하여 스케줄 대상에서 제외시킨다. 드레인시 코든이 자동으로 걸린다.uncordon
을 통해 코든을 해제한다.
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] Workload - Pod (파드) (0) | 2022.05.17 |
---|---|
[Kubernetes] Object의 정의와 관리 (0) | 2022.05.17 |
[Kubernetes] Kubespray로 쿠버네티스 설치하기 (0) | 2022.05.16 |
[Kubernetes] k8s 클러스터 업그레이드 (0) | 2022.05.16 |
[Kubernetes] Worker Node 추가 구성하기 (0) | 2022.05.16 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!