譯見 | 掌舵 Kubernetes(一):如何起步?

DaoCloud發表於2017-08-10

譯見 | 掌舵 Kubernetes(一):如何起步?

​有光的地方就有陰影,每一次創新的到來往往也伴隨著不少的麻煩。容器技術的到來,讓我們能以更為便捷的手段封裝和執行應用程式,但按規模化管理容器還充滿挑戰。

Kubernetes 是 Google 公司內部為了解決這一問題誕生的產物,它提供了一個框架來管理容器在整個叢集中的執行方式。它提供的這種服務通常都集中在“編排”中,但也涵蓋了很多領域:容器排程、容器之間的服務發現,跨系統之間的負載平衡、滾動更新/回滾、高可用性等。

今天的文章, 將向你介紹設定 Kubernetes 的基礎知識,並使用基於容器的應用程式進行相關補充。不只是紙上談兵單純丟擲 Kubernetes 的概念, 而是展示這些概念如何在執行 Kubernetes 的簡單示例中進行結合的。

選取一個 Kubernetes 主機

Kubernetes 是為管理 Linux 容器而誕生。但是, 從 Kubernetes 1.5 版本之後, Kubernetes 也開始支援 Windows 伺服器容器, 儘管 Kubernetes 控制面必須繼續在 Linux 上執行。不過當然, 藉助虛擬化, 你可以在任何平臺上開始使用 Kubernetes。

如果你選擇在自己的硬體或 VM 上執行 Kubernetes, 通常是使用一個附帶 Kubernetes 的 Linux 發行版。這就不需要在給定的分佈上設定 Kubernetes - 不僅是下載和安裝過程, 還包括某些配置和管理過程。

CoreOS 的發行版之一 Tectonic,幾乎排除了其他所有東西而專注於容器和 Kubernetes。RancherOS 同樣採用了類似的方法, 同樣自動執行大部分配置。兩者都可以安裝在各種環境中: 裸機、亞馬遜 AWS VM、Google 計算引擎、OpenStack 等。

另一種途徑是在傳統的 Linux 發行版上執行 Kubernetes,儘管這往往會增加管理成本和需要進行相應的人工除錯。例如。Red Hat 企業版 Linux 便在其軟體包儲存庫中附帶 Kubernetes ,但即使是 Red Hat 也建議只將其用於測試和實驗。不要嘗試手動地進行拼湊,Red Hat 棧使用者被建議通過 OpenShift PaaS 使用 Kubernetes,而 OpenShift 如今使用 Kubernetes 作為自己的原生編排器。

許多傳統的 Linux 發行版為配置 Kubernetes 和其他大型軟體棧提供了特殊的工具。例如,Ubuntu 提供了一個名為 conjure-up 的工具,它可以被用來在雲和裸機上部署 Kubernetes 的新興版本。

選取一個 Kubernetes 雲

Kubernetes 在許多雲中都是一個標準的發行專案,儘管它可能在 Google Cloud Platform(GCP)上的表現最為突出。GCP 提供了兩種主要的方式來執行 Kubernetes.最方便和緊密整合的方式是通過 Google Container Engine,它能讓你執行 Kubernetes 的命令列工具來管理已經建立的叢集。

或者,你也可以使用 Google Compute Engine 來設定一個計算叢集並手動部署 Kubernetes。但這種方法仍需要進一步的優化,但它能實現 Container Engine 無法實現的的自定義。如果你剛剛開始使用容器技術,請先使用 Container Engine。循序漸進地,當你已經初步深入並希望嘗試一些新東西的時候,比如一個自定義版本的可以讓你自己修改的 Kubernetes,這個時候你可以部署執行 Kubernetes 發行版的虛擬機器。

Amazon EC2 能對容器進行本地支援,但不能對 Kubernetes 作為一個容器編排系統的本地支援。在 AWS 上 執行 Kubernetes 就類似於使用 Google Compute Engine:你可以配置一個計算叢集,然後手動部署 Kubernetes。

許多 Kubernetes 的發行版都有詳細的指令來設定 AWS。例如,CoreOS 的發行版之一 Tectonic,它就包括一個圖形化的安裝程式, 也支援 Terraform 基礎架構的配置工具。另外, Kubernetes kops 工具可以用於在 AWS 上提供一組通用的虛擬機器(通常使用 Debian linux, 也部分支援其他型別的 Linux)。

Microsoft Azure 通過 Azure Container Service 支援 Kubernetes 。然而,它並不是“本地”支援,因為 Kubernetes 只是在 Azure 上的託管服務。相反,Kubernetes通過Azure資源管理器模板進行部署。Azure 也有對其他容器編排框架的支援,如 Docker Swarm 和 Mesosphere DC / OS,他們的工作方式相同。如果你想要實現完全控制,就像這裡描述的其他雲一樣,你可以隨時在 Azure 虛擬機器上安裝以 Kubernetes 為中心的發行版。

