Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- argocd
- 스크레이핑
- DevOps
- Kubernetes
- scraping
- Monitoring
- deploy
- GitLab
- Jenkins
- Service Mesh
- 웹 취약점
- Grafana
- eks
- Prometheus
- 웹 해킹
- CD
- CI
- 크롤링
- Resource
- 모의해킹
- sonarqube
- helm
- gitlab ci
- opentelemetry
- docker
- gitlab cd
- Crawling
- ECR
- linkerd
- CI/CD
Archives
- Today
- Total
ㅡ.ㅡ
[K8S Resource] Goldilocks 본문
QOS Class
파드에 할당되는 리소스의 우선순위를 결정하는 방법으로 노드에 메모리 자원이 부족해지면 우선 순위가 가장 낮은 파드나 프로세스가 먼저 종료되며 우선 순위는 QOS Class 및 메모리 사용량에 따라 정해진다.
- Best-Effort Class resources 항목을 사용하지 않을 경우로 노드에 존재하는 모든 자원을 사용할 수도 있지만, 자원을 전혀 사용하지 못할 수도 있다.
- Guaranteed Class resources 항목에서 limits와 request의 값이 완전히 동일한 경우로 Request와 limit이 동일하여 자원의 오버커밋이 허용되지 않기 때문에 자원 사용을 안정적으로 보장받을 수 있으며 OOM 점수가 -998로 지정된다(OOM kill 우선 순위값은 OOM 점수가 높을 수록 먼저 죽임)
- Burstable Class resources 항목에서 limits가 requests 둘중 하나만 선언되거나 같지 않을 경우로 최소한의 리소스 보장을 받지만, limit값에 의해 필요한 경우 더 많은 리소스를 할당받을 수 있다.
- 우선 순위 Guaranteed > Burstable > BestEffort 순이지만 Burstable과 BestEffort 간에는 메모리의 사용량에 따라 우선 순위가 변동된다.
goldilocks(리소스 권장 값 추천 도구)
goldilocks-controller가 라벨 값을 기반으로 VPA 리소스를 생성하며 메트릭 수집기에서 제공해주는 값과 이전 기록들을 참고하여 VPA Recommender는 앱의 적정 리소스 값을 추천해줌
- metric-server
- kubernetes api server에서 제공해주는 메트릭 값을 수집
- goldilocks-controller
- 네임스페이스별로 활성화된 label을 추적하여 VPA를 생성
- VPA Recommender
- metric-server와 prometheus 리소스 값을 기반으로 권장 값을 추천해주는 도구
- prometheus&kube-state-metris
- 이전 메트릭값을 조회 및 권장 값에 활용
- goldilocks-dashboard or Grafana Dashboard(16294)
- VPA Recommender 에서 제공 해주는 값을 볼 수 있는 대시보드
Helm Chart
Goldilocks
helm repo add fairwinds-stable https://charts.fairwinds.com/stable
# fairwinds-stable/goldilocks values.yaml
uninstallVPA: false
vpa:
enabled: true
updater:
enabled: false
recommender:
extraArgs:
# 프로메테우스 오퍼레이터 서비스 주소 지정 및 프로메테우스와 동일한 라벨값 정의
prometheus-address: |
http://prometheus-operated.prom-stack.svc.cluster.local:9090
storage: prometheus
v: "3"
# prometheus에 저장된 메트릭과 매칭시킬 라벨 지정
prometheus-cadvisor-job-name: kubelet
pod-namespace-label: namespace
pod-name-label: pod
container-namespace-label: namespace
container-pod-name-label: pod
container-name-label: container
metric-for-pod-labels: kube_pod_labels{job="kube-state-metrics"}[8d]
controller:
enabled: true
flags:
# 전체 네임스페이스에 VPA 생성
on-by-default: true
metrics-server:
enabled: false
dashboard:
enabled: false
(OLD)Prometheus Stack(kube-state-metris)
# kube-prometheus-stack values.yaml
kube-state-metrics:
collectors:
- certificatesigningrequests
.
.
.
- volumeattachments
# vpa 메트릭 값 노출 설정 추가
- verticalpodautoscalers
(New)Prometheus Stack(kube-state-metris)
최신 버전에서는 VPA메트릭 지원이 종료되어 커스텀리소스로 생성
kube-state-metrics:
rbac:
extraRules:
- apiGroups: ["autoscaling.k8s.io"]
resources: ["verticalpodautoscalers"]
verbs: ["list", "watch"]
prometheus:
monitor:
enabled: true
selfMonitor:
enabled: true
customResourceState:
enabled: true
config:
kind: CustomResourceStateMetrics
spec:
resources:
- groupVersionKind:
group: autoscaling.k8s.io
kind: VerticalPodAutoscaler
version: v1
labelsFromPath:
verticalpodautoscaler:
- metadata
- name
namespace:
- metadata
- namespace
target_api_version:
- apiVersion
target_kind:
- spec
- targetRef
- kind
target_name:
- spec
- targetRef
- name
metrics:
- name: vpa_containerrecommendations_target_mem
help: Kubernetes labels converted to Prometheus labels target mem.
each:
type: Gauge
gauge:
path:
- status
- recommendation
- containerRecommendations
valueFrom:
- target
- memory
labelsFromPath:
container:
- containerName
commonLabels:
resource: memory
unit: byte
- name: vpa_containerrecommendations_target_cpu
help: Kubernetes labels converted to Prometheus labels target cpu.
each:
type: Gauge
gauge:
path:
- status
- recommendation
- containerRecommendations
valueFrom:
- target
- cpu
labelsFromPath:
container:
- containerName
commonLabels:
resource: cpu
unit: core
- name: vpa_containerrecommendations_upper_mem
help: Kubernetes labels converted to Prometheus labels upper mem.
each:
type: Gauge
gauge:
path:
- status
- recommendation
- containerRecommendations
valueFrom:
- upperBound
- memory
labelsFromPath:
container:
- containerName
commonLabels:
resource: memory
unit: byte
- name: vpa_containerrecommendations_upper_cpu
help: Kubernetes labels converted to Prometheus labels upper cpu.
each:
type: Gauge
gauge:
path:
- status
- recommendation
- containerRecommendations
valueFrom:
- upperBound
- cpu
labelsFromPath:
container:
- containerName
commonLabels:
resource: cpu
unit: core
- name: vpa_containerrecommendations_lower_mem
help: Kubernetes labels converted to Prometheus labels lower mem.
each:
type: Gauge
gauge:
path:
- status
- recommendation
- containerRecommendations
valueFrom:
- lowerBound
- memory
labelsFromPath:
container:
- containerName
commonLabels:
resource: memory
unit: byte
- name: vpa_containerrecommendations_lower_cpu
help: Kubernetes labels converted to Prometheus labels lower cpu.
each:
type: Gauge
gauge:
path:
- status
- recommendation
- containerRecommendations
valueFrom:
- lowerBound
- cpu
labelsFromPath:
container:
- containerName
commonLabels:
resource: cpu
unit: core
Reference
'ETC' 카테고리의 다른 글
[K8S Event] kubernetes-event-exporter (0) | 2023.10.22 |
---|---|
[K8S Resource] ClusterAutoScaler (0) | 2023.10.22 |
[K8S Resource] Descheduler (0) | 2023.10.22 |
[AWS] EFS (0) | 2021.10.21 |
[Kubernetes Management] Rancher (0) | 2021.09.29 |