當前位置:
首頁 > 最新 > 新特性初探:Docker for Mac喜迎Kuberntes支持能力

新特性初探:Docker for Mac喜迎Kuberntes支持能力

很高興內置支持Docker Swarm和Kubernetes的Mac版Docker[1]發布了,本文將會回顧一下此工具簡史,然後看看新功能的第一印象。

為什麼對開發者很重要?

Docker CE(簡稱Docker)是一款易用簡便的容器工具,是給用戶帶來自主和硬體無關性體驗的軟體。Mac版Docker並不是從一開始就支持Kubernetes,我們看看它的簡史:

Docker發端於DotCloud公司,一開始並不支持Windows和Mac,只能運行在Linux上。

Docker簡史

虛機

最開始,如果Mac或者Linux用戶想使用容器技術,就需要在Linux主機中安裝如VirtualBox或者VMWare Workstation/Player之類的虛擬機工具,並設置共享目錄。為了使用統一CLI工具,用戶不得不採用Hashicorp公司的Vagrant[2]。

使用場景:這種方式都是過時的技術,並不建議採用。

Docker Machine

Docker Machine是進化的第二步,採用boot2docker鏡像在本地或者遠程環境部署虛機,並提供可寫磁碟空間,也是朝易用性邁出的一大步。一旦基於SSL認證的VM生成,Docker客戶端就可以通過TCP/IP工具訪問它,可以同時支持多個Docker版本構成的集群。

優點:

同一主機支持多個容器後端

只支持Linux

使用boot2docker鏡像

模塊化支持各家雲提供商插件

缺點:

命令行方式操作

不支持Windows和Mac

使用場景:使用Windows 7或者Windows 10 Home,需要在本地運行一套集群,或者需要在雲端運維一套集群。

Docker for Mac/Windows

Docker Machine需要太多手工操作(通過docker-machine env),為了採用TLS,有時還需要重建。Docker for Mac/Windows(簡稱DfM)本著造福廣大使用者的初衷,內建UI和菜單支持,推出了功能有限的beta版本,剛開始主要是Twitter使用它。

優點:

安裝簡便

自動配置命令行

圖形化界面配置

一鍵啟停作業

缺點:

共享卷時性能很差

高耗能降低電池使用時間

支持Windows 10 pro或者enterprise

使用場景:可用,但是需要本地安裝Docker Swarm或者Kubernetes。

Minikube

Minikube跟docker-machine非常類似,也依靠boot2docker,初衷是創建內含可用於開發的Docker主機的單節點Kubernetes集群。

Mac上的minikube輸出案例如下:

優點:

本地環境易於訪問

Kubernetes可用

缺點:

Kubernetes在空閑時耗費大量電力

感覺還是跟docker-machine很類似

內置Docker版本嚴重滯後

有些功能尚不支持,例如RBAC(role-based authentication control)

需要使用minikube start/stop

使用場景:需要本地Kubernetes場景但是不必關注Docker版本。

第一印象

以下是我更新DfM後,使用它得到的第一印象。

開始

需要Docker 17.12或者更高版本以獲得Kubernetes支持,然後就是通過UI界面花幾分鐘下載新版本。

上下文和命名空間

如果以前安裝了minikube,需要轉換到DfM上下文,否則kubectl會掛起。

如果發現有太多輸出內容,Kubernetes社區有一個叫kubectx[3]的工具可以改善輸出狀況。

Docker Swarm和Kubernetes之間一個不同是命名空間的支持。默認地,Kubernetes生態容器運行在稱為system的隱藏命名空間,可以通過以下命令查看kubectl get all --all-namespaces:

輸出有很多默認運行的服務,和Docker Swarm一樣,區別是對用戶隱藏,運行在幾個固定二進位代碼中,而不是分散運行的服務。

以下命令可以查看Kubernetes版本:

看起來是1.8.2版本,儘管不是最新版本但也包含了所有重要功能。

整合Docker

Docker希望Kubernetes更加易用,因此整合了Docker stacks和Kubernetes原生部署服務。

Kubernetes是很容易擴展的,Docker使用Custom Resource Definitions (CRDs)引入了對「棧(stack)」概念的支持。可以驗證如下:

看看對compose文件的效果:

CRD驗證:

創建了幾個Pods:

Prometheus有一個bug,可以用這個命令debug:$kubectl logs pod/prom-76b4f584f7-qckc9。

如果仍然使用docker-compose開發和生產,現在可以直接轉向Kubernetes了。

內置工作流

我們期望內置工作流能夠實現:

kubectl apply 支持YAML

helm

RBAC激活

下面部署OpenFaaS-Serverless功能(採用Docker和Kubernetes實現起來很簡單)。

如果碰到命名空間錯誤,可以在faas-netes目錄下執行kubectl apply -f ./namespaces.yml ,然後再嘗試一遍。

OpenFaaS會在localhost:31112啟動圖形界面,並啟用了RBAC和兩個命名空間(openfaas / openfaas-fn),輸出如下:

服務也創建完畢。驗證如下:

然後打開UI,部署一個應用功能:

http://localhost:31112

然後選擇Figlet - figlet是Linux下二進位文件可以產生ASCII 文本logos。

查看產生的Function/Pod:

相對於Docker Swarm,Kubernetes使用更多對象形成服務。

激活服務查看結果:

作業運行很順暢,而且簡單易用。對於社區維護和內置OpenFaaS整合很有幫助。

之前提過需要helm(一個類似OpenFaaS的分散式軟體管理器),在Docker Swarm中沒有類似的概念。

寫這篇博客之前,我在Twitter上看有消息說helm也已經被支持了。

總結

其實不僅是簡單的DfM整合了「棧」,應該說在現有工具外層實現了簡單化,提高了速度,更加易用。相信Docker Swarm用戶都會使用這種整合,而且遷移到Kubernetes。

Docker Swarm 已死?作為Docker Captains用戶組成員,我並沒有更多內部消息,但是因為Docker Swarm仍然有很多用戶,因此仍然會被支持。例如:最原始可以運行在容器內的Swarm仍然被Docker"s UCP product[4]支持。

如果讀了developer reactions on Hacker News[5],可以看到Swarm仍然有很多粉絲,如果Kubernetes想吸引他們,那麼on-prem安裝維護過程需要提高。

因此我的第一印象總結如下:很多新功能令人振奮,尤其是對DfM的更新以及內部新元素使得它看起來更像一個LinuxKit了。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Docker 的精彩文章:

CNCF 雲原生容器生態系統概要

TAG:Docker |