1. 程式人生 > >極簡的配置單節點Kubernetes(k8s)叢集_Kubernetes中文社群

極簡的配置單節點Kubernetes(k8s)叢集_Kubernetes中文社群

在傳統的概念當中,Docker是簡單易用的,Kubernetes是複雜強大的。 深入瞭解之後會發現Docker的簡單是因為使用者可以從基本功能開始用起, 只需要一臺Linux主機,執行一下apt-get install docker-engine 或者yum install docker-engine,立馬就可以用docker run啟動一個新的容器, 整個過程與使用者之前積累的Linux軟體使用體驗高度一致。 而Kubernetes則要求使用者要分別配置SDN,ssl證書,etcd,kubelet,apiserver, controller-manager,scheduler,proxy,kubectl等多個元件, 剛剛接觸對架構還不瞭解的新人一下就懵了。 過高的早期門檻把許多對Kubernetes感興趣的使用者擋在了外面,給人留下一種難以上手的感覺。

事實上,當整個系統擴充套件到多個節點,需要通盤考慮身份認證,高可用, 服務發現等高階功能後,Docker Swarm與Kubernetes的複雜度是接近的。 也許我們最初的比較出現了一點偏差, 將位於更高階的叢集管理和排程系統Kubernetes和位於底層的容器引擎Docker Engine直接比較並不恰當。

現在我們瞭解到Kubernetes的複雜是因為它提供了更多的功能, 但是如果我們無法解決Kubernetes的上手困難問題,始終會有推廣上的障礙。 對此,Kubernetes社群做出了許多努力。比如:

  • minikube可以方便的在本機用虛擬機器建立一個開箱即用的Kubernetes叢集
  • kubeadm可以自動化的將多臺Ubuntu或者CentOS主機組建成叢集
  • nanokubekid等自動初始化指令碼

充分利用已有的工具, 我們可以在單臺伺服器上把Kubernetes的上手體驗簡化到與Docker接近的程度, 新使用者可以不再糾結於安裝和配置,儘快開始使用Kubernetes完成工作, 在業務需求增長時,再擴充套件叢集成為多節點高可用的完整叢集。

下圖是一張學習曲線的示意圖,可以看到當引入單節點Kubernetes作為過渡之後, 整個學習曲線更加平滑,在早期簡單環境時更接近Docker, 在後期環境完整時又能夠充分利用Kubernetes的優勢。20170204141929

有多種方法可以建立單節點的Kubernetes叢集,接下來分享其中一個比較簡單方便的。

準備工作

首先準備一臺Linux伺服器,根據Docker中文文件安裝好Docker。

$ curl -o localkube https://storage.googleapis.com/minikube/k8sReleases/v1.5.1/localkube-linux-amd64
$ chmod +x localkube
$ curl -O https://storage.googleapis.com/kubernetes-release/release/v1.5.2/bin/linux/amd64/kubectl
$ chmod +x kubectl

localkube將Kubernetes所有的依賴程式全部打包成為了一個獨立的可執行檔案, 使用它可以省略掉幾乎所有的配置流程,直接將Kubernetes跑起來。

目前localkube已經被合併進了minikube,最新的版本需要從minikube中下載。

kubectl是Kubernetes的客戶端程式,可以用它控制叢集。

啟動Kubernetes

使用localkube啟動叢集非常簡單:

$ ./localkube

當不加任何引數時,localkube會使用預設引數啟動, 它所監聽的localhost:8080將被用於接受控制指令。

這裡並沒有在後臺執行localkube,如果你需要後臺執行, 可以自行使用Linux上已有的各種工具完成。

使用kubectl控制叢集

接下來的操作與多節點的叢集完全一樣。我們可以用kubectl來控制叢集,比如:

$ ./kubectl run nginx --image nginx

是不是和docker run nginx幾乎一樣?在這裡我們不詳細介紹Kubernetes的操作, 請參考官方文件學習Kubernetes的使用方法。

需要指出的是,由於是極簡的配置,並沒有配置遠端控制所需要的證書, 所以不能在本地電腦上控制這個叢集,而需要ssh到伺服器上進行控制。 這和預設的Docker配置是一致的。

總結

從上面的流程可以看到,Kubernetes也可以變得很簡單,僅僅需要將所有元件合併到一起就可以了。 而這也恰恰是Docker選擇的策略,在Docker的二進位制檔案中,被打包進了Docker Engine, 分散式儲存,Docker Swarm等功能,使用起來只需要一個docker指令就可以完成全部的操作。 接下來需要思考的問題是,既然合併到一起會更加簡單,那為什麼Kubernetes會把各個元件拆開呢? 今後在詳細介紹Kubernetes架構的時候會再給大家做詳細的分析,這裡就暫時留給大家下來自己思考了。

在剛接觸Kubernetes的時候,使用all in one的localkube是有好處的。 可以把它整個看作Kubernetes,直接上手開始學習PodService,ReplicaSet這些抽象概念, 而不用特別去關注裡面的元件劃分。雖然暫時只能在一臺伺服器上執行, 不能完全的展現Kubernetes編排和排程的能力,但是用於學習和測試已經完全足夠了。

待對Kubernetes建立了基本的概念之後,再進行多節點的叢集部署, 在那時再來折騰SDN,ssl證書這些更偏重運維的元件時,才會有比較合理的投入產出預期。

還在等什麼?快點把你的Docker主機升級為Kubernetes主機吧。就算沒有聯網形成叢集, 使用更高的抽象來構建你的業務,也將為今後的發展打下良好的基礎。