推薦序
「那Docker 當機了怎麼辦?」
從2014 年在中華電信上Docker 課程後,這是每一次在企業或大專院校上課時,都會遇到的問題。
人類本來就是活在疊床架屋的邏輯中,一個東西基於另一個東西基於另一個東西⋯⋯成為一個Stack,這整個Stack 就是整個服務。這種站在巨人肩膀的方式雖然可以讓你專心於最上層的服務,但下面的任何一層毀了,什麼就都毀了。
Docker 雖然打破了這個常規,將不同的服務放入不同的容器中。試想你可以把資料放在一個Container,DB 服務放在另一個Container,nginx 再放一個,網路拓樸再放一個,整個完整網頁系統分佈在不同的容器中,感覺比蓋高樓似乎安全許多了。
「那Docker 當機了怎麼辦?」
那就完了。
Docker 一出來就被質疑,雖然他的優點大於缺點,但在實際應用中,這真的是最常碰到的問題。筆者架設一個網站系統,異地備援十分重要,因此安裝了sshfs,但sshfs 常常會當機,因此需要使用upstart 來監控,只是當sshfs 一當,不知為何apache 的Docker 也會跟著死,sshfs 起來,Docker 沒起來,整個網站又不行了。
和我一樣很多人也想用systemd 之類的服務來監控docker,但這會碰到另一個問題,就是當硬體資源不夠支撐Docker 時,重新啟動docker 也無濟於事,看來把Docker 丟到cluster 中才是正解。
只要一碰到Cluster,那就是設定、網路及管理的噩夢,尤其是Docker 是一個這麼底層的服務。我們需要一個資料庫來存放Docker 的metadata,我們也需要一個發現服務來知道誰活著,誰死了,誰的硬體資源快沒了,誰的硬體資源還很多。當然如果有一個能管理每一台硬體的orchestrating 服務那就更好了。
在Docker 叢集還沒流行之前,大家試著用fig 來做這事,用etcd 來做這事,管理很熟的人用chef 做這事( 我愛用Ansible),只是雜七雜八的拼湊,不要說穩定度了,就連搭建起這樣的環境都有大困難,那不如真的Docker 當機時,從床上爬起來用手動再啟動吧( 筆者曾幾何時也過過這種生活)。
Docker Swarm 的出現解決了大部分的問題,如果你搭配了Docker Machine就可以跨硬體,再搭配Docker Composer 就可以跨容器並且自動化,真的好像是Vagrant 的感覺了。只不過,這種設定,通常只是讓你在區域網路裏自嗨罷了,到了S3,GCE 或Linknode 時怎麼辦?你上不了雲端。
說了這麼多廢話,答案明顯就是這本書中的Kubernetes 了。書名是「Google御用」,自然有品質保證。筆者在2 年前開始接觸之後,就回不去了。推薦序只點出問題,答案就在這本書裏,快點開始看吧!
胡嘉璽