停止AKS(Azure托管Kubernetes)中的所有计算

but5z9lq  于 2023-04-29  发布在  Kubernetes
关注(0)|答案(6)|浏览(188)

我在Azure中创建了一个托管的Kubernetes集群,但它仅用于学习目的,因此我只想在实际使用时支付计算费用。
是否有一种简单的方法来优雅地关闭和启动虚拟机,可用性集和负载均衡器?

mklgxw1f

mklgxw1f1#

您可以使用Azure CLIstop the the entire cluster

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)

MC_my_resourcegroup_westeurope替换为包含VM的资源组的名称。
如果要再次启动VM,请运行:

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

rbl8hiat2#

只有虚拟机需要花费所有AKS资源(当然,VHD也是如此,但您无法真正阻止它们)。你只需要照顾这些。编辑:公共IP也需要花钱,但你也不能阻止它们。
对于我的AKS集群,我只是使用portal并发出stop\deallocate命令。并在我需要的时候启动那些回来(一切似乎都工作得很好)。
您可以使用REST API\powershell\cli\各种SKD以自动方式实现相同的结果。

dohp0rv5

dohp0rv53#

上面的方法(az vm <deallocate|start> --ids $(...))似乎不再起作用。
通过首先列出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}
xzabzqsa

xzabzqsa4#

有一个新的功能刚刚添加到AKS:
现在公开预览的AKS停止/启动群集功能允许AKS客户完全暂停AKS群集,并通过按钮开关从稍后停止的位置继续,从而节省时间和成本。以前,客户必须采取多个步骤来停止或启动群集,从而增加了操作时间并浪费了计算资源。停止/启动功能可使群集配置保持在适当位置,客户无需重新配置群集即可从停止的位置继续。
https://learn.microsoft.com/en-gb/azure/aks/start-stop-cluster

stszievb

stszievb5#

在AKS集群中,后藤属性并找到资源组名称。搜索资源组,当您选择它时,它将列出您的虚拟机。对于每个虚拟机,选择操作〉自动关闭选项并将其打开。这将关闭虚拟机,在您不进行开发时节省您的资金!要再次打开它们,您需要遵循以前答案的建议或答案here

bihw5rsg

bihw5rsg6#

是的,你可以做到这一点,我建议如果可能的话,自动化,这样你就可以关闭较低的环境集群过夜,并在周末,它节省了很多钱。
下面是一个使用Azure Pipelines在每个工作日的上午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
        }

参考:https://jimferrari.com/2023/04/25/auto-shutdown-azure-kubernetes-service-clusters-aks/

相关问题