본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

리소스 requests 및 limits 설정하기

원문 보기 위키 갱신

리소스 requests 및 limits 설정하기 (Configure resource requests and limits)

이 문서는 Tigera 오퍼레이터가 관리하는 Calico 오픈 소스 컴포넌트에 Kubernetes 리소스 requests와 limits를 설정하는 방법을 정리한 레퍼런스예요. APIServer, Installation 커스텀 리소스를 패치하는 방법과 Helm 차트로 설치 시점에 설정하는 방법을 예시 명령과 함께 차근차근 살펴볼게요.

출처: 문서

본문

큰 그림 (Big picture)

리소스 requests와 limits는 리소스 할당을 관리하고 Kubernetes 워크로드의 최적 성능을 보장하기 위한 필수 설정이에요. Calico에서는 이 설정을 커스텀 리소스로 커스터마이징해 특정 요구 사항을 충족하고 리소스 활용도를 최적화할 수 있어요.

참고 (SECONDARY): 예시에서 사용하는 CPU와 메모리 값은 시연용이며, 개별 시스템 요구 사항에 맞게 조정해야 해요. 컴포넌트에 적용 가능한 전체 컨테이너 목록은 해당 컴포넌트의 스펙(specification)을 참고하세요.

APIServer 커스텀 리소스 (APIServer custom resource)

APIServer CR은 APIServerDeployment를 설정할 수 있는 방법을 제공해요. 다음 섹션에서 이 CR의 예시 설정을 보여 줄게요.

APIServerDeployment

APIServerDeployment의 리소스 명세를 설정하려면 아래 명령으로 APIServer CR을 패치하세요:

kubectl patch apiserver default  --type=merge --patch='{"spec": {"apiServerDeployment":{"spec": {"template": {"spec": {"containers":[{"name":"calico-apiserver","resources":{"limits":{"cpu":"1", "memory":"1000Mi"},"requests":{"cpu":"100m", "memory":"100Mi"}}},{"name":"tigera-queryserver","resources":{"limits":{"cpu":"1", "memory":"1000Mi"},"requests":{"cpu":"100m", "memory":"100Mi"}}}]}}}}}}'

이 명령은 CPU request를 100 밀리CPU(mCPU), 메모리 request를 100 메비바이트(MiB)로 설정하고, CPU limit을 1 CPU, 메모리 limit을 1000 메비바이트(MiB)로 설정해요.

검증 (Verification)

다음 명령으로 설정된 리소스를 확인할 수 있어요:

kubectl get deployment.apps/calico-apiserver -n calico-system -o json | jq '.spec.template.spec.containers[] | {name: .name, resources: .resources}'

이 명령은 Calico APIServerDeployment 컴포넌트의 설정된 리소스 requests와 limits를 JSON 형식으로 출력해요.

{
  "name": "calico-apiserver",
  "resources": {
    "limits": {
      "cpu": "1",
      "memory": "1000Mi"
    },
    "requests": {
      "cpu": "100m",
      "memory": "100Mi"
    }
  }
}

Installation 커스텀 리소스 (Installation custom resource)

Installation CR은 TyphaDeployment, calicoNodeDaemonSet, CalicoNodeWindowsDaemonSet, csiNodeDriverDaemonSet, KubeControllersDeployment를 포함한 다양한 Calico Enterprise 컴포넌트의 리소스를 설정할 수 있는 방법을 제공해요. 다음 섹션에서 이 CR의 예시 설정을 보여 줄게요.

TyphaDeployment

TyphaDeployment의 리소스 명세를 설정하려면 아래 명령으로 installation CR을 패치하세요:

kubectl patch installations default --type=merge --patch='{"spec": {"typhaDeployment": {"spec": {"template": {"spec": {"containers": [{"name": "calico-typha", "resources": {"requests": {"cpu": "100m", "memory": "100Mi"}, "limits": {"cpu": "1", "memory": "1000Mi"}}}]}}}}}}'

이 명령은 CPU request를 100 밀리CPU(mCPU), 메모리 request를 100 메비바이트(MiB)로 설정하고, CPU limit을 1 CPU, 메모리 limit을 1000 메비바이트(MiB)로 설정해요.

검증 (Verification)

