반응형
모니터링을 하다 보니 한 노드가 100% peak를 치고 있는 것을 파악하였다..
kubectl describe node dev-k8s-np01-w-2gns
특이 사항은 describe에서는 타나자지 않는다..
여기서는 파드들이 그저 할당량만 보여지지 현재 얼마를 사용하고 있는지는 표현되지 않는 것 같다.
kubectl top node
top 명령어에서는 현재 노드들의 사용량을 확인할 수 있었고, 위에 그라파나에 타나난 그래프와 유사하게 뜬다.
현재 node가 vCPU 2 코어인데… 2gns node는 모조리 100% 다 쓰고 있는 것을 확인할 수 있엇음..
이제 어떤 파드인지 확인해야한다..
kubectl top pod --all-namespaces
다들 거의 조금 밖에 사용하지 않는데… loki가 1000m 넘게 사용하고 있는 파드가 4개나 있었다… 이 놈이 원인이였다..
loki를 일단 내리고 나니 아래와 같이 핵심 자원들이 모두 그래프가 뚝 떨어졌다.
Solution
→ 로깅 헬름차트를 다시 구성함
- promtail, loki를 따로 helmchart를 구성하였지만 loki-stack helmchart를 사용하여 통합함.
- promtail 부분에 특정 namespace의 로그를 loki로 던지지 않도록 exclusive 처리
- promtail, loki 에다가 resource limit & requests를 적용함
수정한 helmchart values.yaml은 다음과 같다. (loki-stack-2.9.10)
...생략
loki:
enabled: true
...생략
#retension 설정
config:
chunk_store_config:
max_look_back_period: 72h
table_manager:
retention_deletes_enabled: true
retention_period: 72h
resources:
limits:
cpu: 200m
memory: 256Mi
requests:
cpu: 100m
memory: 128Mi
persistence:
enabled: true
size: 30Gi
promtail:
enabled: true
config:
logLevel: info
serverPort: 3101
clients:
- url: http://{{ .Release.Name }}:3100/loki/api/v1/push
snippets:
scrapeConfigs: |
# See also <https://github.com/grafana/loki/blob/master/production/ksonnet/promtail/scrape_config.libsonnet> for reference
- job_name: kubernetes-pods
pipeline_stages:
{{- toYaml .Values.config.snippets.pipelineStages | nindent 4 }}
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels:
- __meta_kubernetes_pod_controller_name
regex: ([0-9a-z-.]+?)(-[0-9a-f]{8,10})?
action: replace
target_label: __tmp_controller_name
- source_labels:
- __meta_kubernetes_pod_label_app_kubernetes_io_name
- __meta_kubernetes_pod_label_app
- __tmp_controller_name
- __meta_kubernetes_pod_name
regex: ^;*([^;]+)(;.*)?$
action: replace
target_label: app
- source_labels:
- __meta_kubernetes_pod_label_app_kubernetes_io_instance
- __meta_kubernetes_pod_label_release
regex: ^;*([^;]+)(;.*)?$
action: replace
target_label: instance
- source_labels:
- __meta_kubernetes_pod_label_app_kubernetes_io_component
- __meta_kubernetes_pod_label_component
regex: ^;*([^;]+)(;.*)?$
action: replace
target_label: component
{{- if .Values.config.snippets.addScrapeJobLabel }}
- replacement: kubernetes-pods
target_label: scrape_job
{{- end }}
{{- toYaml .Values.config.snippets.common | nindent 4 }}
{{- with .Values.config.snippets.extraRelabelConfigs }}
{{- toYaml . | nindent 4 }}
{{- end }}
#Exclude Namespace 설정
pipelineStages:
- drop:
source: "namespace"
expression: "(kube-system|istio-system|cattle-system|cattle-fleet-system|cattle-impersonation-system|logging|monitoring)"
resources:
limits:
cpu: 200m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
반응형
'devops' 카테고리의 다른 글
Database용 TCP Reverse-Proxy (0) | 2023.07.07 |
---|---|
하나의 SSLVPN 여러 VPC 접근하도록 Reverse-Proxy 구성 (0) | 2023.07.07 |
Docker-compose 설치하기 (0) | 2023.07.07 |
Docker 설치하기 (0) | 2023.07.07 |
GitLab 레포지토리 마이그레이션 (0) | 2023.07.07 |