在 Kubernetes 中使用混沌工程
在這篇文章中學(xué)習(xí)混沌工程的基礎(chǔ)知識(shí)。
混沌工程是由科學(xué)、規(guī)劃以及實(shí)驗(yàn)組成的。它是一門(mén)在系統(tǒng)上進(jìn)行實(shí)驗(yàn)的學(xué)科,用來(lái)建立系統(tǒng)在生產(chǎn)中承受混亂條件能力的信心。
首先,我會(huì)在文章導(dǎo)論部分解釋混沌系統(tǒng)如何工作。
如何開(kāi)始學(xué)習(xí)混沌系統(tǒng)呢?
以我的經(jīng)驗(yàn),開(kāi)始學(xué)習(xí)混沌系統(tǒng)的最好方式是觸發(fā)一個(gè)此前生產(chǎn)中出現(xiàn)的事故來(lái)進(jìn)行實(shí)驗(yàn)。使用過(guò)去的數(shù)據(jù),制定一個(gè)計(jì)劃,以相同的方式破壞你的系統(tǒng),然后建立修復(fù)策略,并確認(rèn)結(jié)果滿足你預(yù)期。如果計(jì)劃失敗,你就有了一種新的實(shí)驗(yàn)方式,并朝著快速處理問(wèn)題的新方式前進(jìn)。
最重要的是,你可以隨時(shí)記錄所有內(nèi)容,這意味著,隨著時(shí)間的推移,整個(gè)系統(tǒng)將被完整記錄下來(lái),任何人都可以值守而無(wú)需太多加碼,每個(gè)人都可以在周末好好休息。
你要在混沌工程中做什么?
混沌系統(tǒng)實(shí)驗(yàn)運(yùn)行背后有一些科學(xué)依據(jù)。我記錄了其中一些步驟:
- 定義一個(gè)穩(wěn)定狀態(tài):使用監(jiān)控工具來(lái)搜集當(dāng)系統(tǒng)沒(méi)有問(wèn)題或事故時(shí),看起來(lái)功能正常的數(shù)據(jù)。
- 提出假設(shè)或使用先前的事故:現(xiàn)在你已經(jīng)定義了一個(gè)穩(wěn)定狀態(tài),請(qǐng)?zhí)岢鲆粋€(gè)關(guān)于在事故或中斷期間會(huì)發(fā)生(或發(fā)生過(guò))的情況的假設(shè)。用這個(gè)假設(shè)來(lái)得出一系列將會(huì)發(fā)生的事故,以及如何解決問(wèn)題的理論。然后你可以制定一個(gè)故意引發(fā)該問(wèn)題的計(jì)劃。
- 引發(fā)問(wèn)題:用這個(gè)計(jì)劃來(lái)破壞系統(tǒng),并開(kāi)始在真實(shí)環(huán)境中測(cè)試。收集破壞時(shí)的指標(biāo)狀態(tài),按計(jì)劃修復(fù),并追蹤提出解決方案所需時(shí)長(zhǎng)。確保你把所有的東西都記錄下來(lái),以備將來(lái)發(fā)生故障時(shí)使用。
- 試圖推翻你的假設(shè):實(shí)驗(yàn)中最精彩的部分是嘗試推翻你的思考或計(jì)劃。你要?jiǎng)?chuàng)建一個(gè)不同的狀態(tài),看看你能走多遠(yuǎn),并在系統(tǒng)中生成一個(gè)不同的穩(wěn)定狀態(tài)。
確保在你在另一個(gè)系統(tǒng)中生成的破壞因素前,建立一個(gè)處于穩(wěn)定狀態(tài)的控制系統(tǒng)。這將使你更容易在實(shí)驗(yàn)前、期間和之后發(fā)現(xiàn)各種穩(wěn)定狀態(tài)的差異。
混沌工程需要什么?
這有一些初學(xué)混沌工程很好的工具:
- 良好的文檔編制方法
- 一個(gè)捕捉你系統(tǒng)是否處于穩(wěn)定狀態(tài)的監(jiān)控系統(tǒng)
- Grafana
- Prometheus
- 混沌工程工具:
- Chaos mesh
- Litmus
- 之后的文章我會(huì)介紹更多
- 一個(gè)假設(shè)
- 一個(gè)計(jì)劃
去搞破壞吧
現(xiàn)在你已經(jīng)掌握了基礎(chǔ),是時(shí)候去安全的摧毀你的系統(tǒng)了。我計(jì)劃每年制造四次混亂,然后努力實(shí)現(xiàn)每月一次的破壞。
混沌工程是一種很好的實(shí)踐,也是推進(jìn)你的內(nèi)部文檔保持最新的好方法。此外,隨著時(shí)間的推移,新升級(jí)或應(yīng)用程序部署將更加順暢,你的日常生活管理將通過(guò) Kubernetes 變得更加輕松。