基於Kubernetes 構建.NET Core 的技術體系

来源:https://www.cnblogs.com/cxt618/archive/2019/04/07/10664515.html
-Advertisement-
Play Games

轉自:https://mp.weixin.qq.com/s/iwtdISME4VotLgnuAhtflQ 很多公司技術支持崗位的工作,如配置功能變數名稱,部署環境,修改複位配置,服務重啟,擴容縮容,梳理和完善監控,根據開發的需要查找日誌等工作,需要和開發進行大量的溝通,如什麼是外網功能變數名稱,什麼是內網功能變數名稱、A ...


轉自:https://mp.weixin.qq.com/s/iwtdISME4VotLgnuAhtflQ

很多公司技術支持崗位的工作,如配置功能變數名稱,部署環境,修改複位配置,服務重啟,擴容縮容,梳理和完善監控,根據開發的需要查找日誌等工作,需要和開發進行大量的溝通,如什麼是外網功能變數名稱,什麼是內網功能變數名稱、A name、C name,防火牆規則該如何設定,操作系統等基礎環境需要什麼依賴。因為很多研發不瞭解運維的術語和知識點,導致溝通困難,效率很低。而且這樣的需求還很多,把運維壓的喘不過氣,占用了幾乎所有的時間,但是開發的需求可能還是遲遲不能滿足。

這樣的公司可能遇到了以下問題:

  • 系統架構過於陳舊,性能、可靠性無法滿足現有的需求;

  • 原有IT架構不靈活,業務模塊新增或變更帶來巨大成本壓力;

  • 系統功能繁雜,結構紊亂,定製的代碼與系統耦合性極高;

  • 服務種類繁多,各種技術棧橫行;

  • 人員流動交接不充分,新接手的團隊對部署環境不瞭解,只能做周邊的修補,不敢遷移 。


如何才能解決?答案是流程化、標準化、自動化、平臺化。

流程化

即主動梳理運維工作任務,形成標準化的操作流程,尤其是針對需要多人協作完成的任務,比如應用的發佈部署,把流程固化到流程平臺系統中,保證每個人執行都能按照流程嚴格執行,不會有哪些環節遺漏,而且當前的流程狀態對所有人都可見,能清晰的看到誰正在處理,處理人也會更主動儘快的完成該任務。

標準化

從架構角度按照應用類別制定應用的部署標準,比如Web類型的應用,服務化的應用(我們內部用的.NET Core),或者是比較新的微服務的應用(.NET Core等),部署腳本和工具平臺按照約定好的規範進行設計開發(基於Kubernetes),減少了因為應用種類繁多導致工具和平臺的複雜。

自動化

很多公司早期寫了非常多的腳本,任務執行機到要執行任務的伺服器之間通過SSH免密鑰認證,再根據需要批量執行命令。隨著伺服器規模和應用數量的擴張,很快腳本執行的方式無法滿足業務發展,難以理解,同一個類型的任務多個腳本並存,存在誤操作,缺乏清晰的操作歷史記錄和回滾機制,即使後續替換瞭如Puppet,Saltstack,Ansible這樣的配置管理工具,但根本問題並沒有解決。

平臺化

平臺化一定要在前面三條的基礎上進行建設,如果沒有清晰的流程,明確的標準,平臺建設起來也只是自動化工具的集成,解決不了公司核心問題。

以下說的平臺化內容主要是PaaS平臺化,即主要從應用和中間件的角度,這裡不討論IaaS的內容。

PasS平臺化將問題的關註點從基礎資源上升到了應用層面,目標是提供一個幫助開發人員運行、管理應用的平臺,讓使用者更關註運行的代碼(業務邏輯)。

PaaS能解決的問題:

  • 應用聚合:如開發需要一個Redis,直接啟動一個Redis容器即可

  • 服務發現、快速伸縮、狀態管理等

  • 服務監控、恢復、容災

  • 安全管控:不管什麼平臺,安全都非常重要,例如A應用可以訪問B,B不允許訪問A以及安全審計等。

  • 快速部署。

隨著Docker容器技術的出現,讓我們有了更合適的工具建設PaaS平臺,具備了基於應用構建服務的能力。 在Docker容器調度框架上,我們自然選擇了Kubernetes平臺。Kubernetes具有資源調度、服務發現、服務編排、資源邏輯隔離、服務自愈、安全配置管理、Job任務支持、自動回滾、內部功能變數名稱服務、健康檢查、有狀態支持、運行監控/日誌、擴容縮容、負載均衡、灰度升級、容災恢復、應用HA等。Kubernetes的核心是如何解決自動部署,擴展和管理容器化(containerized)應用程式。

下圖是一張最小化的PaaS 架構圖:

 

  1. 最上面的Ingress服務跟傳統的負載均衡器的功能類似,提供請求分發的功能,分為兩類: 對外提供API服務的API網關以及對外提供服務的站點,對外的API網關採用Ocelot 進行開發,Ocelot完成了對Kubernetes的集成工作,這個功能已經在我們的平臺上工作一段時間了,上個月把代碼合併進入Ocelot主幹,已經可以通過Nuget包下載,具體參見 kubernetes 客戶端KubeClient使用及常用api。

  2. Service相當於後端Pod的一個代理伺服器,Service需要通過Ingress服務才能被外部Client訪問, Service 提供了服務的註冊和服務發現。

  3. Pod則相當於我們傳統的一個服務。

  4. 最小化PaaS平臺還用到了DNS組件,在內部服務運行起來之後,我們會通過DNS組件分配一個內部功能變數名稱供訪問時使用。

