Manjusaka

Manjusaka

關於 Kubernetes 和容器化的一些隨想

這段時間在不少群裡爭論過關於 Kubernetes 和容器化的一些事,幹脆總結下一些碎碎念作為一個概括吧。本文僅代表個人立場,不代表商業觀點

容器化#

目前很主流的一個觀點,是能上容器盡可能上容器,說實話這個想法實際上是有一定的合理性的,去 review 這個想法,我們需要去看一下容器這個東西,給我們帶來了什麼樣的改變

容器首先毫無疑問,會給我們帶來非常多的好處:

  1. 真正意義上讓開發與生產環境保持一致是一種非常方便的事,換句話說,開發說的 “這個服務在我本地沒啥問題” 是一句有用的話了
  2. 讓部署一些服務變得更為方便,無論是分發,還是部署,
  3. 能做到一定程度上的資源隔離與分配

那麼,看起來我們是不是可以無腦用容器?不,不是,我們需要再來 Review 一下,容器化後我們所要面臨的一些弊端:

  1. 容器安全性問題,目前最主流的容器實現(此處點名 Docker)本質上而言還是基於 CGroups + NS 來進行資源與進程隔離。那麼其安全性將會是一個非常值得考量的問題。毕竟 Docker 越權與逃逸漏洞年年有,年年新。那麼這意味著我們是需要去有一個系統的機制去規範我們容器的使用,來保證相關的越權點能被把控在一個可控的範圍內。而另一個方向是鏡像安全問題,大家都是面向百度 / CSDN/Google/Stackoverflow 編 (fu) 程 (zhi) 選手,那麼勢必會出現一個情況,當我們遇到一個問題,搜索一番,直接複製點 Dockerfile 下來,這個時候,將會存在很大的風險點,毕竟誰也不知道 base image 里加了啥料不是?
  2. 容器的網絡問題。當我們啟動若干個鏡像後,那麼容器之間的網絡互通怎麼處理?而大家生產環境,肯定不止一個機器那麼少,那麼跨主機的情況下,怎麼樣去進行容器間的通信,同時保證網絡的穩定性?
  3. 容器的調度與運維的問題,當我一個機器高負載的時候,怎麼樣去將該機器上的一些容器調度到其餘的機器上?而怎麼樣去探知一個容器是否存活?如果一個容器 crash 了,怎麼樣重新拉起?
  4. 容器具體的細節問題,比如鏡像怎麼樣構建與打包?怎麼樣上傳?乃至說怎麼樣去排查一些 corner case 的問題?

我們做一個業務決策的時候,我們肯定不會是因為某個技術夠先進,夠舒服,而是需要去衡量這個業務決策的 ROI,同時在利弊之間做一個 Trade-Off,用容器化這件事來說吧,我們來思考下我們可能遷移容器常見的幾個誤區:

  1. 我們想對利用容器做資源隔離!那麼問題來了,用 systemd + cgroup 這樣簡便的方法做和容器之間有什麼區別?是容器的成本更低?
  2. 我們想践行 Devops 所以想上容器化!實際上 Devops 和容器化關聯並不算大,它更多的是一種方法論,一個團隊之間內部協作的一套方法論。不精確的來講,是通過自動化,流程改進,SOP 引入等手段,將一套服務的分發與運維更為簡便化。換句話說,在我們去践行 Devops 這一套方法論的時候,實際上不是一個技術問題,而是一個制度問題(講個笑話,Devops 的開發不需要寫腳本)。在其中,無論是我們傳統的 Ansible 等運維手段,還是一些自動化測試的方法與框架,都可以成為 Devops 的一部分。那麼這裡還是一個問題,我們為什麼要用容器?是因為傳統的工具践行 Devops 的 cost 遠高於用容器化的?

從這兩個例子大家能看出來,當我們去做容器化這件事的時候,一定要思考的問題是,容器化是真正解決了我們什麼痛點,還是只是因為它看起來夠先進,夠屌,能為我簡歷背書?

Kubernetes#

前面聊到容器化的幾個問題,促成了以 Kubernetes 為代表的容器編排體系的誕生。大家在想,哇,既然解決了這個問題,那麼我們再來聊聊這個問題

首先我已經忽略掉自建 Kubernetes 集群的場景了,因為那不是一般人能 Hold 住的。那麼我們來看一下,依托公有雲使用的情況吧,以阿里雲為例,點開頁面,然後我們見到這樣張圖

images

images

好了,提問:

  1. VPC 是什麼?
  2. Kubernetes 1.16.9 和 1.14.8 有什麼區別
  3. Docker 19.03.5 和阿里雲安全沙箱 1.1.0 是什麼,有什麼區別
  4. 專有網絡是什麼?
  5. 虛擬交換機是什麼?
  6. 網絡插件是什麼?Flannel 和 Terway 又是什麼?有什麼區別?當你翻了翻文檔,然後文檔告訴你,Terway 是阿里雲基於 Calico 魔改的 CNI 插件。那麼 CNI 插件是什麼?Calico 是什麼?
  7. Pod CIDR 是什麼怎麼設?
  8. Service CIDR 是什麼怎麼設?
  9. SNAT 是什麼怎麼設?
  10. 安全組怎麼配置?
  11. Kube-Proxy 是什麼?iptables 和 IPVS 有什麼區別?怎麼選?

是不是和你想象的一鍵點點點有很大區別?你可能說,我們小公司不管這些,暴力出奇跡,一鍵全默認。。。。emmmm,那上什麼 Kubernetes 啊。。好了,假設你上了後,來,我們繼續算賬

  1. 你得有個鏡像倉庫吧,不貴,中國區基礎版 780 一個月
  2. 你集群內的服務需要暴露出去用吧?行叭,買個最低規格的 SLB,簡約型,每個月 200
  3. 好了,你每個月日誌得花錢吧?假設你每個月 20G 日誌,不多吧?行,39.1
  4. 你集群監控要不要?好,買,每天 50w 條日誌上報吧?行,不貴,975 一個月

算一下,一個集群吧,(780+200+39.1+975)*12=23292.2 不算集群基礎的 ENI,ECS 等費用,美滋滋

而且會衍生很多其餘的問題,具體的話,大家可以去 Kubernetes 的 Issue 區看一下盛況

總結#

寫這個文章,並不為吐槽或者噴人,只是想表明一個觀點,借用我比較喜歡的一篇文章中台,我信了你的邪 | 深氪 中的一句話

到了去年底,阿里巴巴董事長兼 CEO 張勇在湖畔大學分享時也說:如果一個企業奔著中台做中台,就是死。

逍遙子是不是說過這句話待考,但我很贊同,同時我認為一個企業奔著技術先進性去搞技術,就是死 ,毕竟技術是需要為業務服務的,而技術的進步很大程度上依賴業務的沉澱與需求

好了,這應該是我寫過最水的文章了,先這樣吧。繼續搬磚了

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。