-
對接Jenkins進行編譯打包和版本標記
-
把指定版本的jar包,配置檔案,啟動指令碼一起釋出到指定的機器上裸機執行
-
透過對Java行程的管理來完成重啟,關閉應用等運維操作
-
Java實體部署所需資源沒有清晰的統計和系統層面的隔離,僅僅依賴於啟動指令碼中的JVM引數來進行記憶體的約束,新增實體或新上專案時往往需要運維人員靠“感覺”指定部署的機器,沒有有效地分配機器資源,專案之間資源爭用會導致效能問題。
-
雖然大多數應用依賴的環境只有JDK 7和JDK 8,但一些JDK的小版本差異,以及一些自研發Java agent的使用,使得簡單地指定JAVA_HOME目錄的方式很難有效地管理執行環境。
-
開發人員的伺服器許可權需要回收。一個伺服器上可能執行多個不同部門的專案,相關開發人員誤操作可能會導致其他專案被影響。
-
比Flannel等在資料包上再封裝一層通訊協議(常見是VXLAN)的網路實現效能上更優秀。
-
比同樣是基於BGP和三層路由的Calico來說更輕量簡單,易於部署。
-
Macvlan技術會使宿主機網路和Pod網路隔離,不太符合我們的需求。
-
在開啟Service Proxy樣式後可以取代預設元件kube-proxy,Service Proxy的實現是IPVS,在效能上和負載均衡策略上靈活度更高(在Kubernetes 1.8後kube-proxy也有IPVS的實現支援,但到現在還是實驗性質)。
-
專案比較新,現在最新的還是v0.2.5,使用過程=踩坑。
-
節點間網路必須二層可達,不像Calico提供了IPIP的解決方案。
-
依賴於iptables,網路要求高的場景Netfilter本身會成為瓶頸。
-
對於Pod IP的分配,Pod之間網路的ACL實現較為簡單,無法應付安全要求高的場景。
-
Kubernetes叢集內的Pod和叢集外業務的通訊問題。為了風險可控,實體部署和容器部署之間將會存在很長一段時間的並行階段,應用方主要使用Dubbo做微服務治理,Kubernetes叢集內的Pod和叢集外業務的通訊就成為問題了。kube-router是基於三層Routing實現,所以透過上層路由器指定Pod IP段的靜態路由,或對接BGP動態交換路由表來解決問題。
-
JVM堆記憶體配置問題導致OOMKill的問題。因為JVM的記憶體不止有Xmx配置的堆記憶體,還有Metaspace或PermSize,以及某些如Netty等框架還有堆外記憶體,把Xmx的配置等同於容器記憶體配置幾乎是一定會出現OOMKiil,所以必須放寬容器記憶體限制。以我們的經驗來說,容器記憶體比Xmx多20%左右一般可以解決問題,但也有部分例外,需要額外配置。
-
Pod啟動失敗難以排查的問題。有一些Pod一啟動就失敗,輸出的日誌難以分析問題,我們構建和部署的描述檔案都是運維平臺動態生成的,很難使用傳統docker run標的映象的方式進行除錯,所以我們在運維平臺上提供了debug容器的功能,新建一個和原有deployment一樣的debug部署,僅去掉健康檢查相關的引數和修改command引數使pod執行起來,業務開發方即可透過webshell控制檯進入Pod除錯應用。
-
開發經常需要使用的一些除錯工具比如Vim,Arthas之類的,現在我們是打包到基礎映象中提供,但這樣不僅增加了映象的體積,而且需要重新打包新的映象。目前看到比較好的解決方案是起一個除錯用的容器並加到指定Pod的namespace中,但還需二次開發整合到webshell中。
-
跨機房Kubernetes叢集排程。當現有資源無法滿足峰值需求時,藉助公有雲來擴充套件系統是比較好的選擇,我們希望藉助Kubernetes多叢集排程功能做到快速擴容到公有雲上。
-
峰值流量的自動擴容和縮容,Kubernetes提供的HPA策略較為簡單,我們希望能從更多的維度來計算擴容和縮容的數量,做到精準的控制。
朋友會在“發現-看一看”看到你“在看”的內容