다음 명령으로 설정된 리소스를 확인할 수 있어요:

kubectl get deployment.apps/calico-typha -n calico-system -o json | jq '.spec.template.spec.containers[]| {name:.name,resources:.resources}'

이 명령은 Calico TyphaDeployment 컴포넌트의 설정된 리소스 requests와 limits를 JSON 형식으로 출력해요.

{
  "name": "calico-typha",
  "resources": {
    "limits": {
      "cpu": "1",
      "memory": "1000Mi"
    },
    "requests": {
      "cpu": "100m",
      "memory": "100Mi"
    }
  }
}

CalicoNodeDaemonSet

calicoNodeDaemonSet 컴포넌트의 리소스 requests를 설정하려면 아래 명령으로 installation CR을 패치하세요:

kubectl patch installations default --type=merge --patch='{"spec": {"calicoNodeDaemonSet":{"spec": {"template": {"spec": {"containers":[{"name":"calico-node","resources":{"requests":{"cpu":"100m", "memory":"100Mi"}, "limits":{"cpu":"1", "memory":"1000Mi"}}}]}}}}}}'

이 명령은 CPU request를 100 밀리CPU(mCPU), 메모리 request를 100 메비바이트(MiB)로 설정하고, CPU limit을 1 CPU, 메모리 limit을 1000 메비바이트(MiB)로 설정해요.

검증 (Verification)

다음 명령으로 설정된 리소스를 확인할 수 있어요:

kubectl get daemonset.apps/calico-node -n calico-system -o json | jq '.spec.template.spec.containers[]| {name:.name,resources:.resources}'

이 명령은 Calico calicoNodeDaemonSet 컴포넌트의 설정된 리소스 requests와 limits를 JSON 형식으로 출력해요.

{
  "name": "calico-node",
  "resources": {
    "limits": {
      "cpu": "1",
      "memory": "1000Mi"
    },
    "requests": {
      "cpu": "100m",
      "memory": "100Mi"
    }
  }
}

calicoNodeWindowsDaemonSet

calicoNodeWindowsDaemonSet 컴포넌트의 리소스 requests를 설정하려면 아래 명령으로 installation CR을 패치하세요:

kubectl patch installations default --type=merge --patch='{"spec": {"calicoNodeWindowsDaemonSet":{"spec": {"template": {"spec": {"containers":[{"name":"calico-node-windows","resources":{"requests":{"cpu":"100m", "memory":"100Mi"}, "limits":{"cpu":"1", "memory":"1000Mi"}}}]}}}}}}'

이 명령은 CPU request를 100 밀리CPU(mCPU), 메모리 request를 100 메비바이트(MiB)로 설정하고, CPU limit을 1 CPU, 메모리 limit을 1000 메비바이트(MiB)로 설정해요.

검증 (Verification)

다음 명령으로 설정된 리소스를 확인할 수 있어요:

kubectl get daemonset.apps/calico-node -n calico-system -o json | jq '.spec.template.spec.containers[]| {name:.name,resources:.resources}'

이 명령은 Calico calicoNodeWindowsDaemonSet 컴포넌트의 설정된 리소스 requests와 limits를 JSON 형식으로 출력해요.

{
  "name": "calico-node",
  "resources": {
    "limits": {
      "cpu": "1",
      "memory": "1000Mi"
    },
    "requests": {
      "cpu": "100m",
      "memory": "100Mi"
    }
  }
}

CalicoKubeControllersDeployment

CalicoKubeControllersDeployment 컴포넌트의 리소스 requests를 설정하려면 아래 명령으로 installation CR을 패치하세요:

kubectl patch installations default --type=merge --patch='{"spec": {"calicoKubeControllersDeployment":{"spec": {"template": {"spec": {"containers":[{"name":"calico-kube-controllers","resources":{"requests":{"cpu":"100m", "memory":"100Mi"}, "limits":{"cpu":"1", "memory":"1000Mi"}}}]}}}}}}'

이 명령은 CPU request를 100 밀리CPU(mCPU), 메모리 request를 100 메비바이트(MiB)로 설정하고, CPU limit을 1 CPU, 메모리 limit을 1000 메비바이트(MiB)로 설정해요.

검증 (Verification)

