"

晨光彩票下载_v7.1.6版下载拥有全球最顶尖的原生APP,每天为您提供千场精彩体育赛事,晨光彩票下载_v7.1.6版下载更有真人、彩票、电子老虎机、真人电子竞技游戏等多种娱乐方式选择,晨光彩票下载_v7.1.6版下载让您尽享娱乐、赛事投注等,且无后顾之忧!

"
首頁 > Mistral 經典案例

Mistral 經典案例

互聯網 2021-03-03 03:27:18

更多精彩內容請訪問我的新博客首頁

一、Mistral的背景

在管理類似云平臺或數據中心等IT基礎設施時,管理員通常需要完成一系列的任務,如:

在所有的或部分服務器上更新Linux內核或特定的軟件在部分服務器上重新配置軟件從服務器抓取數據并根據這些數據構建報告檢查服務器的軟件的運行情況或服務器本身的健康信息

值得補充的是,這些列舉的任務可能都需要按照指定的時間表定期進行。如果不使用任何可以使其自動化的特殊軟件,那么處理它們就需要花費很多的精力。在這篇文章中,我們把openstack云租戶當做一個IT基礎設施的例子,看看Mistral工作流服務如何為管理員提供幫助。

二、重要內容

就以在單個服務器上更新Linux內核為例,有一下幾個步驟:

下載新的Linux內核源碼包安裝源碼包重啟服務器

看起來很簡單,但是當我們做下面的任務時就會變得很難:

在多個服務器上完成上述任務在上述步驟完成后檢查哪些服務器成功更新了,哪些沒有成功周期性的完成上述任務

舉例來說,如果我們想做這種自動化通過編寫一個腳本,無論是shell或Python,我們會很快看到,照顧這些方面非常具有挑戰性,因為為了高效的完成任務,并行處理所有服務器就很有意義了,一旦所有的服務器都處理發送通知的信息顯示所有是好的或有問題是否發生在一些操作。此外,如果一個腳本運行在一個負責解決這個任務的機器上,不管出于什么原因這個機器故障了,那么整個更新100臺服務器的過程將不會完成,最終處于一個未知的狀態

任務流程

我們需要關注的至少有:

并行執行持續的發送每個服務器的狀態信息(至少是成功還是失?。└憧煽啃?,保證整個任務的完成消息通知機制,而不用我們自己去查看過程的狀態

事實上,每次我們需要做類似的事情的時候這個過程都應該重復。如果我們總是想手動地運行這個升級,通知機制不是必須的,而且它不會花很長時間。如果一個人在啟動時沒有控制,或者需要很長時間,通知就變得非常重要。這實際上意味著我們很可能需要使用一個外部工具來解決這些問題。像Mistral工作流服務這樣的工作流技術正是能夠幫助解決這些問題的工具。

三、基于Mistral的解決方案 在所有的VMs上更新Linux內核

作為一個例子,假設所有的虛擬機都已經安裝了Ubuntu系統,讓我們來看看怎么在這些VMs上更新內核。這個使用案例相當地簡單,但是它能展示使用工作流服務的必要的優點。

1、初始化workflow

workflow是Mistral的核心。所以我們首先要創建一個包含更新內核功能的Mistral workflow。先創建update_kernel.yaml:

---version: '2.0'upgrade_kernel:input:- username: ubuntu- private_key_filename- gateway_hosttasks:get_hosts:action: nova.servers_listpublish:hosts:$.addresses.get($.addresses.keys().first()).where($.get("OS-EXT-IPS:type") = fixed).first().addr}).ip %>keep-result: falseon-success:- upgradeupgrade:with-items: host in action: std.ssh_proxiedinput:host: gateway_host: username: private_key_filename: cmd: "sudo apt-get update && sudo apt-get install linux-image-generic-lts-$(lsb_release -sc) -y && sudo reboot"

看這個文件我們可以看到它定義了兩個task:get_hosts和upgrade。

get_hosts調用nova action “nova.servers_list”以JSON list的形式返回租戶項目中所有VM的信息。我們需要做的是解析他們的IP地址。所以我們聲明了一個publish字句去產生hosts變量,這個變量會包含一系列IPs。這里使用的解析IP地址的YAQL表達很微妙,只是因為nova建造網絡信息的方式。注:運行一下命令可以很容易查看nova返回VM信息的格式:

$ mistral run-action nova.servers_get '{"server": ""}'

值得注意的是,由于在Mistral中,任務的結果是它的action(或workflow)的結果,我們使用“false”分配的特殊任務屬性“keep - result”,這樣結果就不會被存儲在工作流上下文中。我們這樣做只是因為我們對Nova返回的所有信息不感興趣,只有IP地址是相關的。這樣做是有意義的,因為即使我們有一個擁有30個虛擬服務器的租戶,那么由Nova返回的所有信息都將花費約100 KB的磁盤空間。

