天天看點

K8S現存問題(三)

七.容器的管理

傳統服務可以通過鍵盤和顯示器本地管理,OpenSSH 遠端管理,通過配置還能使用序列槽。

容器的管理讓你抓狂 docker exec 和 kubectl exec 進入後與傳統Linux差異非常大,這是鏡像制作者造成了。

  • 有些鏡像沒有初始化 shell 隻有一個 $ 符号
  • 沒有彩色顯示
  • 可能不支援 UTF-8,中文亂碼
  • 可能不是标準 ANSI/XTerm 終端
  • 鍵盤定義五花八門,可能不是美式104鍵盤
  • 國家和時區并不是東八區,上海
  • HOME 目錄也是不是 /root
  • 想檢視端口情況,發現 netstat 和 ss 指令沒有。
  • 想檢視IP位址,發現 ifconfig, ip 指令沒有。
  • 想測試IP位址是否暢通,發現 ping, traceroute 沒有。
  • 想測試URL,發現 curl , wget 沒有。
  • 有些鏡像 dnf,yum,apk,apt 可以使用,有些鏡像把包管理也給閹割了,你想安裝上述工具都安裝不了。

卧槽!!! 一萬匹草泥馬

然後就自己用 Dockerfile 編譯,整出200MB的鏡像,卧槽這麼大。

八.容器與安全

很多容器的鏡像中是不包含 iptables 的,是以無法做顆粒度很細的容器内部網絡安全設定。即使你制作的鏡像帶有iptables ,多數容器的側咯,IP位址和端口是随機變化的。

綁定IP位址又帶了容器的複雜性。

一旦攻入一個容器,進入容器後,容器與容器間基本是暢通無阻。

在容器中藏一個後門比實體機更容易,如上文所說很多容器中沒有調試相關指令,限制了你排查後門的難度。是以Dockerfile 制作鏡像,最好使用官方鏡像衍生出你的鏡像。

九.容器與監控

談到監控,跳不開 prometheus(普羅米修斯),它并不能覆寫到所有監控。

我曾經寫過一篇文章《監控的藝術》網上可以搜到。

容器與CI/CD

在DevOps場景中,使用 docker 或 kubernetes 做 CI/CD 是很扯淡的。

當 git 産生送出後,gitlab/jenkins 啟動容器,下載下傳代碼,編譯,打包,測試,産生建構物,編譯 Dockerfile ,上傳 docker 鏡像到 registry,最後部署到容器執行。

卧槽!!!速度能急死你。

于是乎,我們做了 Cache。 不用每次都 pull 鏡像,緩存 Maven 的 .m2 庫,不再清理代碼(mvn clean)提速不少,測試環境湊合用吧。 注意不mvn clean 有時會編譯出錯

至于生産環境,我就不說了,有多少人真用CD部署生産環境。