본문 바로가기

개발하자

AKS(Azure Managed Kubernetes)에서 모든 컴퓨팅 중지

반응형

AKS(Azure Managed Kubernetes)에서 모든 컴퓨팅 중지

나는 Azure에 관리되는 Kubernetes 클러스터를 만들었지만, 이 클러스터는 학습 목적으로만 사용하기 때문에 실제로 사용하는 동안만 컴퓨팅 비용을 지불하고 싶다.

VM, 가용성 세트 및 로드 밸런서를 정상적으로 종료하고 시작하는 쉬운 방법이 있습니까?




모든 AKS 리소스 중 VM만 비용이 듭니다(VHD도 마찬가지입니다만, 이러한 리소스를 중단할 수는 없습니다). 그래서 당신은 그것들만 처리하면 됩니다. 편집: 퍼블릭 Ips도 비용이 들지만, 당신은 그것들을 막을 수 없다.

AKS 클러스터의 경우 포털을 사용하고 stop\deallocate 명령을 실행합니다. 그리고 필요할 때 다시 시작하십시오(모든 것이 잘 작동하는 것 같습니다).

REST API\powershell\cli\다양한 SKD를 사용하여 자동화된 방식으로 동일한 결과를 얻을 수 있습니다.




다음 작업을 수행할 수 있습니다:

az aks stop --name myAksCluster --resource-group myResourceGroup

그리고 그것을 다시 시작하라

az aks start --name myAksCluster --resource-group myResourceGroup

이 기능 이전에는 Powershell을 통해 가상 시스템을 중지할 수 있었습니다:

az vm deallocate --ids $(az vm list -g MC_my_resourcegroup_westeurope --query "[].id" -o tsv)

VM을 포함하는 리소스 그룹의 이름으로 대체합니다.

VM을 다시 시작하려면 다음을 실행합니다:

az vm start --ids $(az vm list -g MC_my_resourcegroup_westeurope --query "[].id" -o tsv)



AKS 클러스터에서 속성으로 이동하여 리소스 그룹 이름을 찾습니다. 리소스 그룹을 검색하면 리소스 그룹을 선택하면 가상 시스템이 나열됩니다. 각 가상 시스템에 대해 작업 > 자동 종료 옵션을 선택하고 전원을 켭니다. 이렇게 하면 VM을 사용할 수 없게 되어 개발하지 않을 때 비용을 절약할 수 있습니다! 다시 켜려면 이전 답변 또는 답변에 대한 조언을 따라야 합니다




위의 방법()은 더 이상 작동하지 않는 것 같습니다.

먼저 VM 스케일 세트를 나열하고 이를 사용하여 할당 해제/시작함으로써 해결됩니다:

$ResourceGroup = "MyResourceGroup"
$ClusterName = "MyAKSCluster"
$Location = "westeurope"

$vmssResourceGroup="MC_${ResourceGroup}_${ClusterName}_${Location}"

# List all VM scale sets
$vmssNames=(az vmss list --resource-group $vmssResourceGroup --query "[].id" -o tsv | Split-Path -Leaf)

# Deallocate first instance for each VM scale set
$vmssNames | ForEach-Object { az vmss deallocate --resource-group $vmssResourceGroup --name $_  --instance-ids 0}

# Start first instance for each VM scale set
$vmssNames | ForEach-Object { az vmss start --resource-group $vmssResourceGroup --name $_  --instance-ids 0}




AKS에 방금 추가된 새로운 기능이 있습니다:

AKS Stop/Start 클러스터 기능은 공개 미리 보기에서 AKS 고객이 AKS 클러스터를 완전히 일시 중지하고 버튼 스위치를 통해 나중에 중단한 위치에서 픽업할 수 있으므로 시간과 비용을 절약할 수 있습니다. 이전에는 고객이 클러스터를 중지하거나 시작하기 위해 여러 단계를 수행해야 했기 때문에 운영 시간이 늘어나고 컴퓨팅 리소스가 낭비되었습니다. Stop/Start 기능은 클러스터 구성을 그대로 유지하며, 고객은 클러스터를 재구성하지 않고도 중단했던 부분을 선택할 수 있습니다.

https://learn.microsoft.com/en-gb/azure/aks/start-stop-cluster




예, 이렇게 할 수 있습니다. 가능하면 자동화를 통해 하룻밤 사이에 낮은 환경 클러스터를 해제할 수 있으며 주말에는 비용이 많이 절감됩니다.

다음은 Azure Pipeline을 사용하여 매주 오전 7시 및 오후 7시에 클러스터를 껐다가 켜는 예입니다.

pool:
  vmImage: ubuntu-22.04
 
pr: none
 
trigger: none
 
schedules:
- cron: '0 07,19 * * 1,2,3,4,5' # run on weekdays only at 7AM & 7PM.
  displayName: Weekday Start & Stop AKS
  branches:
    include:
    - main
  always: true
 
variables:
  - name: serviceConnection
    value: <SERVICE CONNECTION>
 
  - name: aksResourceGroup
    value: <AKS RESOURCE GROUP>
 
  - name: aksCluster
    value: <AKS CLUSTER NAME>
 
jobs:
- job: StartStopAKS
  displayName: Start/Stop AKS
  steps: 
  - task: AzureCLI@2
    displayName: Get AKS Power Status
    inputs:
      azureSubscription: ${{ variables.serviceConnection }}
      scriptType: pscore
      scriptLocation: inlineScript
      inlineScript: |
        $aksResourceGroup = "$(aksResourceGroup)"
        $aksCluster       = "$(aksCluster)"
        $status           = $(az aks show --resource-group $aksResourceGroup  --name $aksCluster --query agentPoolProfiles[0].powerState.code -o tsv)
 
        Write-Host "##[warning]AKS Cluster $aksCluster is $status"
        Write-Host "##vso[task.setvariable variable=aksStatus;]$status"
 
  - task: AzureCLI@2
    displayName: Power On/Off AKS
    inputs:
      azureSubscription: ${{ variables.serviceConnection }}
      scriptType: pscore
      scriptLocation: inlineScript
      inlineScript: |
        $aksResourceGroup = "$(aksResourceGroup)"
        $aksCluster       = "$(aksCluster)"
        $status           = "$(aksStatus)"
 
        if ($status -eq "Stopped") {
          Write-Host "##[warning]Cluster Status is $status, Starting Cluster..."
          az aks start --resource-group $aksResourceGroup --name $aksCluster --verbose  
        }
        else {
          echo "##[warning]Cluster Status is $status, Stopping Cluster..."
          az aks stop --resource-group $aksResourceGroup --name $aksCluster --verbose
        }

참조:


반응형