No hace mucho Microsoft ha permitido la opción de parar los AKS, esta era una funcionalidad que se echaba mucho de menos porque una vez levantado un AKS ya no se podía para y seguía costando dinero mes a mes y sólo teníamos 2 opciones para no tener tanto coste a final de mes.
- Destruir del aks
- Modificar el número de nodos y/o la capacidad de las máquinas.
Pero con esta nueva opción podemos parar el AKS entero y mantener la configuración que tenemos del mismo sin que nos cueste dinero.
Esta opción no está disponible a través del portal las opciones que tenemos son las siguientes:
- 1 . De manera manual trabajando con AZ CLI, para ello tienes que tener instalado la versión de AZ CLI de tu sistema operativo, ya sea windows o linux. Yo trabajo con linux y actualmente estoy usando la version azure-cli 2.21.0
- az login: introducir las credenciales en el navegador
- az account list: para optener el listado las subscriones disponibles
- az account set -s [subcription_id o subscription_name] para situarnos en la subscripción del aks
- Parar AKS: az aks stop --name myAKSCluster --resource-group myResourceGroup --subscription mySubscription
- Arrancar AKS: az aks start --name myAKSCluster --resource-group myResourceGroup --subscription mySubscription
- Comprobar el estado de AKS: az aks show --name myAKSCluster --resource-group myResourceGroup --subscription mySubscription
- El campo a revisar es powerState
--
"powerState": {
"code": "Stopped"
},
--
Nota: Esta opción puede ejecutarla un usario nominal
- 2. A mi que me gusta más tener procesos automatizados prefiero usar ansible para automatizar esta tipo de llamadas a la API en vez de usar los comandos desde la consola. Para ello necesitamos un appregistration con permisos RBAC sobre el resource group (RG) o sobre el propio AKS y lo haremos dos sencilos pasos:
- Generar el token de acceso en base a las credenciales en base al appregistration (service principal) que tiene acceso al recurso de la subscripción.
- name: Get token in order to obtain aks credentials for admin cluster user
uri:
url: "https://login.microsoftonline.com/{{ TENANT }}/oauth2/token"
method: POST
body_format: form-urlencoded
return_content: true
headers:
Content-Type: application/x-www-form-urlencoded
body:
grant_type: client_credentials
client_id: "{{ CLIENT_ID }}"
client_secret: "{{ CLIENT_SECRET }}"
resource: 'https://management.azure.com/'
register: _response
failed_when: _response.json is not defined or 'access_token' not in _response.json
- name: set token
set_fact:
_api_manager_token: "{{ _response.json.access_token }}"
failed_when: _api_manager_token is not defined
--
- Llamada a la API de AKS para parar/arracar el cluster con las opciones de power_action = stop o power_action = start
- name: "Power {{ power_action }} the aks {{ aks_name }}"
uri:
url: "https://management.azure.com/subscriptions/{{ aks_subscription_id }}
/resourceGroups/{{ aks_resource_group }}/providers/Microsoft.ContainerService
/managedClusters/{{ aks_name }}/{{ power_action }}?api-version=2020-09-01"
body_format: json
method: POST
return_content: true
status_code: [200, 202]
headers:
Content-Type: application/json
Authorization: "Bearer {{ _api_manager_token }}"
body:
register: _api_response
- name: "Wait until the {{ aks_name }} is {{ power_action }}"
uri:
url: "{{ _api_response.azure_asyncoperation }}"
method: GET
status_code: [200]
return_content: true
headers:
Content-Type: application/json
SubscriptionId: "{{ aks_subscription_id }}"
Authorization: "Bearer {{ _api_manager_token }}"
until: _info.json.status == "Succeeded"
retries: 50
delay: 30
register: _info
failed_when: ( _info.status != 200 or _info.json is not defined or 'status' not in _info.json )
--
Referencias:
AKS stop API
AKS start API
AZ CLI start/stop