Kubernetes vs Docker:了解容器和編排
了解Docker和Kubernetes是如何改變應用程序開發的,以及這些關鍵的容器技術是如何結合在一起的。
如果你跟上了軟件開發的最新趨勢,你無疑會一次又一次地遇到兩個術語:Docker和Kubernetes,它們本質上是容器和編排的簡寫。
Docker容器幫助并簡化了通過開發和測試將應用程序遷移到生產環境中的過程,而Docker和Kubernetes都幫助重新發明了將應用程序構建和部署為微服務集合而不是單一堆棧的方式。 為什么Docker和Kubernetes很重要,它們是如何改變軟件開發的,它們在這個過程中扮演什么角色?
Docker 和容器
Linux、Windows和其他現代操作系統中支持的容器允許軟件在獨立于系統其他部分的小型環境中運行。容器被比作VMS,但它們不是VMS,它們更精簡,啟動和停止更快,更靈活和便攜。因為容器可以在幾秒鐘內上下旋轉或伸縮,它們使得在云這樣的彈性環境中運行應用程序更加容易。
Linux和其他操作系統多年來一直支持容器化應用程序,但使用容器并不完全是用戶友好的。Docker,無論是開源的還是商業化的,都是一種軟件,它使容器成為一種用戶友好和開發者友好的商品。Docker為容器提供了一組通用的工具和隱喻,因此您可以將應用程序打包到容器映像中,以便在您自己的組織或其他地方輕松部署和重用。
簡而言之,Docker使創建容器映像、對其進行版本控制、共享它們、移動它們并將它們作為運行容器部署到Docker兼容的主機上成為一個快照。
我什么時候用Docker 和容器?
Docker和containers最適合處理必須具有以下一個或多個特性的工作負載:
彈性伸縮性。你不知道一個應用程序需要運行多少實例才能滿足需求。一個容器化的應用程序或服務可以通過部署更少或更多的容器實例來擴展以滿足需求。 隔離。你不希望應用程序干擾其他應用程序。也許您將同時運行多個版本的應用程序,以滿足不同版本的API。或者你想保持底層系統的干凈(總是個好主意)。 可移植性。您需要在各種環境中運行此應用程序,并且要求每個設置都是可復制的。容器允許您打包應用程序的整個運行時環境,使應用程序易于部署到任何與Docker兼容的主機—開發人員桌面、QA測試機、本地iron或遠程云。
Kubernetes和容器編排
容器的設計主要是為了使進程或應用程序與底層系統彼此隔離。創建和部署單個容器很容易。但是,如果您要將多個容器(例如數據庫,Web前端,計算后端)組裝到可以作為一個整體進行管理的大型應用程序中,而不必擔心部署,連接,管理,并分別縮放每個容器?您需要一種將所有部分編排為功能整體的方法。
這就是Kubernetes要做的工作。如果Docker是郵輪上的乘客,那么Kubernetes就是郵輪主管。 Kubernetes基于Google創建的項目,提供了一種方法,可以跨多個主機自動進行多容器應用程序的部署和管理,而不必直接管理每個容器。開發人員描述了跨多個容器的應用程序布局,包括每個容器如何使用網絡和存儲的詳細信息。 Kubernetes在運行時處理其余部分。它還處理諸如機密和應用程序配置之類的細微細節的管理。 Kubernetes需要一定的專業知識才能很好地使用,盡管它比過去更像是一個交鑰匙解決方案。易用性方面的某些進步歸因于常見應用的簡便配方(Helm圖表);部分原因是由知名品牌公司(Red Hat,Canonical,Docker)生產的大量Kubernetes發行版,這些發行版與流行的應用程序堆棧和開發框架緊密結合。
什么時候使用Kubernetes和容器編排?
服務少量用戶的簡單容器化應用通常不需要編排,更不用說Kubernetes了。但是,如果應用程序的功能水平不高或用戶數量不多,則很難不重新發明編排系統所提供的功能。這是確定編排何時應用的一些經驗。 您的應用程序很復雜。 任何涉及兩個以上容器的應用程序都可以滿足要求。也就是說,僅通過少量的解決方案(例如Docker群模式)而不是Kubernetes可以精心安排僅服務于少量用戶的適度應用。
您的應用對伸縮性和彈性有很高的要求。 Kubernetes和其他協調器使您可以通過描述系統的期望狀態,而不是手動編寫對變化的條件的反應,來平衡負載并旋轉容器以聲明式地滿足需求。
您想充分利用現代CI / CD技術。 編排系統支持使用藍/綠部署或滾動升級的應用程序的部署模式。
也許會有一天,Docker和Kubernetes甚至會被更友好的抽象所取代,并讓位于更優雅的方式來創建和管理容器。但是,到目前為止,Docker和Kubernetes還是重要的。