Ben Searsweb
Kubernetes是時下最流行的管理和編排工具,它提供了一個配置驅動的框架,讓咱們能夠經過定義和操做得到整個網絡、磁盤和應用,並以可伸縮且易於管理的方式進行。docker
若是咱們尚未完成應用容器化,那麼把應用轉移到Kubernetes上會是一件高強度的工做,本文目的則是介紹應用與Kubernetes集成的方法。數據庫
容器是能夠獨立運行的基本操做單元,不一樣於傳統虛擬機依賴模擬操做系統,容器利用各類內核特性來提供與主機隔離的環境。安全
對於有經驗的技術人員來講,整個容器化過程不算複雜——使用docker,定義一個包含安裝步驟和配置(下載包、依賴等等)的dockerfile,最後構建一個可讓開發人員使用的鏡像便可。網絡
在咱們把應用遷移到Kubernetes以前,須要確認向最終用戶交付的方式。架構
傳統web應用的多租戶結構,是全部用戶共享單個數據庫實例和應用實例,這種形式在Kubernetes中工做沒什麼問題,但咱們建議考慮把應用改形成多實例架構,以充分利用Kubernetes和容器化應用的優點特性。app
採用多實例架構的好處包括:框架
穩定性——單點故障,不影響其餘實例;運維
可伸縮——經過多實例架構,擴展也就是增長計算資源的事;而對於多租戶架構,須要建立集羣應用體系結構的部署可能會有些麻煩;分佈式
安全性——當您使用單個數據庫時,全部數據都在一塊兒,一旦發生安全漏洞,全部用戶都會收到威脅,而採用多數據中心,只會有一個用戶的數據面臨風險;
爲了得到成本效益,咱們須要肯定運行單個應用實例所需的CPU、內存和存儲量。
咱們能夠經過設置限制,精確調整Kubernetes節點須要多少空間、確保節點過載或者不可用等等。
這須要咱們反覆的嘗試和驗證,也有一些工具能夠替咱們達成這一目的。
在肯定資源分配以後,咱們能夠計算Kubernetes節點的最佳資源大小;
將每一個實例須要的內存或CPU乘以100(節點能夠容納的最大Pod數),咱們能夠大概估計你的節點應該有多少內存和CPU;
對應用程序進行壓力測試以確保它在滿節點時順利運行。
Kubernetes集羣運行起來,咱們會發現許多DevOps實踐水到渠成——
自動縮放Kubernetes節點
節點用滿時,一般須要配置更多的節點以便全部實力順暢運行,自動縮放的Kubernetes節點便派上了用場。
自動縮放應用程序
根據使用狀況,某些應用須要按比例縮放,Kubernetes使用可自動縮放部署的觸發器來實現,命令:
kubectl autoscale deployment myapp --cpu-percent = 50 --min = 1 --max = 10
如上,當CPU百分比超過50時,將設置myapp部署擴展到10個容器。
在用戶操做時自動配置實例
對於多實例架構,最終用戶在Kubernetes中部署應用程序,而爲了實現這一點,咱們應該考慮將應用與Kubernetes API集成,或者使用第三方解決方案來提供請求實例的入口。
經過用戶操做定義自定義主機名
最近愈來愈多的終端用戶將其域名附加到應用程序中,而Kubernetes提供了一些工具來使這個過程變得更加簡單,甚至到達自助服務的地步(用戶按下一個按鈕來設置域指向),咱們可使用Nginx Ingress等系統來完成此操做。
Kubernetes提出的一系列概念抽象,很是符合理想的分佈式調度系統。但大量高難度技術概念,同時也造成了一條陡峭的學習曲線,直接拉高了Kubernetes的使用門檻。
好雨雲開源PaaS Rainbond則將這些技術概念包裝成爲「Production-Ready」的應用,能夠做爲一個Kubernetes面板,開發者不須要特殊學習便可使用。
除此以外,Kubernetes自己是一個容器編排工具,並不提供管理流程,而Rainbond提供現成的管理流程,包括DevOps、自動化運維、微服務架構和應用市場等,能夠開箱即用。