歡迎光臨
每天分享高質量文章

如何在本地執行Kubernetes?

最近的在針對550名Cloud Native Computing Foundation成員的調查證實,Kubernetes是他們首選的容器編排管理平臺。調查同時也表明,AWS雲平臺依然是在雲中部署Kubernetes叢集的首選。
kubernetes-aws.io中列舉了那些可以讓你輕鬆在AWS上建立Kubernetes叢集的各種方法。
而在開發階段,你可能也需要在本地執行Kubernetes叢集,以便你可以在本地啟動和除錯你的應用程式。一旦在本地中應用可以滿足要求,那就可以在AWS的叢集中部署相同的應用。
這邊文章會介紹兩種在Mac OSX機器上本地執行Kubernetes的方式,包括常用的Minikube以及Docker for Mac中新引入的Kubernetes支援。在Minikube和Docker網站上找到其它平臺的支援資料。
那我們開始吧!
安裝kubectl

Kubectl是Kubernetes叢集的命令列工具。首先我們需要在本地安裝kubectl:
brew install kubernetes-cli
如果本地已經安裝了kubectl,可以透過以下命令進行更新:
brew upgrade kubernetes-cli
檢視版本資訊:
$ kubectl version --client --short=true
Client Version: v1.8.5
預設情況下,kubectl version命令會打印出client以及server端的版本資訊。透過–client可以確保只輸出客戶端的版本資訊,–short選項允許只輸出版本號。
當Kubectl安裝完成後,接下來我們來看看在本地執行Kubernetes叢集的兩種可選方式。

使用Minikube安裝Kubernetes叢集

Minikube會在本地虛擬機器中執行一個單節點的Kubernetes叢集,為使用者提供一個本地的開發和測試環境。
Minikube使用VirtualBox建立虛擬機器。如果你本地還沒有安裝VirtualBox,可以透過下麵命令安裝:
brew cask install virtual box
安裝Minikube:

brew cask install minikube

如果本地已經安裝了Minikube,那你可以透過以下命令更新它:
brew cask reinstall minikube
檢查Minikube版本:
~ $ minikube version
minikube version: v0.24.1
啟動Minikube:
~ $ minikube start
Starting local Kubernetes v1.8.0 cluster...
Starting VM...
Downloading Minikube ISO
140.01 MB / 140.01 MB [============================================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Downloading localkube binary
148.25 MB / 148.25 MB [============================================] 100.00% 0s
0 B / 65 B [----------------------------------------------------------] 0.00%
65 B / 65 B [======================================================] 100.00% 0sSetting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
這個命令中會首先會下載ISO檔案,並且建立虛擬機器,之後自動配置Kubernetes元件同時啟動一個單節點的叢集。預設情況下,叢集配置以及認證資訊會儲存到~/.kube/config檔案中。不同叢集的背景關係可以透過以下命令檢視:
~ $ kubectl config get-contexts
CURRENT  NAME       CLUSTER     AUTHINFO NAMESPACE
*        minikube   minikube    minikube
可以看到,我們目前只建立了一個Kubernetes叢集。如果建立了多個叢集,該命令會傳回叢集的串列。
在第一行中的*表示當前我們正在使用的叢集背景關係,所有的kubectl命令列操作都會定向到該叢集。例如,你可以檢視叢集中的節點資訊:
~ $ kubectl get nodes
NAME     STATUS ROLES   AGE   VERSION
minikube Ready    1m    v1.8.0
透過kubectl version命令可以檢視客戶頓以及服務端的版本:
~ $ kubectl version --short=true
Client Version: v1.8.5
Server Version: v1.8.0
所有常用的kubectl命令都可以在該叢集中使用。

使用Dokcer for Mac建立Kubernetes叢集

Docker for Mac/Docker for Windows為開發者提供了一個很好的起點來使用Docker。使用者可以下載Stage或者Edge版本。Stable包含了所有已經完整測試和驗證的功能,並且附帶罪行的Docker GA版本。而在Edge版本中,通常提供了最新的測試和功能。其中17.12.0-ce-rc2-mac41作為Docker CE Edge版本private beta的部分提供了對於本地執行單節點kubernetes叢集的支援。
這意味著,你可以直接使用Docker for Mac去建立映象,啟動Kubernetes叢集,以及部署Pods,而不需要其它任何的第三方工具,比如minikube。當寫這邊文章的時候,這個特性只在Docker for Mac中支援,Docker for Windows還在計劃當中。(在Docker Enterprise Edition版本中已經支援Kubernetes)
我們來看看如何使用Docker for Mac搭建本地的Kubernetes叢集。
為了獲取Kubernetes支援的Docker for Mac版本,你需要登入到Docker Beta program[1]提交審核。一旦透過審核你就會收到下載Edge版本的Docker for Mac的連結地址。 請確保About Docker顯示其當前版本為12.12.0-ce-rc2-mac31或更新。在Preferences對話方塊包含新的便簽頁來支援你配置Kubernetes叢集。
選擇Enable Kubernetes,點選Apply & Restart 來啟動單節點的Kubernetes叢集。

幾分鐘之後,狀態列的狀態將會更新,並且顯示Kubernetes正在執行當中。

這個操作也會在~/.kube/config配置檔案中儲存叢集資訊。使用kubectl命令可以顯示行管的資訊:
~ $ kubectl config get-contexts
CURRENT  NAME               CLUSTER                    AUTHINFO            NAMESPACE
*        minikube           minikube                   minikube
        docker-for-desktop docker-for-desktop-cluster docker-for-desktop
使用kubectl可以切換叢集背景關係:
~ $ kubectl config use-context docker-for-desktop
Switched to context "docker-for-desktop".
~ $ kubectl config get-contexts
CURRENT NAME               CLUSTER                     AUTHINFO NAMESPACE
*       docker-for-desktop docker-for-desktop-cluster  docker-for-desktop
       minikube           minikube                    minikube
~ $ kubectl get nodes
NAME               STATUS  ROLES    AGE   VERSION
docker-for-desktop Ready   master   23h   v1.8.2
現在使用docker verion命令會顯示當前環境的編排引擎為Kubernetes:
        $ docker version
       Client:
       Version: 17.12.0-rc1-kube_beta
       API version: 1.35
       Go version: go1.9.2
       Git commit: a36c9215a7f8d5da5231d2cca353375bcb27efe3
       Built: Thu Dec 7 17:33:49 2017
       OS/Arch: darwin/amd64
       Orchestrator: kubernetes
       Server:
       Engine:
       Version: 17.12.0-ce-rc2
       API version: 1.35 (minimum version 1.12)
       Go version: go1.9.2
       Git commit: f9cde63
       Built: Tue Dec 12 06:45:30 2017
       OS/Arch: linux/amd64
       Experimental: true
請註意,這裡顯示的編排引擎為Kubernetes,而不是預設的Swarm。
你現在只使用了一個工具就即擁有了最新的Kubernetes又擁有最新的Docker執行時。
讓我們使用kuberctl version命令檢視一下當前的客戶端以及伺服器端版本:
~ $ kubectl version --short=true
Client Version: v1.8.2
Server Version: v1.8.0
同樣,所有kubectl命令也可以在這個叢集中使用。
除了使用kubectl命令以外,你也可以使用透過部署Docker Compose應用棧來建立Kubernetes應用。可以看下麵這個影片: