버전 문제로 수정 필요(해결과정 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


HPA

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 작동이 되지 않을 때