Azure 虚拟机计划运维管理

        今天我们来聊聊 Azure 虚拟机运维的计划运维管理(Scheduled Event),在微软云 Azure 上会出现计划性的运维事件一种是 Azure 平台发起的,一种是客户自主发起的,对于这种可预知的运维事件,是否可以进行有效的发现-管理-响应呢,下面我们就来做个小 demo 来带大家 Get 这个技能。

发现:

       Azure 上支持将计划性运维事件发布出来,在 Azure 的虚拟机中,可以通过访问 Metadata 的方式来探知计划性运维事件,下面是计划性运维事件的 Schema:

{
    "DocumentIncarnation": {IncarnationID},
    "Events": [
        {
            "EventId": {eventID},
            "EventType": "Reboot" | "Redeploy" | "Freeze",
            "ResourceType": "VirtualMachine",
            "Resources": [{resourceName}],
            "EventStatus": "Scheduled" | "Started",
            "NotBefore": {timeInUTC},              
        }
    ]
}

        其中 EventType 字段标识,即将发生的计划性运维事件,Reboot 标识该运维事件会引起虚拟机重启,Redepoly 标识该运维事件会引起虚拟机在其它物理计算节点部署,Freeze 标识该运维事件会引起虚拟机 CPU 短暂的挂起(主要是针对平台对节点做热升级/热补丁),另外一个关键字段 NotBefore 表示该事件将在什么时间发生。

       如何访问此 Metadata,在 VM 节点内可以通过访问虚拟机 metadata endpoint 来取得相应信息,以 Linux VM 为例,可以通过 curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2017-08-01 来获取计划运维事件。

管理:

        当有大量被管理虚拟机时,可以通过分布式在每个虚拟机上运行一个守护进程,该守护进程定时执行来进行计划运维事件发现。采集通过分布式来完成,管理集中化可以方便对事件进行统一处理,这个小 Demo 中以 Azure Event Grid 作为消息队列,当节点上发现计划运维事件后,将消息推送到 Event Grid 服务,以便被后端响应处理程序消费。

        

 1 #!/bin/bash
 2 key="#input your eventgrid topic secret here"
 3 endpoint="#input your eventgrid endpoint here" 
 4 for (( ; ; ))
 5 do
 6    metadata=$(curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2017-08-01 | jq '.Events
 7 []')
 8    if [ -z "$metadata" ]
 9    then
10       sleep 30
11       continue
12    else
13       event='[ {"id": "'"$RANDOM"'", "eventType": "ScheduledEvent", "subject": "metadatademo/demovm", "eventTime": "'`da
14 te +%Y-%m-%dT%H:%M:%S%z`'", "data":'"$metadata"',"dataVersion": "1.0"} ]'
15       curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
16       sleep 30
17    fi
18 done

        Note:上述 bash 脚本调用了 jq,请保证 runtime 已安装 jq。

响应:

        发现的计划运维事件放置在 Evnetgrid 消息队列中,即可被响应处理应用来进行消费,在本 Demo 中通过 Azure Logicapp 服务来进行事件响应,当收到事件后邮件通知管理员。

       

 

 

        Azure 平台对上述三种计划性运维事件已经定义的最小通知时间窗口,Freeze:10 mins,Reboot:15 mins,Redeploy:10 mins,平台会保证在该时间内用户可以进行相关的响应操作,比如客户可以备份,清理连接,主备切换,日志告警,Graceful shutdown等。

测试:

        Azure 对于计划性运维时间的支持不仅仅是对平台运维所产生的事件,对于用户操作所产生的事件也是支持的,比如客户在 Portal 中执行 Reboot,Redeploy 操作,大家在测试验证自己的响应逻辑时,可以通过模拟管理操作来进行测试。基本逻辑已经介绍清楚,小伙伴们动手开干吧!

学习资料:

1. Azure 虚拟机计划性运维 Metadata 介绍:https://docs.microsoft.com/en-us/azure/virtual-machines/linux/scheduled-events

2. Azure 平台计划性运维发现介绍:https://azure.microsoft.com/en-us/blog/find-out-when-your-virtual-machine-hardware-is-degraded-with-scheduled-events/

3. 揭秘 Azure 平台计划运维与人工智能的结合:https://azure.microsoft.com/en-us/blog/improving-azure-virtual-machine-resiliency-with-predictive-ml-and-live-migration/

 

posted @ 2019-03-01 12:40  wekang  阅读(586)  评论(0编辑  收藏  举报