진취적 삶
12 클러스터 관리 본문
12.1 리소스 관리
가상의 논리 클러스터인 네임스페이스를 이용하여 리소스를 관리할수 있게 해준다.
- 일반 사용자 : 자신이 개발한 애플리케이션을 k8s 플랫폼 위에 실행하는 사용자
- 관리자 : k8s 클러스터 자체를 관리하고 필요한 물리 리소스를 제공하는 총 책임자
클러스터 관리자가 일반 사용자에게 리소스 사용량을 제한하기 위해 사용하는 것이 LimitRange ,ResourceQuota 리소스 이다.
12.1.1 limitRange
- 일반 사용자가 리소스 사용량 정의를 생략하더라도 자동으로 pod의 리소스 사용량 설정
- 관리자가 설정한 최대 요청량을 일반 사용자가 넘지 못하게 제한
# limit-range.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: limit-range
spec:
limits:
- default:
cpu: 400m
memory: 512Mi
defaultRequest:
cpu: 300m
memory: 256Mi
max:
cpu: 600m
memory: 600Mi
min:
cpu: 200m
memory: 200Mi
type: Container
- default : 생략시 사용되는 기본 limit
- defaultRequest: 생략 시 사용되는 기본 request 설정값
- max: 일반 사용자가 요청할수 있는 최대치
- min: 일반 사용자가 요청할수 있는 최소치
# pod-exceed.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-exceed
spec:
containers:
- image: nginx
name: nginx
resources:
limits:
cpu: "700m"
memory: "700Mi"
requests:
cpu: "300m"
memory: "256Mi"
일반 사용자가 limitRange 의 max property 에서 설정한 CPU 600m ,메모리 600Mi를 벗어난 경우 에러 발생
rror from server (Forbidden): error when creating "pod-exceed.yaml": pods "pod-exceed" is forbidden: [maximum cpu usage per Container is 600m, but limit is 700m, maximum memory usage per Container is 600Mi, but limit is 700Mi]
12.1.2 ResourceQuota
전체 네임스페이스에 대한 제약을 설정할수 있다. 전체 리소스 사용량을 제약하고 싶을때 사용
# res-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: res-quota
spec:
hard:
limits.cpu: 700m
limits.memory: 800Mi
requests.cpu: 500m
requests.memory: 700Mi
- limits.cpu : 네임스페이스 cpu limit 총합 제한
- limits.memory: 네임스페이스의 메모리 limit 총합 제한
- requests.cpu : 네임스페이스의 CPU request 총합 제한
- requests.memory: 네임스페이스의 메모리 request 총합 제한
12.2 노드 관리
노드 자체에 대한 관리가 필요한 경우 온프레미스 환경에서는 물리적인 디스크의 손상, 내부 네트워크의 장애 , 클라우드 서비스 경우에는 서버 타입 변경 , 디스크 교체 등으로 인해 노드를 일시적으로 중단하고 관리해야 하는 경우가 있다.
- Cordon: 노드를 유지보수 모드로 전환한다
- Uncordon: 유지보수가 완료된 노드를 다시 정상화 한다.
- Drain: 노드를 유지보수 모드로 전환하며 ,기존의 pod들을 퇴거한다.
12.3 Pod 개수 유지
PodDisruption Budget : 운영 중인 Pod의 개수를 항상 일정 수준으로 유지할수 있도록 Pod의 퇴거를 막아주는 역할을 한다.
# nginx-pdb.yaml
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: nginx-pdb
spec:
minAvailable: 9
selector:
matchLabels:
app: nginx
'개발 도서 > 핵심만 콕 쿠버네티스' 카테고리의 다른 글
15 CI/CD (0) | 2023.11.17 |
---|---|
13 접근 제어 (0) | 2023.11.17 |
11 고급 스케줄링 (0) | 2023.11.17 |
10 스토리지 (0) | 2023.11.17 |
09 ingress 리소스 (0) | 2023.11.17 |