每天有數以百萬計的Docker容器被啟動起來以使用它們的資源,然後在結束任務後,沒有用時就被殺掉。 這是一個殘酷的現實,但對於作為開發者的你我來說非常有益。 你可以看到在過去幾年中,容器技術已經大大改變了軟體公司構建、釋出和維護其應用程式的方式。 這是因為容器允許我們打包應用程式程式碼及其所有依賴項,因此無論計算執行環境如何,它都可以平穩快速地執行。 不僅如此,容器還可以很好地用於持續整合/持續部署(CI/CD),允許你儘快向客戶提供新功能,增強功能或錯誤修複,從而推動客戶增長以及改進你提供的軟體。 這些只是工作流帶來的紅利。 還記得之前告訴過你關於容器的“出生與死亡”嗎?這個迴圈稱之為水平擴充套件(horizontal scaling),當應用程式面臨的流量超過當前資源可以處理的流量時,這些額外的容器就會被啟動起來,然後在流量消失後這些容器也會被終止。 當你在大規模運營時,整個部署自動化過程變得至關重要。 現在你可能在想,“哇!這聽起來像是一個龐大的工程!” 你猜對了,但有個好訊息,容器編排系統能為你完成所有這些繁重的工作。 雖然你有一些容器編排系統的選擇,例如Docker Swarm,Apache Mesos,但是市面上沒有任何一款能有Kubernetes這麼流行,究其原因有以下。 Kubernetes是一個開源工具,允許我們利用內部部署,混合或公共雲基礎架構,使得可以隨心所欲地移動工作負載。它提供安全,網路和儲存服務,並且可以一次管理多個叢集。 此外,它還可以自動執行許多在過去你必須手動執行的過程。例如: 控制容器執行在哪個伺服器上 輕鬆快速地擴充套件資源 當應用程式出現問題能自動進行回滾 計算容器的“最佳位置”以實時最佳化容器均衡擴充套件資源和應用程式 聽起來很酷對吧? 最終,Kubernetes可以更有效地使用硬體,最大限度地利用資源並節省資金。 但這就是事情變得棘手的地方。 你清楚當你使用類似Kubernetes這樣的容器編排工具時,你可以在YAML檔案中描述應用程式的配置。 在這個配置檔案中,你可以告訴Kubernetes如何工作,例如收集容器映象,如何在容器之間建立網路,如何掛載儲存捲以及將容器日誌安放在何處。 容器被部署到主機上,通常以複製組的形式存在。當需要將新容器部署到叢集中時,Kubernetes會排程部署並根據選擇的預定義約束(如CPU或記憶體可用性)查詢最合適的主機來排程容器。 基本上,一旦容器在主機上執行,Kubernetes將根據你在容器的Dockerfile中書寫的定義規範來管理其生命週期。 這意味著Kubernetes會為你自動執行所有這些任務,但它怎麼做完全是基於你做為開發人員所設定的配置。 雖然你可能是一名神槍手(工程師),但你可能無法確切知道在部署的第一個月內將會有多少流量,或者是應用程式表現如何。 這就是為什麼,特別是對於前幾個月,監控Kubernetes叢集非常重要。 現在為桌面準備的有一些非常好的開源監控工具。 例如,Prometheus包含一個功能強大且靈活的查詢語言——PromQL,它允許你收集Kubernetes叢集併在時間序列資料庫中記錄這些富含洞察力的實時指標。 當你將Prometheus與Grafana(一種資料視覺化工具)配合使用,它會將指標精美地展示在容易看懂的圖表中。 Prometheus和Grafana一起為你的Kubernetes叢集提供強大的資料視覺化和監控功能。 但這些工具僅適用於桌面。 這意味著在第一個月左右,當你還在微調並瞭解叢集的行為表現或應用程式面臨多少流量時,你就被拴在辦公桌上了。 事實上,直到最近,當你在旅途中時,還沒有什麼出色的移動解決方案可以用於管理叢集的指標。 幸運的是,如果你在Kubernetes叢集上執行Prometheus/Grafana監控棧,現在有一個名為Aetos的移動應用程式,可直接透過手機監控Kubernetes叢集的執行狀況和效能。 而且這個應用非常容易使用,只需將你的Grafana URL以及API金鑰配置到應用程式中,Aetos就會給你容易讀懂的圖表讓你實時檢視資料。 當前該應用程式使用一體化可滾動檢視,提供了CPU使用率,記憶體使用率,網路飽和度和系統飽和度的指標。 這些結果顯示在幾個不同的圖表上,讓你可以即時瞭解效能,如需遷移也僅需手指滑動即可。 此外,它是使用開源技術棧打造的,因此無需擔心售價問題。 不必說,它有它的好處。 但無論你如何監控你的叢集,如果你有一個尚未容器化的遺留程式碼庫,你可能需要開始思考如何實現它。畢竟,容器化才是未來的發展方向。 此外,涉及到殺死那些已到達其生命週期末期的容器,你會發現,讓Kubernetes為你做這些骯髒的工作會更容易。除非……你本身就是心狠手辣無情的怪物 😀 原文連結:https://itnext.io/murder-on-the-kubernetes-express-the-life-and-death-of-a-docker-container-d7aec13f8188 已同步到看一看 你的朋友會在“發現-看一看”看到你點選“在看”的內容 取消 傳送 我知道了 已取消,想法已同步刪除 知道了 已同步到看一看寫下你的想法 最多200字,當前共字 傳送 已傳送 朋友將在看一看看到 確定 寫下你的想法… 取消 釋出到看一看 確定 </div> <p><span class=”like_comment_msg” id=”js_b_like_comment_msg” style=”visibility: hidden;”>最多200字,當前共<span id=”js_b_like_current_cnt”/>字</span> </div> </div> <div class=”like_comment_primary_mask” id=”js_mask_2″/> </div> <div id=”js_loading” style=” display: none;”> <div class=”weui-mask_transparent”/> <div class=”weui-toast”> <i class=”weui-loading weui-icon_toast”/></p> <p class=”weui-toast__content”>傳送中</p> </div> </div> <div id=”js_fail” style=”display:none”> <div class=”weui-mask”/> <div class=”weui-dialog”> <div class=”weui-dialog__bd”> 網路異常,請稍後重試 </div> <div class=”weui-dialog__ft”> <a class=”weui-dialog__btn weui-dialog__btn_primary” href=”javascript:;” id=”js_fail_inform”>知道了</a> </div> </div> </div> <div class=”weui-desktop-popover weui-desktop-popover_pos-up-center weui-desktop-popover_img-text” id=”js_pc_weapp_code” style=”display: none;”> <div class=”weui-desktop-popover__content”> <div class=”weui-desktop-popover__desc”> <img id=”js_pc_weapp_code_img”/><br /> 微信掃一掃<br/>使用小程式<span id=”js_pc_weapp_code_des”/> </div> </div> </div> <div id=”js_minipro_dialog” style=”display:none;”> <div class=”weui-mask”/> <div class=”weui-dialog”> <div class=”weui-dialog__bd”>即將開啟”<span id=”js_minipro_dialog_name”/>”小程式</div> <div class=”weui-dialog__ft”> <a class=”weui-dialog__btn weui-dialog__btn_default” href=”javascript:void(0);” id=”js_minipro_dialog_cancel”>取消</a><br /> <a class=”weui-dialog__btn weui-dialog__btn_primary” href=”javascript:void(0);” id=”js_minipro_dialog_ok”>開啟</a> </div> </div> </div> </div>