오늘 배웠습니다: Kubernetes에서 수평 크레인 자동 스티커(HPA) 활성화

Kubernetes의 수평 자동 배율을 허용하기 위해 HPA 대상의 현재 리소스 값을 알 수 없습니다.


사진작가Paweł CzerwińskiUnsplash
한동안 나는 어떤 업데이트도 발표하지 않았다.요즘은 바빠서 지난 몇 주 동안 한가한 시간을 찾아 글을 한 편 쓰기가 어려웠다.그래서 이 얻기 어려운 기회에 나는 오늘 배운 것을 좀 쓰고 싶다.
소개로, 현재 저는 제 보조 프로젝트를 위해 Kubernetes를 시도하고 있습니다.이것은 모바일 응용 프로그램의 부대 항목이다.로그인 페이지는 https://mabar.id에서 볼 수 있으며, 현재는android 응용 프로그램을 유일하게 지원하며,playstorehere에서 다운로드할 수 있습니다.
나는 이미 이 프로젝트에서 몇 달 동안 일했고, 나는 나의 친구와 함께 이 일을 했다.저는 백엔드, API, Infra에서 일하고 있으며 이 프로젝트에서 Kubernetes를 사용합니다.
그래서 오늘 제가 Kubernetes로 수평 축소를 시도했을 때 새로운 것을 배웠습니다.
이전에 Kubernetes에는 실제로 HPA(수평 Pod AutoCaller)라는 객체가 있었습니다.HPA에 대한 자세한 내용은 공식 문서documentation를 참조하십시오.
우선, 나는 이것이 매우 쉽게 실현될 것이라고 생각한다.배포 스크립트에 대상을 추가하기만 하면 Kubernetes 집단에서 처리해야 합니다.

문제


