zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    mac shell终端编辑命令行快捷键——行首行尾
    mac appium 启动genymotion
    mac eclipse 执行adb 命令,提示command not fount
    java jsch 登录linux系统避免手动输入Yes 或Always
    mac 安装android sdk
    内容选择器
    增强基本选择器[selector_3.html]
    层次选择器[selector_2.html]
    基本选择器
    jquery 入门与知识
  • 原文地址:https://www.cnblogs.com/wekang/p/10455744.html
Copyright © 2011-2022 走看看