Kubernetes 選用騰訊雲 TKE ,TKE 服務在集群內預設啟用了基於騰訊雲負載均衡器實現的 l7-lb-controller,支持 HTTP、HTTPS,同時也支持 nginx-ingress 類型,可以根據業務需要選擇不同的 Ingress 類型。

平臺關鍵能力說明

  • 應用持續部署,平臺實現快速、可視化自動部署功能。支持對應用的快速、可視化部署。用戶僅需在界面中選擇相應的鏡像和組件,並填寫簡單的配置信息,點擊部署按鈕,即可完成整個應用的安裝或者升級。

  • 應用彈性伸縮,構建具有需求預測和容器按需供給能力的彈性伸縮子系統,具有基於應用的負載和資源情況進行彈性伸縮能力,以應對互聯網用戶高併發的特點,應對流量衝擊。其中,包括容器彈性伸縮、物理機彈性伸縮功能。

  • 容器和組件的統一管理,從整體應用的角度出發,平臺不僅管理鏡像和容器,而是將一個應用涉及的所有組件均做了統一管理,通過對系統相關組件和容器統一管理,平臺將可以實現系統的全局統一部署、配置、升級/回滾、監控、故障處理等功能。

  • 高可靠性,容器的故障恢復,當伺服器宕機時,平臺系統會自動在其它伺服器上重新啟動容器併為其分配資源,從而達到秒級啟動,恢復業務。保障業務不掉線,高可靠運行;

  • 應用Docker化封裝,系統支持如下幾類常見應用:.NET Core、Jexus、Nginx、Redis、Mongodb等。

PaaS平臺功能組件

具體實施時,主要有幾個基礎組件需要開發:

  • 鏡像管理,實際運行的應用鏡像由 “基礎中間件鏡像”+“應用包”+“配置” 自動構建,藉助於Visual Studio 2017/2019以及Visual Studio Code,以及微軟開源的Helm、Draft,通過標準化內部培訓,讓開發人員快速理解鏡像概念和製作鏡像以及開發流程;

  • DNS管理,定製化公司內部使用的DNS管理平臺,對公司的DNS進行統一管理;

  • 服務管理,需要定製化一套Kubernetes的Deployment模板,從Ingress到Service再到RC都定義在這套模板裡面,方便對容器進行擴容、縮容、刪除操作;

  • 服務內Pod管理,屬於Kubernetes自有範疇,查看Service內的Pod運行情況、Pod日誌輸出等功能;

  • 日誌管理,將日誌輸出到公司的日誌平臺(如ELK平臺),對接研發人員排查問題、數據埋點使用;

  • 監控管理,參考方案:cAdvisor + InfluxDB + Grafana/ Heapster + Grafana/Prometheus/Zabbix:https://www.cnblogs.com/Cherry-Linux/p/9144650.html。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文將主要講解 J.U.C 中的 Future 框架,並分析結合源碼分析其內部結構邏輯; 一、Future 框架概述 JDK 中的 Future 框架實際就是 Future 模式的實現,通常情況下我們會配合線程池使用,但也可以單獨使用;下麵我們就單獨使用簡單舉例; 1. 應用實例 列印: 如上面代碼 ...
  • 前段時間有個需求:將生產環境的部分數據轉移到測試伺服器進行測試。由於只需要導入特定賬號的數據,我就想著將寫個腳本,將數據組裝成sql語句導出為sql文件,然後轉移到測試伺服器,導入到MySQL中。想象是美好的,過程是痛苦的,下麵總結下幾點。 PHP腳本的處理 1、腳本的思路就是:查詢特定賬號數據,組 ...
  • 文件上傳 使用commons-fileupload-1.4控制項及依賴的commons-io-2.6控制項 jsp頁面中內容 <form action="../servlet/FileUpdate" method="post" enctype="multipart/form-data"> <div al ...
  • 1.安裝git 軟體(下一步直到完成) 2.碼雲註冊(保存代碼) 3.創建代碼托管倉庫 4.創建文件夾 5.寫東西並提交到碼雲 1.在某個文件夾下寫東西 2.寫完之後在此文件夾下滑鼠右鍵,並選擇[git bash here] 6. 在'黑框'里輸入命令 - git init :用於做初始化, 其實就 ...
  • 在阿裡雲伺服器運維過程中,有時候可能會忘記了伺服器的實例密碼,那忘記了阿裡雲Windows伺服器或者Centos伺服器的實例密碼怎麼辦?其實阿裡雲的ECS後臺管理頁面提供了重置實例密碼的功能,運維人員在瀏覽器Web端登錄阿裡雲ECS管理後臺,而後進入實例管理頁面進行實例密碼的重置,重置完實例密碼後重 ...
  • 起因 寫這一篇的起因是想要通過新增預設參數來代替以前的方法,結果發現儘管在調用時寫起來一樣,實際上也沒有被當做同樣的方法,兩個方法大致如下: 上述兩種方法都可以通過 TestMethod("1"); 調用,所以最開始誤以為兩個方法的調用是等價的,但是實際使用中通過DLL引用的方式會提示找不到方法,這 ...
  • 最近想給自己的代辦清單任務微信小程式想加個語音識別識別功能,廢話不多說,直接說重點,語音識別使用的是百度語音識別api,因為微信小程式的錄音輸入文件目前只能是mp3或aac 但是百度語音識別不支持這兩種(百度api介面文檔上有說明),所以需要把音頻格式轉換一下,我這邊使用的是Alvas.Audio. ...
  • Docker的volume捲 為了能持久話保存和共用容器的數據。 使用docker volume捲的兩種方式 1:數據捲 2:數據捲容器 1:數據捲 數據捲:數據捲會繞過docker 的ufs 直接寫在物理設備上,對數據捲的操作可以及時生效,並且數據捲是可以進行共用重用的,為一個或者多個容器提供訪問 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...