하지만 쉽지 않았다.따라서 실제 상황을 모의하기 위해 나는 실제 문제가 해결되기 전에 어떻게 해결되었는지, 그리고 내가 어떻게 해결했는지 쓸 것이다.
예를 들어 Kubernetes에 https://mabar.id 의 로그인 페이지를 배치하고 싶습니다.HPA도 넣고 싶어요.이렇게 하는 이유:
  • HPA 구현 방법에 대해 알고 싶음
  • 비록 로그인 페이지가 여전히 새롭다 하더라도, 나는 아무도 그것을 방문하지 않을 것이라고 믿는다. 그러나 만약 그것이 커다란 요구가 있다면, 어쨌든 그것을 준비할 뿐이다. D
  • 우선 Kubernetes의 블로그 글과 공식 문서를 많이 보고 Kubernetes에서pod를 위한 HPA를 만드는 방법을 발견했습니다.
    apiVersion: autoscaling/v2beta1
    kind: HorizontalPodAutoscaler
    metadata:
      name: landing
      namespace: landing-page
    spec:
      scaleTargetRef:
        apiVersion: apps/v1beta1
        kind: Deployment
        name: landing
      minReplicas: 1
      maxReplicas: 10
      metrics:
      - type: Resource
        resource:
          name: cpu
          targetAverageUtilization: 70
    
    이 간단한 스크립트만 있으면 자동으로 실행됩니다.이것은 나의 첫 번째 생각이다.
    그럼 테스트를 해볼게요.나는 서버에 대해 부하 테스트를 진행했다.
    $ hey -c 50 -z 5m https://mabar.id
    
    나는 부하 테스트 도구로 hey를 사용한다.나는 로그인 페이지로 50분 동안 병렬 호출을 만들었다.
    일반적으로 요청이 점점 커지면 새로운pod 던전을 배치해야 합니다.
    하지만 내가 본 것은 내 기중기가 붕괴되고 다시 작동하는 것뿐이었다.왜 이러는지 궁금해요.
    나중에 HPA의 디테일을 찾다가 이상한 일을 봤어요.
    $ kubectl get hpa
    
    NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
    landing Deployment/landing <unknown>/70% 1 10 1 74d
    
    HPA의 대상을 알 수 없음
    또는 상세한 버전에서descripe 명령을 사용합니다.
    $ kubectl describe hpa landing
    

    지표 부분에서/70%를 나타냈다.왜 이런 상황이 발생했을까


    솔루션


    그래서 많은 해결 방안과 Stack Overflow 문제를 검색한 후에 다행히도 매우 도움이 되는 답이 하나 있는데, 왜 나의 HPA가 작동하지 않는가


    따라서, 내가 So 답안에서 알게 된 후, 나는 나의 Kubernetes 집단이 POD에 현재 사용되고 있는 자원을 검색하기 위해metrics 서버가 여전히 없다고 생각한다


    따라서 해결 방안은 Kubernetes 그룹에 metric 서버를 설치해야 합니다.설치해야 하는metric 서버는 이 저장소에서 찾을 수 있습니다: https://github.com/kubernetes-incubator/metrics-server


    실제로 우리가 저장소로 이동하면, 도량 서버를 Kubernetes 집단으로 실현하는 방법을 보여 줍니다.하지만 Github 저장소의 단계를 복사합니다


    단계


    • 저장소 복제


    $ git clone [https://github.com/kubernetes-incubator/metrics-server.git](https://github.com/kubernetes-incubator/metrics-server.git)
    .....
    
    $ cd metrics-server
    

    • kubectl 명령을 사용하여 설정을 배치합니다.


    $ kubectl apply -f deploy/1.8+/
    

    응용 도량 서버 배치


    • , 다음은metric 서버 배치 로고 편집


    $ kubectl edit deploy -n kube-system metrics-server
    

    • 및 필요에 따라 플래그 매개변수를 추가합니다.모든 사용 가능한 로고는 Github 저장소에서 볼 수 있습니다.하지만 나는github 저장소에 표시된 기본값을 사용했을 뿐이다


    args:
     - --kubelet-insecure-tls
     - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
    

    • 상기 파라미터를 배치 설정에 추가하고 저장합니다.


    $ kubectl edit deployment metrics-server
    

    metrics 서버의 배치 편집


    metrics 서버 용기의 매개 변수를 편집하고 추가합니다


    아, 그렇습니다. metrics 서버는kube시스템 이름 공간에 배치됩니다. 따라서 배치 이름이 보이지 않으면 이름 공간을 전환할 수 있습니다


    • 배포 구성을 편집하면 이제 HPA가 작동할 수 있을 것입니다

    HPA상태


    테스트 HPA


    필요한 매개 변수를 사용하여 배치 설정을 편집한 후.HPA는 이제 일을 할 수 있을 거예요.그것이 유효한지 증명하기 위해서, 나는 높은 병렬 요청을 사용하여 부하 테스트를 다시 만들려고 시도했다.Kubernetes에서 HPA 세부 정보 및pods 상태 찾기


    HPA는 현재 이미 일을 잘 하고 있습니다.요청된 리소스가 대상 리소스를 초과하면 HPA는 POD의 새 복제본을 자동으로 배포합니다.요청 사용률이 다시 정상으로 떨어지면 HPA는pod의 복사본을 자동으로 삭제합니다


    내가 HPA를 디테일하게 본다면, 이것은 HPA 상태의 캡처이다


    HPA가 현재 요청을 감지하고 필요할 때 사본을 추가합니다


    이것은 스크린 캡처입니다. 만약 우리가 콩꼬투리의 상태를 본다면.HPA 상태에 따라 새로운 크레인을 배치합니다


    새 기중기가 자동으로 배치됩니다


    배달


    따라서 HPA를 사용하기 위해서는 Kubernetes 집단에 metrics 서버를 설치해야 합니다.HPA 스크립트만으로는 부족합니다.HPA는 작업을 수행하기 위해 메트릭 데이터가 필요하기 때문입니다


    제가 여기에 쓴 것은 기본 절차일 뿐입니다. 실제로 Prafull이 Stackoverflowanswer에서 한 것처럼 metric 서버의 배치 설정을 맞춤형으로 설정할 수 있습니다


    하지만 오늘 나는 새로운 것을 배웠다.나는 이 문제를 이해하고 해결하는 데 두 시간이 필요하다.아마도 나의 연습은 여전히 가장 좋은 것이 아닐 것이다.하지만 이제 내 문제를 해결했다.나는 잠시 후에 최상의 해결 방안을 배울 것이다


    나는 미래에 Kubernetes와 소프트웨어 공학과 관련된 새로운 지식을 다시 배울 수 있기를 기대한다


    공구서류



    최초 발표https://bxcodec.io/posts/today-i-learned-enabling-horizontal-pod-autoscalerhpa-in-kubernetes/



    좋은 웹페이지 즐겨찾기