【譯者的話】這篇文章由淺入深地介紹瞭如何開始Kubernetes學習,以及如何基於Kubernetes部署應用。做者給出了不少很是好的建議,指導讀者掌握圍繞Kubernetes的各個概念和相關技能,爲學習Kubernetes指明瞭方向。html
從Hello Minikube到Kubernetes Anywhere,再到微服務示例應用,學習谷歌容器編排工具的途徑比比皆是。mysql
每一次的創新都帶來一些新的麻煩。容器使得應用的打包和運行更加便捷,可是管理大規模容器依然是一個挑戰。git
Kubernetes是谷歌公司內部爲解決這個問題而開發的產品,它提供了一個單一的框架來管理在整個集羣中運行的容器。該產品提供的服務主要集中在「編排」上,但也涵蓋了許多方面:容器調度、容器之間的服務發現、跨系統的負載平衡、滾動更新/回滾、高可用性等。github
在這個指南中,咱們將介紹建立Kubernetes集羣併發布容器應用的基本知識。這並非要介紹Kubernetes的概念,而是經過簡單示例來展現這些概念如何在運行Kubernetes的過程當中結合在一塊兒的。sql
Kubernetes是爲了管理Linux容器而誕生的。可是,從Kubernetes 1.5起,儘管Kubernetes控制面板必須繼續在Linux上運行,但Kubernetes已經開始支持Windows Server Containers。固然,藉助虛擬化,您能夠在任何平臺上開始使用Kubernetes。ubuntu
若是您選擇在本身的硬件或虛擬機上運行Kubernetes,一個常見的方法是獲取綁定Kubernetes的Linux發行版。這樣就不須要設置Kubernetes,不只省去了安裝和部署過程,甚至配置和管理的過程也不須要了。併發
CoreOS Tectonic就是這樣的一個發行版,專一於容器和Kubernetes,幾乎徹底排除其餘任何東西。RancherOS採起相似的作法,一樣自動化執行大部分的設置。二者均可以安裝在各類環境中:裸機,Amazon AWS VMs,Google Compute Engine,OpenStack等。app
另外一種方法是在常規的Linux發行版上運行Kubernetes,儘管一般會帶來更多的管理開銷和手動調整。例如,紅帽企業Linux在其軟件庫中有Kubernetes,但即便是Red Hat,也建議僅用於測試和實驗。建議紅帽用戶經過OpenShift PaaS使用Kubernetes,而不是本身動手從頭搭建,OpenShift如今使用Kubernetes做爲本身的容器編排系統。許多傳統的Linux發行版提供了設置Kubernetes和其餘大型軟件堆棧的特殊工具。例如,Ubuntu提供了一種名爲conjur-up的工具,可用於在雲和裸機實例上部署Kubernetes的上游版本。框架
儘管在谷歌雲平臺(GCP)上,Kubernetes已經全面支持了,可是在不少其餘雲平臺上,Kubernetes是否支持依然是一個焦點問題。GCP提供了運行Kubernetes的兩種主要方式。最方便和集成最好的方式是經過Google容器引擎,它容許您運行Kubernetes的命令行工具來管理建立的集羣。或者,您可使用Google Compute Engine來建立計算集羣並手動部署Kubernetes。這種方法對用戶的技能要求比較高,可是容許用戶使用Google Container Engine還沒有支持的個性化定義。若是您剛開始接觸容器,最好堅持使用容器引擎。通過一段時間以後,您對Container Engine有了必定的瞭解,就能夠嘗試一些更高級的內容,好比您本身選擇特定版本的Kubernetes進行部署,或者部署運行Kubernetes發行版的虛擬機。less
亞馬遜EC2有容器的原生支持,但沒有原生支持Kubernetes做爲容器編排系統。在AWS運行Kubernetes相似於使用谷歌計算引擎:配置一個計算集羣,而後手動部署Kubernetes。
許多Kubernetes的發行版都有如何在AWS部署的詳細說明。例如,CoreOS Tectonic,有一個圖形化的安裝程序,同時還支持Terraform基礎設施配置工具。此外,Kubernetes kops工具能夠被用來配置一組AWS上的虛擬機集羣(一般使用Debian Linux,可是其餘的Linux版本也部分支持)。
微軟Azure經過Azure Container Service來支持Kubernetes。然而,從將Kubernetes做爲一個託管在Azure上的服務這個角度來講,這不是很「原生」的支持。相反,Kubernetes是由一個Azure資源管理模板部署的。Azure對於其餘的容器編排系統(好比Docker Swarm和Mesosphere DC/OS)的支持也是這種思路實現的。若是您在這裏提到的任何其餘的雲中部署Kubernetes,而且但願徹底控制它,在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虛擬機上,提供了一個狀態欄應用程序實現快速管理。Solo也包括Kubernetes包管理程序Helm(一般是Helm下一級),所以基於Kubernetes的應用程序包更容易獲取和設置。
當您的Kubernetes運行起來以後,您就能夠運行和管理容器了。經過部署和管理基於不少容器的應用示例的方式,您能夠輕鬆地熟悉容器的操做。以一個現有的基於容器的應用程序demo爲例,本身組裝它,看看它是如何組成的,部署它,而後逐步修改它,直到知足您的預期。若是您選擇經過minikube找到立足點,您可使用Hello Minikube教程建立Docker容器,將這個運行簡單的Node.js應用的容器託管在單節點Kubernetes,以此來演示集羣安裝和應用部署。一旦您對這些都熟悉了,您就能夠替換成本身的容器,並作一些實踐性部署。
下一步是部署一個示例應用程序,這個程序相似您可能在生產環境中使用的應用。經過這個應用您能夠進一步熟悉Kubernetes的一些高級概念,好比pods(一個或多個容器,包括一個應用程序),service(一組邏輯的Pod),replica sets(提供應用在機器故障時的修復機制)和deployment(應用程序的版本)。揭開WordPress/MySQL示例應用程序的神祕面紗,例如,你看到的將不只僅是如何將應用部署到Kubernetes,並讓這些應用正常運行。您也將看到Kubernets應用涉及的不少概念的實現細節,而這些應用都是知足生產環境要求的。您將學習如何設置持久卷以保存應用程序的狀態,如何將Pod暴露給彼此,以及如何經過services與外部世界連在一塊兒,以及如何將應用程序密碼和API密鑰存儲爲secrets等等。
Weaveworks有一個示例應用程序,襪子商店,展現了微服務模式如何用來組合Kubernetes中的應用。襪子商店對於熟悉底層技術(好比Node.js,Go kit和Spring Boot)的人來講是最有利的,但主旨超越了特定的框架,而是說明雲原生技術。
若是您看了一眼WordPress/MySQL的應用,並想建立一個運行在Kubernetes上的應用來知足您的需求,這種想法基本上是對的。Kubernetes有一個應用程序定義的系統稱爲Helm,它提供了一種打包、版本管理和共享Kubernetes應用的機制。一些主流的應用程序(GitLab,WordPress)和構建應用程序的模塊(MySQL、NGINX)將Helm做爲一站式直通kubeapps門戶的最佳實踐。
Kubernetes經過強大的抽象能力簡化了容器的管理,好比Pod和Service,同事經過label和namespace機制提供了很大的靈活性,label和namespace均可以用來隔離pod,services和deployments(好比開發環境、過渡環境和生產環境負載)。
若是您選擇上面的示例的一個,並在多個命名空間中建立不一樣的實例,那麼能夠對獨立於其餘命名空間的組件進行更改。您可使用deployments,以容許這些更新在給定的命名空間中的多個pod之間滾動進行。
比這種練習更進一步的是學習Kubernetes自己如何可以被管理基礎設施的工具所驅動。以Puppet爲例,有一個用於建立和操縱Kubernetes資源的模塊,可是HashiCorp’s Terraform很早就有支持,可是支持方式演變成將Kubernetes做爲一種資源進行管理。若是您打算使用這樣的資源管理器,請注意不一樣的工具可能會給錶帶來不一樣的預期結果。以Puppet and Terraform爲例,默認分別使用可變的和不可變的基礎設施。這些哲學層次和行爲的差別,如何或輕鬆,或困難地建立您所須要的Kubernetes。
這個故事,「如何開啓Kubernetes之旅」最初發表在InfoWorld。
原文連接:How to get started with Kubernetes (翻譯:付輝)