Amazon 탄력성 Kubernetes 서비스 클러스터 자동 배율 조정

이 문서에서는 EKS 클러스터에서 가장 흔히 볼 수 있는 두 가지 자동 크기 조정 방법을 살펴보겠습니다.
  • 수평 크레인 자동 측정기(HPA)
  • CA(Cluster Automatic Standard)
  • Horizontal Pod Autoscaler 또는 HPA는 Kubernetes 구성 요소로 CPU 사용률이나 다른 지표(Kubernetes metric 서버 정의)를 통해 자동으로 서비스를 확장할 수 있습니다.HPA는 배포 또는 복제본에서 POD를 중앙 집중식으로 확장하고 Kubernetes API 리소스와 컨트롤러로 구현합니다.컨트롤러 관리자는 모든 수평 크레인 자동 측정기 정의에 지정된 지표에 따라 자원 이용률을 조회한다.이것은 모든pod의 자원 도량 API나 다른 도량의 사용자 정의 도량 API에서 도량을 가져옵니다.

    이를 보기 위해 HPA를 구성하고 시스템에 부하를 적용하여 실제 작동을 볼 수 있습니다.
    우선 Kubernetes의 패키지 관리자로 Helm을 설치하는 것부터 시작하겠습니다.
    curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > helm.sh
     chmod +x helm.sh
     ./helm.sh
    
    이제 Tiller라는 Helm의 서버 기본 섹션을 설정합니다.서비스 계정이 필요합니다.
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: tiller
      namespace: kube-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRoleBinding
    metadata:
      name: tiller
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
      - kind: ServiceAccount
        name: tiller
        namespace: kube-system
    
    
    Tiller 서비스 계정이 정의되어 있으며 클러스터 관리자 역할을 이 계정에 할당했습니다.이제 구성을 계속 적용합니다.
    kubectl apply -f tiller.yml
    
    방금 생성한 Tiller 서비스 계정을 사용하여 실행helm init:
    helm init --service-account tiller
    
    그것 때문에 우리는 집단에 Tiller를 설치해서 집단의 자원을 관리할 수 있다.
    Helm이 설치되면 metric 서버를 배포할 수 있습니다.도량 서버는 자원이 데이터를 사용하는 집단 범위 집합기로서 그 중에서 도량은 각 작업 노드의 kubelet 에서 수집되고 배치의 확장 행위를 지시하는 데 사용된다.
    이제 설치를 계속하겠습니다.
    helm install stable/metrics-server --name metrics-server --version 2.0.4 --namespace metrics
    
    모든 검사가 통과되면 우리는 응용 프로그램을 확장할 수 있다.
    이 문서의 목적에 따라 CPU 사용률을 생성하기 위한 특수한 Apache와 PHP 구축을 배치합니다.
    kubectl run php-apache --image=k8s.gcr.io/hpa-example --requests=cpu=200m --expose --port=80
    
    이제 배포를 자동으로 축소합니다.
    kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
    
    HPA는 모든 POD의 평균 CPU 활용도를 50%로 유지하기 위해 복제본 수를 늘리거나 줄입니다.각각pod가 200밀리 코어를 요청하기 때문에 (이전 명령에서 지정한 바와 같이) 100밀리 코어의 평균 CPU 이용률을 유지합니다.
    상태를 확인해 보겠습니다.
    kubectl get hpa
    
    ReviewTargets 열은 현재 서버에 요청을 보내지 않았기 때문에 unknown/50% 를 나타내면 현재 CPU 소모가 0%임을 나타냅니다.정확한 값을 표시하는 데 몇 분이 걸리기 때문에 커피를 한 잔 마시고 여기서 데이터를 좀 얻고 돌아오자.
    마지막 명령을 다시 실행하고 Targets 열이 현재 0%/50% 인지 확인하십시오.이제 다음 명령을 실행하여 일부 로드를 생성하여 줌을 실행합니다.
    kubectl run -i --tty load-generator --image=busybox /bin/sh
    
    이 용기에서, 우리는 우리의 서비스에 무한한 요청을 보낼 것이다.다른 터미널로 돌아가면 자동 축척기가 실행되는 것을 볼 수 있습니다.
    kubectl get hpa -w
    
    HPA scaler pod가 1에서 구성의 최대치인 10으로 상승하여 평균 CPU 사용률이 목표의 50%보다 낮을 때까지 볼 수 있습니다.실행에 10분 정도 걸립니다. 현재 10개의 복사본이 있습니다.만약 우리가 다른 터미널로 돌아가서 부하 테스트를 중지하고 커서 터미널로 돌아간다면, 우리는 HPA가 복사본 계수를 최소화하는 것을 볼 수 있다.

    클러스터 자동 축척기


    클러스터 자동 축소기는 기본 Kubernetes 구성 요소로 클러스터의 크레인이나 노드를 축소할 수 있습니다.그것은 계속해서 기중기를 성공적으로 놓을 수 있도록 자동 축소 그룹의 크기를 자동으로 증가시킬 것이다.자동 축소 그룹에서 사용하지 않는 작업 노드 (pod를 실행하지 않는 노드) 를 삭제하려고 시도합니다.

    다음 AWS CLI 명령은 최소 1, 최대 10의 자동 배율 그룹을 생성합니다.
    eksctl create nodegroup --cluster <CLUSTER_NAME> --node-zones <REGION_CODE> --name <REGION_CODE> --asg-access --nodes-min 1 --nodes 5 --nodes-max 10 --managed
    
    이제 내연 IAM 정책을 작업 노드에 적용해야 합니다.
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "autoscaling:DescribeAutoScalingGroups",
                    "autoscaling:DescribeAutoScalingInstances",
                    "autoscaling:DescribeLaunchConfigurations",
                    "autoscaling:DescribeTags",
                    "autoscaling:SetDesiredCapacity",
                    "autoscaling:TerminateInstanceInAutoScalingGroup",
                    "ec2:DescribeLaunchTemplateVersions"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
    
    기본적으로 클러스터 자동 축척기를 게시하는 EC2 작업 노드는 자동 축척을 수행할 수 있습니다.복사하여 EC2 IAM 역할에 추가합니다.
    다음 파일을 다운로드합니다.
    wget https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
    
    클러스터 이름으로 다음 행을 업데이트합니다.
                - --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/<YOUR CLUSTER NAME>
    
    
    마지막으로 Autoscaler를 배포할 수 있습니다.
    kubectl apply -f cluster-autoscaler-autodiscover.yaml
    
    물론,pod가 생성되기를 기다려야 합니다.일단 완성되면 우리는 집단을 확장할 수 있다.우리는 다음과 같은 nginx 파일이 있는 간단한 yaml 응용 프로그램을 고려할 것이다.
    apiVersion: extensions/v1beta2
    kind: Deployment
    metadata:
      name: nginx-scale
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.2
            ports:
            - containerPort: 80
            resources: 
              limits:
                cpu: 500m
                memory: 512Mi
              requests:
                cpu: 500m
                memory: 512Mi
    
    애플리케이션을 계속 배포하는 방법:
    kubectl apply -f nginx.yaml
    
    배포 확인:
    kubectl get deployment/nginx-scale
    
    이제 복제본을 10까지 확장합니다.
    kubectl scale --replicas=10 deployment/nginx-scale
    
    일부pod가 꺼진 상태를 볼 수 있습니다. 이것은 그룹 자동 커서가 EC2 실례군을 확장하는 데 사용되는 트리거입니다.
    kubectl get pods -o wide --watch
    

    결론


    본고에서 우리는 이 두 가지 유형의 EKS 군집 자동 축소를 고려했다.우리는 집단 자동 축소기가 충분히 이용되지 않은 실례나 끊긴pod가 검출될 때마다 신축 작업을 시작하는 방법을 이해했다.마이크로서비스 응용 프로그램을 확장할 때 수평Pod 자동 축소기와 집단 자동 축소기는 Kubernetes의 기본 기능이다.네가 이 문장이 매우 유용하다는 것을 발견하기를 바라지만, 아직 더 많은 내용이 있다.그 전에 즐겁게 지내세요!

    좋은 웹페이지 즐겨찾기