반응형
요약
- 하나의 Cluster 내 pod들을 Namespace로 묶어서 관리
- 특정 Namespace의 자원 독점 방지를 위해 Resource Quota를 두어 총 사용 가능한 자원을 제한
- Limit Range를 두어 Namespace에 들어올 pod의 크기를 제한
- Namespace 뿐 아니라 Cluster 단위에도 Limit Range 및 Resource Quota 설정 가능
Namespace
- 하나의 Namespace에서 같은 종류의 Object일 때 동일한 pod 이름 사용 불가
- 타 Namespace와 분리되어 관리됨 → 대부분의 자원들은 자신의 Namespace 내에서만 사용 가능
ex) 서로 다른 Namespace에 있는 pod와 service 사이에는 서로 연결 불가
PV, Node와 같이 모든 Namespace에서 공유할 수 있는 자원도 있음 ⇒ Namespace로 나눌 수 없는 object도 존재
ex 1) Namespace가 다른 Service라도 nodePort가 중복될 수 없음
ex 2) Namespace가 다른 Pod이라도 hostPath를 공유 → Pod 기본 사용 권한이 root이기 때문, 추후 Pod 식별 policy를 통해 변경 필요
- Namespace를 삭제하면 해당 자원들도 모두 함께 삭제됨
- Namespace가 network 트래픽까지 제한하지는 않음
→ Network Policy 오브젝트를 통해 namespace끼리의 통신을 관리할 수 있음
ex) 다른 Namespace에 있는 pod의 ip로 접근시 기본적으로 접근 가능하며,
추후 Network Policy를 통해 해당 정책 설정 가능
apiVersion: v1
kind: Namespace
metadata:
name: nm-1
apiVersion: v1
kind: Pod
metadata:
name: pod-1
namespace: nm-1
labels:
nm: pod1
spec:
containers:
...
Resource Quota
- Namespace의 리소스를 제한시키는 기능
- Namespace에 ResourceQuota 연결시 case
- 자원 spec 명시가 없는 pod의 경우 해당 Namespace에 생성 불가
- 새로운 Pod 생성시 총 필요 자원이 ResourceQuota에 명시된 자원보다 클 때 생성 불가
- 지정할 수 있는 자원 종류
- Compute Resource
- cpu
- memory
- Storage Resource
- PVC 용량
- PVC 개수
- Objects Count (k8s 버전에 따라 object 종류가 다름)
- Pod
- Service
- ConfigMap
- PVC
- ETC…
- Compute Resource
- ResourceQuota를 만들기 전 해당 Namespace에 Pod가 있는지 꼭 확인이 필요
→ ResourceQuota는 생성된 이후부터의 상태를 체크
→ 기존에 Namespace에 Pod가 있는 상태에서 ResourceQuota를 생성할 경우 에러 없이 생성됨 (resource 명시를 안한 Pod라도..)
apiVersion: v1
kind: ResourceQuota
metadata:
name: rq-1
namespace: nm-1
spec:
hard:
requests.memory: 3Gi
limits.memory: 6Gi
apiVersion: v1
kind: Pod
metadata:
name: pod-2
spec:
containers:
- name: container
image: something
resources:
requests:
memory: 2Gi
limits:
memory: 2Gi
Limit Range
- 배치될 Pod의 resource를 체크하는 object
- default 값을 설정할 수 있어 자원 명시가 없는 Pod에 대해 기본 자원 설정 가능
- maxLimitRequestRatio 옵션으로 requests와 limits의 비율 제한도 가능
- type 에는 Pod 단위의 설정과 PVC 단위의 설정이 있고, 이에 따라 옵션이 다르기 때문에 확인 필요
- 하나의 Namespace에 여러 LimitRange를 설정할 수 있는데 이렇게 되면 충돌이 일어나므로 주의해야함
apiVersion: v1
kind: LimitRange
metadata:
name: lr-1
namespace: nm-1
spec:
limits:
- type: Container
min:
memory: 4Gi
max:
memory: 4Gi
defaultRequest:
memory: 1Gi
default:
memory: 2Gi
maxLimitRequestRatio:
memory: 3
반응형
'Kubernetes' 카테고리의 다른 글
Deployment (0) | 2023.02.08 |
---|---|
ReplicaSet, Replication Controller (0) | 2023.02.08 |
ConfigMap / Secret (0) | 2023.02.08 |
Volume (0) | 2023.02.08 |
Service (0) | 2023.02.08 |