upgrade task是最重要的部分。它利用“with- items”功能遍歷服務器IP并ssh到每個服務器,以升級內核。在這里“iterate”一詞并不意味著處理是連續的。相反,這里正是Mistral并行運行內核升級獨特的地方?!皊td.sh_proxied”的每個動作執行對象都存儲在數據庫中,并保存在某個虛擬服務器上的升級操作的狀態和結果。

細心的讀者可能會注意到action “std.ssh_proxied” 名字中的后綴”proxied” 并且疑惑這個是什么意思?為什么不是Mistral標準action庫中的std.ssh?現在我們回到關于如何訪問客戶操作系統的假設。默認情況下,Mistral無法真正為云隔離管理網絡提供安全的shell訪問,因為所有的OpenStack服務都來自于客戶網絡。事實上,如果一個服務器沒有浮動IP,那么任何運行在管理網絡中的服務都無法訪問該服務器的網絡,因為它在一個不同的網絡中。在我們的特定示例中,我們假設租戶中至少有一個VM有一個浮動的IP地址,這樣它就可以作為一個ssh-gateway,通過它我們實際上可以ssh其他VM。這就是為什么我們使用名為“std . ssh_proxied”的特殊操作,其中“proxied”意味著我們有一個代理VM來訪問所有租戶VM。代理VM

Mistral是一個分布式的高可用系統,它不僅能夠在基礎設施的故障中存活,而且還能保持其工作流程的運行。這就是為什么我們可以確保這樣一個流程自動化的流程服務,就像Mistral將完成,即使在控制系統組件失敗的情況下,在我們的例子中的Mistral engine和executor。

2、添加提醒

我們的工作流缺少的是當內核升級在所有服務器上完成時,通知云操作員的能力。我們需要增加一個task來完成通知功能,稱之為“send_success_email”。完整地workflow描述文件update_kernel.yaml變為:

---version: '2.0'upgrade_kernel:input:- username: ubuntu- private_key_filename- gateway_host- email_info: null # [to_email, from_email, smtp_server, smtp_password]tasks:get_hosts:action: nova.servers_listpublish:hosts:$.addresses.get($.addresses.keys().first()).where($.get("OS-EXT-IPS:type") = fixed).first().addr}).ip %>keep-result: falseon-success:- upgradeupgrade:with-items: host in action: std.ssh_proxiedinput:host: gateway_host: username: private_key_filename: cmd: "sudo apt-get update && sudo apt-get install linux-image-generic-lts-$(lsb_release -sc) -y && sudo reboot"on-success:- send_success_email: send_success_email:action: std.emailinput:subject: Linux kernel on tenant VMs successfully updatedbody: |Number of updated VMs: -- Thanksfrom_addr: to_addrs: []smtp_server: smtp_password:

注意到我們已經在 “upgrade” 添加了 “on-success” 字句,它定義了從 “upgrade” 的順利執行到 “send_success_email” task的轉換。這個轉換是有條件的:只有當我們通過需要發送電子郵件作為輸入參數的數據時,它才會起作用。這也是這個新版本的workflow有一個新輸入參數 “email_info” 的原因?!癳mail_info”是一個數據結構,包括 “from_email” ,“to_email”,“smtp_server”,“smtp_password”。

3、上傳workflow到Mistral

假設我們已經安裝好Mistral client,我們可以使用一下命令上傳workflow:

$ mistral workflow-create update_kernel.yaml

這個命令通常的輸出結果是一個表格:

NameTagsInputCreated atUpdated atupgrade_kernelusername=ubuntu, private_…2015-10-19 10:32:27None

注: 打印所有可用的workflow,運行:

$ mistral workflow-list 4、運行workflow

上傳workflow后Mistral就記錄 “upgrade_kernel” workflow,運行workflow:

$ mistral execution-create upgrade_kernel input.json

JSON格式的input.json 文件包含了workflow的輸入,如下:

{“private_key_filename”: “my_key.pem”,“gateway_host”: “172.16.74.8”} 5、配置周期運行

我們需要配置一個計劃任務觸發器,以使workflow周期性的執行:

$ mistral cron-trigger-create update_kernel_weekly update_kernel --pattern “0 2 * * mon”

查看所有激活的計劃任務觸發器,運行:

$ mistral cron-trigger-list

這樣,我們創建的workflow會在每周一2:00 am運行,在我們登錄的租戶中的所有服務器上更新Linux內核。

對Mistral Cron trigger來說,重要的是它也是一個分布式的容錯機制。這意味著,如果一些Mistral engine崩潰了,那Cron trigger將會繼續工作,因為它們沒有單一的故障點。

如果我們不再需要周期性的更新內核,我們只需要刪除這個觸發器:

$ mistral cron-trigger-delete update_kernel_weekly
免責聲明:非本網注明原創的信息,皆為程序自動獲取互聯網,目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責;如此頁面有侵犯到您的權益,請給站長發送郵件,并提供相關證明(版權證明、身份證正反面、侵權鏈接),站長將在收到郵件12小時內刪除。
晨光彩票下载_v7.1.6版下载 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>