Docker 和 Kubernetes 的源起


Web applications 由 monolithic 逐漸演進為 microservices, 使得個別的 microservices 可以各自 develop/deploy/update/scale, 而加快 iteration 以及方便 scale up.

為了方便 microservices 能夠無痛 develop/deploy 到各種不同的 computing nodes, container 技術 (Docker, rkt) 橫空出世, 透過 Linux Namespaces 讓每個 process 以為它跑在獨立的系統 (files, processes, network interfaces, hostname...), 透過 Linux Control Groups 限制每個 process 能夠使用的 resource (CPU, memory, network bandwidth...).

透過 container 技術, 可以達到 develop 的 OS 環境和 deploy 的 OS 環境是完全相同的, 因為 container image 包含了 application 需要的 libraries 和完整的 OS file system.

Container 可以達到和 VM 相同的 process isolation, 同時比 VM 更有效率地運用 resources, 因為每個 VM 需要運作一套 client OS, 而各個 client OS 運作在 host OS; 而 containers 可以同時運作在 host OS.

為了讓 microservices deploy 到各種不同/數量眾多/分散各地的 computing nodes (稱之為 cluster) 自動化, Google 開發了 Borg (後來演化為 Omega), 10 年後 Google 在 2014 年根據 Borg, Omega 的經驗開發並 open source 了 Kubernetes.

Kubernetes 由 master node 和 worker nodes 組成.

Master node 負責做 scheduling, 把 microservices dispatch 到各個 work nodes.

Kubernetes 實現了 infrastructure 相關的 services (service discovery, scaling, load-balancing, self-healing, leader election...), 於是 application developers 可以專心開發 features, 而不再需要耗費時間處理 infrastructure services.

延伸閱讀


[書籍] Kubernetes in Action, 作者: Marko Luksa