Azure Metadata Service: Scheduled Events for Linux VMs (Azure Metadata Service: Scheduled Events para VMs do Linux)

Aplica-se a: ✔️ Conjuntos de escala ✔️ flexível Linux VMs ✔️

O Scheduled Events é um Azure Metadata Service que dá tempo à aplicação para se preparar para a manutenção da máquina virtual (VM). Fornece informações sobre os próximos eventos de manutenção (por exemplo, reiniciar) para que a aplicação possa preparar-se e limitar a interrupção. Está disponível para todos os tipos de Máquinas Virtuais do Azure, incluindo PaaS e IaaS no Windows e no Linux.

Para obter informações sobre Eventos Agendados sobre Windows, consulte Eventos Agendados para Windows VMs.

Nota

Os Eventos Agendados estão geralmente disponíveis em todas as Regiões Azure. Consulte a Versão e a Disponibilidade da Região para obter informações mais recentes sobre a libertação.

Porquê usar eventos agendados?

Muitas aplicações podem beneficiar do tempo de preparação para a manutenção das VMs. O tempo pode ser utilizado para executar tarefas específicas da aplicação que melhorem a disponibilidade, a fiabilidade e a capacidade de serviço, incluindo:

  • Ponto de verificação e restauro.
  • Esvaziamento de ligações.
  • Ativação pós-falha da réplica primária.
  • Remoção de um conjunto de balanceadores de carga.
  • Registo de eventos.
  • Encerramento correto.

Com o Scheduled Events, a sua aplicação pode saber quando ocorrerá a manutenção e acionar tarefas para limitar o respetivo impacto.

O Scheduled Events fornece eventos nos seguintes casos de utilização:

O Básico

O Serviço de Metadados expõe informações sobre a execução de VMs utilizando um ponto final REST acessível a partir do VM. A informação está disponível através de um IP não-sensível para que não seja exposta fora do VM.

Âmbito

Os eventos agendados são entregues para:

  • Máquinas Virtuais autónomo.
  • Todos os VMs num serviço de nuvem.
  • Todos os VMs num conjunto de disponibilidade.
  • Todos os VMs em uma zona de disponibilidade.
  • Todos os VMs num grupo de colocação de conjunto de escala.

Nota

Específicos para VMs em uma zona de disponibilidade, os eventos programados vão para VMs individuais em uma zona. Por exemplo, se você tem 100 VMs em um conjunto de disponibilidade e há uma atualização para um deles, o evento agendado irá para todos os 100, enquanto que se houver 100 VMs individuais em uma zona, então o evento só irá para o VM que está a ser impactado.

Como resultado, verifique o Resources campo no caso de identificar quais VMs são afetados.

Descoberta de Ponto Final

Para VMs ativados por VNET, o Serviço de Metadados está disponível a partir de um IP estático não sensível, 169.254.169.254. O ponto final completo para a versão mais recente de Eventos Agendados é:

http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01

Se o VM não for criado dentro de um Rede Virtual, os casos padrão para serviços na nuvem e VMs clássicos, a lógica adicional é necessária para descobrir o endereço IP para usar. Para aprender a descobrir o ponto final do hospedeiro, consulte esta amostra.

Disponibilidade de versão e região

O serviço Eventos Agendados é versão. As versões são obrigatórias; a versão atual é 2020-07-01.