實現在各種環境(雲端或其他方式)中提供基本的 Kubernetes 叢集的一種快速方法是使用名為Kubernetes Anywhere 的專案。此指令碼適用於 Google Compute Engine,Microsoft Azure 和VMware vSphere(需要 vCenter)。針對不同的情況,它都為設定提供了一定程度的自動化。

你專屬的 Kubernetes 小型節點

如果你只是在本地環境 (如開發機器) 中執行 Kubernetes , 有幾種方法可以設定 "剛好足夠" 的 Kubernetes 來滿足你的需求。

Kubernetes 開發團隊本身提供的一個 Minikube。執行它, 你會得到一個部署在你選擇的虛擬主機上的單節點 Kubernetes 叢集。Minikube 有幾個先決條件, 如 kubectl 命令列介面和虛擬化環境,如VirtualBox, 但這些都可以作由為 MacOS、Linux 和 Windows 的二進位制檔案提供。

對於 MacOS 上的 CoreOS 使用者, 有 Kubernetes Solo, 它在 CoreOS VM 上執行, 並提供了一個快速管理的狀態列應用程式。Solo 還包括 Kubernetes 軟體包管理 Helm, 以便由 Kubernetes 封裝的應用程式更容易被獲得和設定。

操作你的容器叢集

一旦 Kubernetes 開始執行, 就可以開始部署和管理容器了。你可以通過利用眾多的基於容器的應用程式 demo 中的一個來輕鬆地進行容器操作。

採取現有的基於容器的應用程式 demo,自己進行配裝,看看它是如何組成的,部署它,然後逐步進行修改,直到它能為你所用。如果你選擇通過 Minikube 為你的出發點,你可以使用 Hello Minikube 教程在單節點Kubernetes demo 安裝中建立一個 Docker 容器,該容器將一個簡單的 Node.js 應用程式儲存在單節點 Kubernetes demo 安裝中。一旦你有了任何想法,都可以在自己的容器中進行交換,也可以實踐部署。

下一步是部署一個類似於你在生產中使用的示例應用程式, 並熟悉更為前驅的 Kubernetes 概念, 例如莢 (一個或多個容器, 包括一個應用程式), 服務 (邏輯集的豆莢), 副本集 (提供自我修復的機器故障), 和部署 (應用程式版本控制)。舉個例子, 使用像 WordPress / MySQL 這樣的示例應用程式,你將會看到更多的關於如何將這些片斷部署到 Kubernetes 中並讓它們執行的指令。你還將看到生產級的 Kubernetes 應用程式所使用的許多概念的實現細節。你將學習如何設定持久卷以保留應用程式的狀態, 如何通過服務向對方和外部公開 pod, 如何將應用程式密碼和 API 金鑰儲存為機密檔案等。

Weaveworks 便有一個典型的應用程式,Sock Shop,它顯示微服務模式是如何用來在 Kubernetes 上組成一個應用程式的。Sock Shop 對於熟悉基礎技術的人員來說將是最有用的 - Node.js,Go kit 和Spring Boot,但核心原則是超越特定的框架並說明雲原生技術。

如果你瞭解 WordPress / MySQL 應用程式,並想像可能會有一個預先的 Kubernetes 應用程式來滿足你的需求,你可能是對的。Kubernetes 有一個名為 Helm 的應用程式能定義系統,它提供了一種封裝,版本和共享 Kubernetes 應用程式的方法。許多流行的應用程式(GitLab,WordPress)和應用程式構建模組(MySQL,Nginx)都可以通過 Kubeapps 門戶的方式隨時使用的 Helm“圖表” 。

Kubernetes 導航

Kubernetes 通過諸如 pod 和服務等強大的抽象概念簡化了容器管理, 同時通過諸如標籤和名稱空間等機制提供了大量的靈活性, 可以用來分隔 pod、服務和部署 (如開發、轉移和生產工作負載)。

如果你採取上述示例之一, 並在多個名稱空間中設定不同的例項, 則可以練習對每個名稱空間中的元件進行更改, 而不依賴於其他。然後, 你可以使用部署使這些更新在給定的名稱空間中以增量方式跨多個 pod 進行滾動。

除了這些練習之外, 接下來的一大步是學習如何通過管理基礎架構的工具來驅動 Kubernetes 本身。例如, Puppet 中有一個模組, 用於建立和操作 Kubernetes 中的資源, 而 HashiCorp 的 Terraform 對 Kubernetes 作為資源的支援也很早就有但也越來越多。如果你計劃使用這樣的資源管理器, 請注意, 不同的工具可能會給錶帶來截然不同的改變。例如, Puppet 和 Terraform 就預設使用可變和不可變的基礎架構。這些想法和行動上的差異可以決定如何更容易, 或更困難地, 建立你需要的 Kubernetes 設定。


檢視 Kubernetes 系列文章!

譯見 | 掌舵 Kubernetes(一):如何起步?


相關文章