挑戰
全球最大的純線上雜貨零售商 Ocado 開發了 Ocado Smart Platform 來管理其自身營運,從網站到倉庫皆涵蓋在內,現在更將這項技術授權給其他零售商,例如 Kroger。為了為該平台建立首批倉庫,Ocado 從虛擬機器和 Puppet 基礎架構轉移到 Docker 容器,並使用 CoreOS 的 fleet 排程器在其基於 OpenStack 的裸機私有雲上佈建所有服務。隨著 Smart Platform 的成長,以及「fleet 即將終止生命週期」,平台工程師 Mike Bryant 說道:「我們開始尋找一個更完整的平台,將所有這些分散的基礎架構服務整合到一個統一的 API 中。」
解決方案
團隊決定將 fleet 遷移到 Ocado 私有雲上的 Kubernetes。Kubernetes 堆疊目前使用 kubeadm 進行啟動引導,CNI 與 Weave Net 進行網路連線,Prometheus Operator 進行監控,Fluentd 進行日誌記錄,以及 OpenTracing 進行分散式追蹤。Kubernetes 上的第一個應用程式,即倉庫中一項業務關鍵服務,於 2017 年夏季投入生產,大規模遷移則持續到 2018 年。數百名在 Smart Platform 上工作的 Ocado 工程師現在都在 Kubernetes 上進行部署。
影響
Bryant 表示,透過 Kubernetes,「從構思到實施再到部署的速度令人驚嘆。」「我現在看到功能從開發到生產只需一週時間。在過去,新的應用程式部署可能很容易超過一個月。」而且由於倉庫中不再有嚴格的部署窗口,部署頻率已從每週僅兩次增加到每週數十次。Ocado 也實現了成本節省,因為 Kubernetes 使團隊能夠更精細地分配資源。DevOps 團隊負責人 Kevin McCormack 表示:「我們對 Kubernetes 的資源分配/隔離功能更有信心,因此我們已能夠從大約 10 個 fleet 叢集遷移到一個 Kubernetes 叢集。」團隊還使用 Prometheus 和 Grafana 來視覺化資源分配,並將資料提供給開發人員。「Prometheus 提供的可見性提升意味著開發人員更清楚自己正在使用什麼以及他們的使用如何影響他人,尤其是在我們現在有一個共用叢集的情況下,」McCormack 說。「我估計我們在 Kubernetes 測試環境中託管相同的應用程式時,硬體資源使用量減少了約 15-25%。」
該公司開始開發 Ocado Smart Platform 來管理其自身營運,從網站到倉庫皆涵蓋在內,現在更將這項技術授權給世界各地的其他雜貨連鎖店,例如 Kroger。為了在平台上建立首批倉庫,Ocado 從虛擬機器和 Puppet 基礎架構轉移到 Docker 容器,並使用 CoreOS 的 fleet 排程器在其基於 OpenStack 的裸機私有雲上佈建所有服務。隨著 Smart Platform 的成長,以及「fleet 即將終止生命週期」,平台工程師 Mike Bryant 說道:「我們開始尋找一個更完整的平台,將所有這些分散的基礎架構服務整合到一個統一的 API 中。」
Bryant 已經將 Kubernetes 用於 Code for Life,這是一個兒童教育專案,是 Ocado 慈善部門的一部分。「我們真的很喜歡它,所以我們開始認真考慮將它用於我們的生產工作負載,」Bryant 說。管理 fleet 的團隊也研究了協調解決方案,並選定了 Kubernetes。「我們正在尋找一個被廣泛採用的平台,而那裡就是發展的動力所在,」DevOps 團隊負責人 Kevin McCormack 說。這兩條路徑匯聚了,「我們甚至沒有經歷任何概念驗證階段。Code for Life 的工作就達到了那個目的,」Bryant 說。
2016 年夏季,團隊開始將 fleet 遷移到 Ocado 私有雲上的 Kubernetes。Kubernetes 堆疊目前使用 kubeadm 進行啟動引導,CNI 與 Weave Net 進行網路連線,Prometheus Operator 進行監控,Fluentd 進行日誌記錄,以及 OpenTracing 進行分散式追蹤。
Kubernetes 上的第一個應用程式,即倉庫中一項業務關鍵服務,在一年後投入生產。一旦該應用程式順利運行,大規模遷移便持續到 2018 年。數百名在 Smart Platform 上工作的 Ocado 工程師現在都在 Kubernetes 上進行部署,而且該平台已在 Ocado 的倉庫中投入使用,每週管理數萬個訂單。在全負荷運作下,Ocado 在倫敦東南部埃里思的最新倉庫每週將交付超過 20 萬個訂單,使其成為全球最大的線上雜貨設施。
現在大約有 150 個微服務在 Kubernetes 上運行,其中許多服務都有多個實例。「我們不僅一次部署所有這些微服務。我們為一個倉庫部署所有這些微服務,然後它們又為下一個倉庫再次部署,如此反覆,」Bryant 說。
遷移到 Kubernetes 對 Ocado Technology 的許多人來說是令人大開眼界的。「在早期將平台投入我們的測試基礎架構時,技術架構師詢問在開啟加密的情況下,Weave Net 的網路效能如何,」Bryant 回憶道。「因此,我們找到了 iPerf 的 Docker 容器,編寫了一個守護程式集,並部署了它。片刻之後,我們已將整個東西部署到這個叢集。他對此印象非常深刻。」
事實上,其影響是深遠的。「在容器化之前,我們在倉庫中部署窗口相當嚴格,」Bryant 說。「轉向微服務後,我們已經能夠更頻繁地部署。我們已能夠在許多領域朝向持續交付邁進。在我們較舊的倉庫中,新的應用程式部署需要與堆疊不同層級的多個不同團隊溝通:從 VM 佈建到儲存,再到負載平衡器等等。Kubernetes 的統一 API 意味著這一切都在一個地方,而且這是用於核准和推出的單一流程。我現在看到功能從開發到生產只需一週時間。在過去,新的應用程式部署可能很容易超過一個月。」
部署頻率已從每週僅兩次增加到每週數十次。「透過 Kubernetes,我們的一些開發團隊已能夠在我們沒有注意到的情況下將其應用程式部署到新平台上的生產環境,」Bryant 說,「這意味著他們可以更快地完成他們需要做的事情,而我們的工作量也減少了。」
Ocado 也實現了成本節省,因為 Kubernetes 使團隊能夠更精細地分配資源。「這讓我們可以將許多部署從每個核心的 VM 部署縮減為僅佔核心的一小部分,」Bryant 說。McCormack 補充說:「我們對 Kubernetes 的資源分配/隔離功能更有信心,因此我們已能夠從大約 10 個 fleet 叢集遷移到一個 Kubernetes 叢集。這表示我們更善用硬體,因為如果我們為了應對節點故障而始終需要有兩個節點的額外容量可用,那麼我們只需要兩個額外節點,而不是 20 個。」
團隊還使用 Prometheus 和 Grafana 來視覺化資源分配,並將資料提供給開發人員。「Prometheus 提供的可見性提升意味著開發人員更清楚自己正在使用什麼以及他們的使用如何影響他人,尤其是在我們現在有一個共用叢集的情況下,」McCormack 說。「我估計我們在 Kubernetes 測試環境中託管相同的應用程式時,硬體資源使用量減少了約 15-25%。」
Bryant 表示,雲原生的更廣泛優勢之一是統一的 API。「我們有一種方法可以進行涵蓋我們需要做的各種事情的部署,而且我們可以擴展 API,」他說。除了使用 Prometheus Operator 之外,Ocado 團隊也已開始編寫自己的 Operator,其中一些已 開放原始碼。此外,「CNCF 為我們提供了這些不同技術的支援。我們已經能夠以非常容易的方式採用這些技術。我們確實喜歡 CNCF 的供應商中立性。我們沒有被要求承諾採用這種或那種做事方式。CNCF 中觀點的多樣性帶來了更好的技術。」
Ocado 自己的技術,以其 Smart Platform 的形式,很快將在 世界各地 使用。而雲原生在這項全球擴張中發揮著關鍵作用。「如果沒有 Kubernetes,我不會想嘗試這樣做,」Bryant 說。「Kubernetes 使它變得更加美好,尤其是擁有一致的方式來部署所有應用程式,然後採用相同的東西並能夠複製它。這非常有價值。」