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