Versão Tipo de libertação Regiões Notas de Versão
2020-07-01 Disponibilidade Geral Todos
  • Apoio adicional para a duração do evento
  • 2019-08-01 Disponibilidade Geral Todos
  • Apoio adicional à Fonte de Eventos
  • 2019-04-01 Disponibilidade Geral Todos
  • Apoio adicional para descrição do evento
  • 2019-01-01 Disponibilidade Geral Todos
  • Suporte adicionado para conjuntos de escala de máquina virtual 'Terminate'
  • 2017-11-01 Disponibilidade Geral Todos
  • Suporte adicional para o Spot VM despejo EventType 'Preempt'
  • 2017-08-01 Disponibilidade Geral Todos
  • Removido sublinhado de nomes de recursos para IaaS VMs
  • Requisito do cabeçalho de metadados aplicado para todos os pedidos
  • 2017-03-01 Pré-visualizar Todos
  • Versão inicial
  • Nota

    As versões anteriores de Eventos Agendados suportados {mais recente} como a versão api. Este formato já não é suportado e será depreciado no futuro.

    Ativar e Desativar Eventos Agendados

    Eventos Agendados estão habilitados para o seu serviço na primeira vez que faz um pedido de eventos. Deve esperar uma resposta atrasada na sua primeira chamada de até dois minutos.

    Eventos Agendados são desativados para o seu serviço se não fizer um pedido de 24 horas.

    Manutenção iniciada pelo utilizador

    A manutenção de VM iniciada pelo utilizador através do portal do Azure, API, CLI ou PowerShell resulta num evento agendado. Em seguida, pode testar a lógica de preparação de manutenção na sua aplicação, e a sua aplicação pode preparar-se para a manutenção iniciada pelo utilizador.

    Se reiniciar um VM, está agendado um evento com o tipo Reboot . Se recolocar um VM, está agendado um evento com o tipo Redeploy .

    Utilizar a API

    Cabeçalhos

    Quando consultar o Serviço de Metadados, deve fornecer o cabeçalho Metadata:true para garantir que o pedido não foi redirecionado involuntariamente. O Metadata:true cabeçalho é necessário para todos os pedidos de eventos agendados. A não inclusão do cabeçalho no pedido resulta numa resposta de "Mau Pedido" do Serviço de Metadados.

    Consulta para eventos

    Pode consultar os eventos agendados, fazendo a seguinte chamada:

    Amostra de bash

    curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
    

    Uma resposta contém uma série de eventos programados. Uma matriz vazia significa que atualmente não estão agendados eventos. No caso de haver eventos agendados, a resposta contém uma série de eventos.

    {
        "DocumentIncarnation": {IncarnationID},
        "Events": [
            {
                "EventId": {eventID},
                "EventType": "Reboot" | "Redeploy" | "Freeze" | "Preempt" | "Terminate",
                "ResourceType": "VirtualMachine",
                "Resources": [{resourceName}],
                "EventStatus": "Scheduled" | "Started",
                "NotBefore": {timeInUTC},       
                "Description": {eventDescription},
                "EventSource" : "Platform" | "User",
                "DurationInSeconds" : {timeInSeconds},
            }
        ]
    }
    

    Propriedades do evento

    Propriedade Description
    EventId Identificador globalmente único para este evento.

    Exemplo:
    • 602d9444-d2cd-49c7-8624-8643e7171297
    EventType Impacto que este evento causa.

    Valores:
    • Freeze: A Máquina Virtual está programada para fazer uma pausa durante alguns segundos. A CPU e a conectividade da rede podem ser suspensas, mas não há impacto na memória ou nos ficheiros abertos.
    • Reboot: A Máquina Virtual está programada para reiniciar (perde-se a memória não persistente). Este evento é disponibilizado com a melhor base de esforço
    • Redeploy: A Máquina Virtual está programada para se mover para outro nó (os discos efémeros estão perdidos).
    • Preempt: A Máquina Virtual Spot está a ser eliminada (os discos efémeros perdem-se).
    • Terminate: A máquina virtual está programada para ser eliminada.
    ResourceType Tipo de recurso que este evento afeta.

    Valores:
    • VirtualMachine
    Recursos Lista de recursos que este evento afeta. A lista é garantida para conter máquinas de um domínio de atualização no máximo, mas pode não conter todas as máquinas na UD.

    Exemplo:
    • ["FrontEnd_IN_0", "BackEnd_IN_0"]
    EventStatus Estado deste evento.

    Valores:
    • Scheduled: Este evento está agendado para começar após a hora especificada na NotBefore propriedade.
    • Started: Este evento já começou.
    Nenhum Completed estatuto ou estatuto semelhante é fornecido. O evento já não é devolvido quando o evento estiver terminado.
    NotBefore Tempo após o qual este evento pode começar.

    Exemplo:
    • Seg, 19 set 2016 18:29:47 GMT
    Description Descrição deste evento.

    Exemplo:
    • O servidor anfitrião está a ser submetido a manutenção.
    Fonte de Eventos Iniciador do evento.

    Exemplo:
    • Platform: Este evento é iniciado por plataforma.
    • User: Este evento é iniciado pelo utilizador.
    DuraçãoSsocondes A duração esperada da interrupção causada pelo evento.

    Exemplo:
    • 9: A interrupção causada pelo evento durará 9 segundos.
    • -1: O valor predefinido utilizado se a duração do impacto for desconhecida ou não for aplicável.

    Agendamento de eventos

    Cada evento está programado um período mínimo de tempo no futuro com base no tipo de evento. Desta vez reflete-se na propriedade de NotBefore um evento.

    EventType Aviso mínimo
    Congelar 15 minutos
    Reiniciar 15 minutos
    Voltar a implementar 10 minutos
    Preempt 30 segundos
    Terminate Configurar do utilizador: 5 a 15 minutos

    Nota

    Em alguns casos, o Azure é capaz de prever a falha do hospedeiro devido a hardware degradado e tentará mitigar a perturbação do seu serviço, agendando uma migração. As máquinas virtuais afetadas receberão um evento programado com um NotBefore que normalmente é de alguns dias no futuro. O tempo real varia dependendo da avaliação prevista do risco de falha. O Azure tenta dar um pré-aviso de 7 dias quando possível, mas o tempo real varia e pode ser menor se a previsão for que há uma alta probabilidade de o hardware falhar iminentemente. Para minimizar o risco para o seu serviço no caso de o hardware falhar antes da migração iniciada pelo sistema, recomendamos que se auto-reimplante a sua máquina virtual o mais rapidamente possível.

    Nota

    No caso do nó anfitrião experimentar uma falha de hardware, o Azure irá contornar o período mínimo de aviso, iniciando imediatamente o processo de recuperação das máquinas virtuais afetadas. Isto reduz o tempo de recuperação no caso de os VM afetados não serem capazes de responder. Durante o processo de recuperação será criado um evento para todos os VMs impactados com EventType = Reboot e EventStatus = Iniciado

    Frequência de sondagens

    Pode sondar o ponto final para atualizações com a frequência ou com pouca frequência que quiser. No entanto, quanto mais tempo demorar entre pedidos, mais tempo poderá perder para reagir a um evento que se avizinha. A maioria dos eventos tem 5 a 15 minutos de antecedência, embora em alguns casos o aviso prévio pode ser de apenas 30 segundos. Para garantir que tem o máximo de tempo possível para tomar medidas mitigadoras, recomendamos que faça uma sondagem do serviço uma vez por segundo.

    Inicie um evento

    Depois de conhecer um evento que se avizinha e terminar a sua lógica para uma paragem graciosa, pode aprovar o evento pendente fazendo uma POST chamada para o Serviço de Metadados com EventId. Esta chamada indica ao Azure que pode encurtar o tempo mínimo de notificação (quando possível).

    A amostra JSON seguinte é esperada no organismo de POST pedido. O pedido deve conter uma lista de StartRequests. Cada um StartRequest contém EventId para o evento que pretende acelerar:

    {
    	"StartRequests" : [
    		{
    			"EventId": {EventId}
    		}
    	]
    }
    

    Amostra de bash

    curl -H Metadata:true -X POST -d '{"StartRequests": [{"EventId": "f020ba2e-3bc0-4c40-a10b-86575a9eabd5"}]}' http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
    

    Nota

    Reconhecer um evento permite que o evento prossiga para todos Resources no evento, e não apenas para o VM que reconhece o evento. Portanto, pode optar por eleger um líder para coordenar o reconhecimento, que pode ser tão simples como a primeira máquina no Resources campo.

    Amostra de Python

    As seguintes consultas de amostra Metadata Service para eventos agendados e aprova cada evento pendente:

    #!/usr/bin/python
    
    import json
    import socket
    import urllib2
    
    metadata_url = "http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01"
    this_host = socket.gethostname()
    
    
    def get_scheduled_events():
        req = urllib2.Request(metadata_url)
        req.add_header('Metadata', 'true')
        resp = urllib2.urlopen(req)
        data = json.loads(resp.read())
        return data
    
    
    def handle_scheduled_events(data):
        for evt in data['Events']:
            eventid = evt['EventId']
            status = evt['EventStatus']
            resources = evt['Resources']
            eventtype = evt['EventType']
            resourcetype = evt['ResourceType']
            notbefore = evt['NotBefore'].replace(" ", "_")
    	description = evt['Description']
    	eventSource = evt['EventSource']
            if this_host in resources:
                print("+ Scheduled Event. This host " + this_host +
                    " is scheduled for " + eventtype + 
    		" by " + eventSource + 
    		" with description " + description +
    		" not before " + notbefore)
                # Add logic for handling events here
    
    
    def main():
        data = get_scheduled_events()
        handle_scheduled_events(data)
    
    
    if __name__ == '__main__':
        main()
    

    Passos seguintes