Namespace / ResourceQuota / LimitRange

dongbin_Shin·2022년 11월 15일
0

kubernetes

목록 보기
8/16

요약

  • 하나의 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
    1. 자원 spec 명시가 없는 pod의 경우 해당 Namespace에 생성 불가
    2. 새로운 Pod 생성시 총 필요 자원이 ResourceQuota에 명시된 자원보다 클 때 생성 불가
  • 지정할 수 있는 자원 종류
    • Compute Resource
      • cpu
      • memory
    • Storage Resource
      • PVC 용량
      • PVC 개수
    • Objects Count (k8s 버전에 따라 object 종류가 다름)
      • Pod
      • Service
      • ConfigMap
      • PVC
      • ETC…
  • 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
profile
멋있는 백엔드 개발자

0개의 댓글