在Windows上學習Docker和Kubernetes,開始的時候會讓你覺得無從下手。最起碼安裝好這些軟體都不是一件容易的事情。實際上,你應該對Docker和Kubernetes相當熟悉了才知道如何選擇安裝時啟用哪些引數選項。
這篇文章就是為在Winodws上剛剛入門容器和Kubernetes的同學而準備的。
你將會學習到如何做出正確的選擇來搭建Windows上的容器開發環境。
你正在使用Windows 10 Home版?你將無法執行Docker for Windows
當Docker的開發者們決定在Winodows上實現Docker時,他們選擇了Hyper-V作為虛擬化技術。這個優點十分明顯:優秀的效能和原生的hypvervisor。
不幸的是並不是所有的Windows版本帶Hyper-V支援。
如果你正在使用Windows 10 home版或者Student版,那麼你就中招了。你將無法安裝和執行Docker for Windows。
你有許多基於Docker Machine的替代品可用,例如Docker toolbox或者minikube。
Docker Machine的工作方式很簡單:有一個VM裝好了Linux和Docker給你。你可以從你的主機連到虛擬機器上的Docker deamon。
Minikube可以說是基於Docker Machine的最有趣的VM之一——你可以在裡面執行Kubernetes叢集。
事實上,minikube是一個執行Docker和Kubernetes的VM。它通常是用來單獨執行Kubernetes的,但是你也可以用它來跑Docker容器。
你可能不會擁有Docker for Windows那樣的速度,但是畢竟你不需要Hyper-V就能夠構建和執行容器了。
有了Windows 10 Pro,Docker for Windows是最佳選擇(除了特殊情況)
你有最新的Win 10 Pro,你可以安裝Docker for Windows。 你擁有了優秀的效能和開發者體驗,一切都搞定了,是嗎?
Docker for Windows使用的hypvervisor是相當強大的——它屬於Type-1 hypervisor。 它確實很強大但是它卻無法與Virtualbox這樣的Type-2 hypervisor一起工作。
你不能在同一臺機器上同時執行Type 1和Type 2的hypervisor。換句話說,如果你執行Docker for Windows,那你就無法啟動VirtualBox裡面的VM了。
如果你已經完全使用容器化了,你就不需要擔心VM——過時的東西。
但是如果你仍然要使用VM,以及類似Vagrant這樣的工具,那你可能就有麻煩了。
你可以隨意的啟用或者關閉Hyper-V hypervisor,但是你要重啟機器。
如果你頻繁的要從容器切換到VM,那可能使用minikube更方便。當你從容器切換到VM的時候就不用重啟電腦了。 缺點就是你沒辦法得到更高效能和更好體驗。
最後,如果你要執行Windows容器——base映象是來自於Windows的容器——Docker for Windows是唯一選擇。 你只能使用Windows 10 Pro或者Enterprise版。
如果你想要跑一個本地的Kubernetes,那你應該考慮minikube。
Minikube是一個預裝有嵌入式Linux(Buildroot)和Docker daemon的VM。
Minikube的VM可以透過VirtualBox或者Hyper-V來執行(當然也有其他選擇)。如果你已經有Hyper-V也要用它來跑Docker和minikube的話就會很方便。
當然如果你不能跑Hyper-V也沒關係,你可以用VirtualBox實現同樣的功能。
你可以從官網上下載安裝Docker for Windows、Docker Toolbox、VirtualBox、kubectl、Docker CLI等,但是相當麻煩。
你要去到官網找到正確的下載地址,選擇正確的版本,下載安裝,最後加到你的path裡面去。
這當然可行,但是我敢肯定你更願意把時間花在編碼而不是從網站上下載安裝軟體包上。
Chocolatey是一個Widnows的包管理器。你告訴它想要安裝的包,它會為你裝好。你把軟體安裝的活外包給它了。
安裝Chocolatey很簡單,你可以在它的官方網站找到步驟[1]。簡單來說,就這麼幾步:
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
choco search docker
我們來試一把,安裝Cmder——一個Windows上的時尚shell:
choco install cmder -y
Chocolatey會安裝到C:\tools下。如果你要用Cinder做如下的練習,您可以以管理員啟動它:
1. 在Windows 10 Pro上安裝Docker和Kubernetes
choco install docker-for-windows -y
重啟你的電腦。Docker會問你是否要啟用Hyper-V。
你需要知道Docker需要啟用VT-X/AMD-v的硬體虛擬化擴充套件來執行容器。你需要在重啟電腦時在BIOS裡面配置它。
你可以用systeminfo命令來檢查VT-x/AMD-v是否開啟。
如果你不確定VT-x/AMD-v是否開啟,也不用擔心。因為你沒有的話,Docker會報錯:
Hardware assisted virtualization and data execution protection must be enabled in the BIOS.
另一個常見問題是Hyper-V沒有啟用,這樣你會見到如下錯誤:
你應該啟用Hyper-V。以管理員開啟新的命令提示符,敲入:
bcdedit /set hypervisorlaunchtype auto
docker ps
如果一切正常,那麼你會看見輸出一個空的串列(正在執行的容器串列)。
如果Docker deamon沒有執行的話,你可能就會遇到如下錯誤:
上面的錯誤表示你的Docker安裝不正常,Docker無法啟動。
你應該先啟動Docker daemon,然後再連線它。
choco install minikube -y
在啟動叢集之前,你應該先建立一個外部的網路交換機。
你應該忽略掉虛擬網絡卡,而關註在真實活躍的物理網絡卡上,比如Ethernet或者WiFi。
要檢視你當前的網路配接器,你可以在PowerShell裡面使用Get-NetAdapter cmdlet。
點選左下角的Windows圖示,輸入PowerShell來開啟它:
Get-NetAdapter
如果你還是不知道該選哪個,那麼就選擇Up狀態的那個。
一旦你選擇好了配接器,你就可以開始建立外部虛擬交換機了:
New-Switch -Name "minikube" -AllowManagement $TRUE -NetAdapternmae "INSERT_HERE_ADAPTER"
如果你沒有建立好網路交換機,那麼啟動minikube的時候會報如下錯誤:
E0427 09:06:16.000298 3252 start.go:159] Error starting host: Error creating host: Error executing step: Running precreate checks. no External vswitch found. A valid vswitch must be available for this command to run. Check https://docs.docker.com/machine/drivers/hyper-v/.
你可以執行以下命令來測試minikube安裝是否成功:
minikube start --vm-driver=hyperv --hyperv-virtual-switch=minikube
請註意:–vm-driver=hyperv –hyperv-virtual-switch=minikube 只在第一次啟動時需要。如果你希望更改driver或者記憶體,那麼你需要執行minkube destroy然後用新的配置重新建立。
如果minikube啟動失敗,那麼你可以透過以下命令除錯:
minikube delete
minikube start —vm-driver=hyperv —hyperv-virtual-switch=minikube —v=7 —alsologtostderr
更多的輸出日誌可以幫助你快速排錯。我遇到過如下的問題:
E0427 09:19:10.114873 10012 start.go:159] Error starting host: Error starting stopped host: exit status 1.
這看不出來啥。我就開啟詳細的日誌輸出,錯誤就變得明顯了:
+ Hyper-V\Start-VM minikube
+ + ~~~~~~~~~~~~~~~~~~~~~~~~~
+ + CategoryInfo : FromStdErr: (:) [Start-VM], VirtualizationException
+ + FullyQualifiedErrorId : OutOfMemory,Microsoft.HyperV.PowerShell.Commands.StartVM
kubectl get nodes
你會看到Kubernetes裡面有一個node顯示出來。
因為你已經在裝置上啟用了Hyper-V,你就無法再透過virtualbox跑VM了。如果你強行要啟用vm的話,會遇到如下錯誤:
如果你想用VirtualBox這種Type-2 的hypervisor, 你先要停掉Hyper-V然後重啟電腦。
bcdedit /set hypervisorlaunchtype off
當機器重啟之後,你就可以正常使用VirtualBox了。
如果你又想要用Docker和minkube了,你要重新開啟Hyper-V然後重啟機器。
bcdedit /set hypervsiorlaunchtype auto
重啟, 這樣你就可以將容器部署到Kubernetes中了。
2. 在Win 10 Home版本上安裝Docker和Kubernetes
如果你正使用Windows 10的Home版或者Student版,你可能不需要安裝Docker Machine 工具(比如Docker Toolbox)。
你應該使用minikube作為遠端的Docker deamon和本地的Kubernetes叢集。
choco install minikube
minikube start
這個命令會下載一個VirtualBox要用到的ISO,然後啟動VM。啟動之後你就可以檢視叢集狀態:
kubectl get nodes
要連線到遠端的Docker deamon,你應該安裝Docker客戶端:
choco install docker -y
你可以連到minkube上遠端的Docker daemon:
@FOR /f "tokens=*" %i IN ('minikube docker-env') DO @%i
註意:每次你開啟一個新的命令列視窗,你都需要以上命令。一種提醒你自己的簡單方式是敲一下minikube docker-env。
docker ps
你會看到很多容器正在執行。大部分屬於Kubernetes。
但是在你繼續之前,你需要清楚使用minikube作為你遠端Docker daemon的一些限制。
大部分時間你都只會跟Docker CLI 互動,你不會看到Docker daemon。
那麼為什麼要有客戶端和伺服器?為什麼不用一個檔案?
當你執行Docker for Windows時,Docker CLI連線的是本地的Docker daemon。
可能你需要在一臺遠端的機器上構建Docker容器。
可能你沒有Hyper-V環境,你的Docker daemon是安裝到VirtualBox裡面的VM中的。
你的Docker CLI會連線到遠端的部署在minikube虛擬機器裡面的Docker Daemon上。
當你的容器執行在遠端的Docker daemon上的時候,你需要調整埠系結。
在Docker for Windows,你可以將容器埠系結到8080:
docker run -ti -p 8080:80 nginx
註意:容器本身暴露的是80,你把它對映到了8080。
然後你可以訪問http://localhost:8080然後看見Nginx的歡迎頁面。
如果你在遠端的Docker daemon上執行此命令然後訪問這個URL時,你會發現什麼也沒有,URL不可達。
Docker for Windows的daemon是在本地執行的——你自己的本機。
Minikube則不同,它的Docker daemon是執行在VM裡面的。
如果你想要看見你執行的容器你需要訪問Docker daemon所在的機器。 你可以用以下命令找到IP:
minikube ip
你可以透過http://your_minikube_ip:8080來訪問,看到Nignx的歡迎頁面。
你已經安裝好了Docker,那你如何知道它是否工作正常呢?
docker run -ti -p 8080:80 wordpress
一旦Docker下載完所有的包,你可以透過http://localhost:8080來訪問。
註意:如果你在使用遠端的minikube上的Docker daemon時,你應該使用http://your_minikube_ip:8080來訪問。
註意:你還不能完成那個Wordpress的安裝因為你還有資料庫。
是時候測試你的本地的Kubernetes叢集了。在這一部分,你將會部署Smashing.io面板。
kubectl run smashing --image=/visibilityspots/smashing --port=3030
一旦Kubernetes完成了容器的安裝,你可以檢視執行狀態:
kubectl get pods
kubectl expose deployment smashing --type=NodePort
minikube service smashing
這樣你就可以從Kubernetes裡面訪問面板了! 萬歲!
minikube dashboard
現在你已經瞭解了在Windows上安裝Docker和Kubernetes的所有選項。
如果你遇到了文章沒提到的錯誤,請透過@learnk8s或者slack告訴我們。
接下來,你可以在你的環境裡面部署更多應用了。請看檔案[3]。
-
https://chocolatey.org/install
-
https://learnk8s.io/blog/installing-docker-and-kubernetes-on-windows#testing-your-docker-installation
-
https://learnk8s.io/blog/deploying-laravel-to-kubernetes
原文連結:https://medium.freecodecamp.org/get-started-with-docker-and-kubernetes-on-windows-10-73c328c6f89a
基於Kubernetes的DevOps實踐培訓將於2018年8月24日在北京開課,3天時間帶你係統掌握Kubernetes。本次培訓包括:容器特性、映象、網路;Kubernetes架構、核心元件、基本功能;Kubernetes設計理念、架構設計、基本功能、常用物件、設計原則;Kubernetes的資料庫、執行時、網路、外掛已經落地經驗;微服務架構、元件、監控方案等,點選下方圖片檢視詳情。
長按二維碼向我轉賬
受蘋果公司新規定影響,微信 iOS 版的贊賞功能被關閉,可透過二維碼轉賬支援公眾號。
微信掃一掃
使用小程式