버전 문제로 수정 필요(해결과정 cailco는 설치되어 있다는 가정 하에)
# 최신 버전 metrics-server 설치
kubectl apply -f <https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml>
# metrics-server 적용이 안 되는 문제
student@k8s-test1:~/hpa-test$ kubectl top node
error: Metrics API not available
# 원인 추적
student@k8s-test1:~/hpa-test$ kubectl get pods -n kube-system -l k8s-app=metrics-server
NAME READY STATUS RESTARTS AGE
metrics-server-6d94bc8694-gbthb 0/1 Running 0 37m
student@k8s-test1:~/hpa-test$ kubectl describe pod metrics-server-6d94bc8694-gbthb -n kube-system
Name: metrics-server-6d94bc8694-gbthb
Namespace: kube-system
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 38m default-scheduler Successfully assigned kube-system/metrics-server-6d94bc8694-gbthb to k8s-test2
Warning FailedCreatePodSandBox 38m kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "287909813efd6999a97e157aa450ea10f34556cc12ed7fd49ddb0c06db3b8ebe": plugin type="calico" failed (add): error getting ClusterInformation: Get "<https://172.96.0.1:443/apis/crd.projectcalico.org/v1/clusterinformations/default>": x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
Normal SandboxChanged 8m15s (x119 over 38m) kubelet Pod sandbox changed, it will be killed and re-created.
Warning Unhealthy 3m10s (x14 over 5m10s) kubelet Readiness probe failed: HTTP probe failed with statuscode: 500
# 방법 1 인증서 우회(임시)
kubectl -n kube-system edit deploy metrics-server
#아래와 같이 containers 섹션에 command 추가
containers:
- args:
- --cert-dir=/tmp
- --secure-port=10250
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --metric-resolution=15s
command:
- /metrics-server
- --kubelet-insecure-tls #인증서 검증 우회
- --kubelet-preferred-address-types=InternalIP
# deploy resource 설정
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend-app
namespace: frontend-ns
labels:
app: front
spec:
replicas: 3
selector:
matchLabels:
app: front
template:
metadata:
labels:
app: front
spec:
containers:
- name: frontend
image: choisunhong5717/front:13.0
resources:
requests:
cpu: "200m"
limits:
cpu: "400m"
ports:
- containerPort: 3000
문서 실습 예제를 따라해도 리소스를 확인할 수 없는 문제가 있는 것을 발견해 Metrics Server를 삭제하고 재설치했으나 문제 수정이 안 되어 서버에 접속해 아래 명령을 실행할 생각.
# hpa 생성
kubectl autoscale deployment frontend-app --cpu-percent=30 --min=3 --max=6 -n frontend-ns
# 생성 확인
kubectl get hpa -n frontend-ns
# 부하 생성기 Pod 생성
kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never --namespace=frontend-ns -- /bin/sh -c "while sleep 0.01; do wget -q -O- <http://frontend-svc:3000>; done"
# HPA 상태 확인
kubectl get hpa -n frontend-ns
# frontend-app Deployment 상태 확인
kubectl get deployment frontend-app -n frontend-ns
# HPA 상태 지속적으로 모니터
kubectl get hpa frontend-app -n frontend-ns --watch
# Deployment 상태 다시 확인
kubectl get deployment frontend-app -n frontend-ns
kubectl apply -f <https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml>
kubectl -n kube-system edit deploy metrics-server
kubectl apply -f <https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml>
최신 버전 metrics-server 설치
kubectl top node
#결과
error: Metrics API not available
metrics-server 작동이 되지 않을 때