kube-state-metrics
와 node-exporter
를 설치하여 Pod들의 CPU 사용량을 정보를 수집$ cd ~
$ kubectl top node
-- error: Metrics API not available
$ kubectl top pod
-- error: Metrics API not available
$ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.1/components.yaml
$ kubectl edit deploy -n kube-system metrics-server
----------------------------------------
# `spec.template.spec.containers.args` 아래에 추가
--kubelet-insecure-tls
kubectl top node
kubectl top pod
$ kubectl create ns monitoring
$ git clone https://github.com/hali-linux/my-prometheus-grafana.git
$ cd my-prometheus-grafana
# 클러스터 Role 관한 내용
$ kubectl apply -f prometheus-cluster-role.yaml
$ kubectl apply -f prometheus-config-map.yaml
# 프로메테우스 서버
$ kubectl apply -f prometheus-deployment.yaml
# 노드의 정보 "node-exporter" 관련 에이전트
$ kubectl apply -f prometheus-node-exporter.yaml
# 서버의 접속할 수 있는 엔드포인트 (서비스)
$ kubectl apply -f prometheus-svc.yaml
# "monitoring" 네임스페이스 확인
$ kubectl get pod -n monitoring
$ kubectl get pod -n monitoring -o wide
# kube-state : 쿠버네티스의 자원 사용량에 대한 에이전트
$ kubectl apply -f kube-state-cluster-role.yaml
$ kubectl apply -f kube-state-deployment.yaml
$ kubectl apply -f kube-state-svcaccount.yaml
$ kubectl apply -f kube-state-svc.yaml
$ kubectl get pod -n kube-system
$ docker pull grafana/grafana:latest
$ docker tag grafana/grafana:latest 192.168.1.143:5000/grafana/grafana:latest
$ docker push 192.168.1.143:5000/grafana/grafana:latest
$ kubectl apply -f grafana.yaml
$ kubectl get pod -n monitoring
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 2 # Desired capacity, 시작 갯수
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: k8s.gcr.io/hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
maxReplicas: 4
minReplicas: 2
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
targetCPUUtilizationPercentage: 50
status:
currentCPUUtilizationPercentage: 0
currentReplicas: 2
desiredReplicas: 2
$ kubectl apply -f php-apache.yaml
$ kubectl apply -f hpa.yaml
$ kubectl get all
# 다른 탭에서 수행(마스터노드) 2초 간격으로 상태를 출력
# `-n` 옵선 초 단위로 관찰 가능 0.1초 보다는 빠른 시간은 안된다.
$ watch kubectl get pod -o wide
# 부하를 주는 명령어
# "php-apache" 서비스 이름으로 접속시도를 하여 부하를 발생
$ kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
$ kubectl get hpa
watch kubectl get pod -o wide
kube-state
와 prometheus-node-exporter
은 각각 메트릭을 수집 하기 위한 것이라고 볼 수 있는가? - 그렇다.kube-state
는 k8s 의 메트릭을 수집하기 위한 것이니 쿠버네티스가 아닌 다른 서비스?어플리케이션의 메트릭을 확인하고 싶다면 없어도 되는 것인가? - 그렇다.grafana
는 prometheus
를 좀더 시각화 하기 위한 것이라고 볼 수 있는가? - 그렇다.