다음 명령으로 설정된 리소스를 확인할 수 있어요:

kubectl get deployment.apps/calico-kube-controllers -n calico-system -o json | jq '.spec.template.spec.containers[]| {name:.name,resources:.resources}'

이 명령은 Calico CalicoKubeControllersDeployment 컴포넌트의 설정된 리소스 requests와 limits를 JSON 형식으로 출력해요.

{
  "name": "calico-kube-controllers",
  "resources": {
    "limits": {
      "cpu": "1",
      "memory": "1000Mi"
    },
    "requests": {
      "cpu": "100m",
      "memory": "100Mi"
    }
  }
}

CSINodeDriverDaemonSet

CSINodeDriverDaemonSet 컴포넌트의 리소스 requests를 설정하려면 아래 명령으로 installation CR을 패치하세요:

kubectl patch installations default --type=merge --patch='{"spec": {"csiNodeDriverDaemonSet":{"spec": {"template": {"spec": {"containers":[{"name":"calico-csi","resources":{"requests":{"cpu":"100m", "memory":"100Mi"}, "limits":{"cpu":"1", "memory":"1000Mi"}}},{"name":"csi-node-driver-registrar","resources":{"requests":{"cpu":"50m", "memory":"50Mi"}, "limits":{"cpu":"1", "memory":"1000Mi"}}}]}}}}}}'

이 명령은 CPU request를 100 밀리CPU(mCPU), 메모리 request를 100 메비바이트(MiB)로 설정하고, CPU limit을 1 CPU, 메모리 limit을 1000 메비바이트(MiB)로 설정해요.

검증 (Verification)

다음 명령으로 설정된 리소스를 확인할 수 있어요:

kubectl get daemonset.apps/csi-node-driver -n calico-system -o json | jq '.spec.template.spec.containers[]| {name:.name,resources:.resources}'

이 명령은 Calico calicoNodeDaemonSet 컴포넌트의 설정된 리소스 requests와 limits를 JSON 형식으로 출력해요.

{
  "name": "calico-csi",
  "resources": {
    "limits": {
      "cpu": "1",
      "memory": "1000Mi"
    },
    "requests": {
      "cpu": "100m",
      "memory": "100Mi"
    }
  }
}
{
  "name": "csi-node-driver-registrar",
  "resources": {
    "limits": {
      "cpu": "1",
      "memory": "1000Mi"
    },
    "requests": {
      "cpu": "50m",
      "memory": "50Mi"
    }
  }
}

Helm으로 업데이트하기 (Update via Helm)

Helm 차트로 설치하는 과정에서 설정을 업데이트하려면, Helm install을 실행하기 전에 values.yaml에 컴포넌트에 필요한 리소스 값을 수정해서 넣으세요.

참고 (SECONDARY): 제공된 예시는 apiserver 컴포넌트를 설정하는 모습이에요. 다른 컴포넌트도 비슷한 방식으로 values.yaml을 수정하면 Helm 차트로 설치할 때 리소스 requests와 limits를 업데이트할 수 있어요.

APIServer 커스텀 리소스 (APIServer custom resource)

APIServer CR은 APIServerDeployment를 설정할 수 있는 방법을 제공해요. 다음 섹션에서 apiserver 컴포넌트의 예시 values.yaml을 보여 줄게요.

APIServerDeployment

APIServerDeployment의 리소스 명세를 설정하려면 values.yaml에 적절한 리소스 값을 업데이트하세요.

apiServer:
  apiServerDeployment:
    spec:
      template:
        spec:
          containers:
            - name: calico-apiserver
              resources:
                limits:
                  cpu: 1
                  memory: 1000Mi
                requests:
                  cpu: 100m
                  memory: 100Mi

다음 명령으로 설정된 리소스를 확인할 수 있어요:

kubectl get deployment.apps/calico-apiserver -n calico-system -o json | jq '.spec.template.spec.containers[] | {name: .name, resources: .resources}'

더 알아보기 (Learn more)

각 컴포넌트에 적용 가능한 전체 컨테이너 목록은 Tigera 오퍼레이터 API 레퍼런스의 컴포넌트 스펙을 참고하세요. Helm 기반 설치 절차 전체는 Helm 설치 문서를 살펴보세요.