不少公司技術支持崗位的工做,如配置域名,部署環境,修改復位配置,服務重啓,擴容縮容,梳理和完善監控,根據開發的須要查找日誌等工做,須要和開發進行大量的溝通,如什麼是外網域名,什麼是內網域名、A name、C name,防火牆規則該如何設定,操做系統等基礎環境須要什麼依賴。由於不少研發不瞭解運維的術語和知識點,致使溝通困難,效率很低。並且這樣的需求還不少,把運維壓的喘不過氣,佔用了幾乎全部的時間,可是開發的需求可能仍是遲遲不能知足。html
這樣的公司可能遇到了如下問題:nginx
如何才能解決?答案是流程化、標準化、自動化、平臺化。後端
即主動梳理運維工做任務,造成標準化的操做流程,尤爲是針對須要多人協做完成的任務,好比應用的發佈部署,把流程固化到流程平臺系統中,保證每一個人執行都能按照流程嚴格執行,不會有哪些環節遺漏,並且當前的流程狀態對全部人均可見,能清晰的看到誰正在處理,處理人也會更主動儘快的完成該任務。api
從架構角度按照應用類別制定應用的部署標準,好比Web類型的應用,服務化的應用(咱們內部用的.NET Core),或者是比較新的微服務的應用(.NET Core等),部署腳本和工具平臺按照約定好的規範進行設計開發(基於Kubernetes),減小了由於應用種類繁多致使工具和平臺的複雜。安全
不少公司早期寫了很是多的腳本,任務執行機到要執行任務的服務器之間經過SSH免密鑰認證,再根據須要批量執行命令。隨着服務器規模和應用數量的擴張,很快腳本執行的方式沒法知足業務發展,難以理解,同一個類型的任務多個腳本並存,存在誤操做,缺少清晰的操做歷史記錄和回滾機制,即便後續替換了如Puppet,Saltstack,Ansible這樣的配置管理工具,但根本問題並無解決。服務器
平臺化必定要在前面三條的基礎上進行建設,若是沒有清晰的流程,明確的標準,平臺建設起來也只是自動化工具的集成,解決不了公司核心問題。網絡
如下說的平臺化內容主要是PaaS平臺化,即主要從應用和中間件的角度,這裏不討論IaaS的內容。架構
PasS平臺化將問題的關注點從基礎資源上升到了應用層面,目標是提供一個幫助開發人員運行、管理應用的平臺,讓使用者更關注運行的代碼(業務邏輯)。
PaaS能解決的問題:併發
隨着Docker容器技術的出現,讓咱們有了更合適的工具建設PaaS平臺,具有了基於應用構建服務的能力。 在Docker容器調度框架上,咱們天然選擇了Kubernetes平臺。Kubernetes具備資源調度、服務發現、服務編排、資源邏輯隔離、服務自愈、安全配置管理、Job任務支持、自動回滾、內部域名服務、健康檢查、有狀態支持、運行監控/日誌、擴容縮容、負載均衡、灰度升級、容災恢復、應用HA等。Kubernetes的核心是如何解決自動部署,擴展和管理容器化(containerized)應用程序。負載均衡
下圖是一張最小化的PaaS 架構圖:
Kubernetes 選用騰訊雲 TKE ,TKE 服務在集羣內默認啓用了基於騰訊雲負載均衡器實現的 l7-lb-controller
,支持 HTTP、HTTPS,同時也支持 nginx-ingress 類型,能夠根據業務須要選擇不一樣的 Ingress 類型。
具體實施時,主要有幾個基礎組件須要開發:
雖然咱們屬於創業公司,咱們相信技術的力量,技術幫助咱們實現業務的持續健康發展,從發展的初期就規避不少公司的一些困境,一箇中小企業作成這樣後,平常運維的工做量便可大量減小,兩三我的就能完成平常的應用運維工做,有興趣地話能夠去挑戰一下。固然作完這些後,還只是一個小型的PaaS平臺,咱們基於騰訊雲的TKE 平臺構建這樣一個小型的PaaS平臺。若是是再複雜一點的PaaS平臺,應該還有哪些要繼續作的呢?環境管理:即一套平臺管理多套不一樣的Kubernetes集羣、安全管理、流程管理、計費管理等功能模塊。還有由於規模增長和更高的可靠性要求,對應的網絡,IO等各類優化。其實還有不少功能就不一一列舉了,能夠根據本身的實際狀況添加功能模塊,設計有本身公司特點的PaaS平臺。