本文學習k8s參考內容:
http://docs.kubernetes.org.cn/126.html,學習過程中遇到一些坑,記錄如下:
----------------------------------------------------------------------------------
k8s目前最好是用linux進行部署,windows跟mac現在雖然有k8s的版本但用起來會有一些問題。最近在自己本地mbp上部署k8s的時候繞了一些彎路,特此記錄。
mac上比較方便的一點是docker for mac上集成了k8s,所以直接利用docker for mac安裝k8s即可,安裝完成后啟動,會自動啟動一個只有1個節點的k8s集群。
好處是不用配了,可以直接使用kubectl命令進行相關操作,壞處是無法自己配多節點集群(mac上的k8s功能是不全的)。
另一種使用方式是minikube,這個借助於virtualBox或者VMware可以使用多節點偽集群,遺憾的是,經過測試發現minikube在mac上存在bug。
minikube介紹:
minikube的github官方介紹:
Minikube is a tool that makes it easy to run Kubernetes locally. Minikube runs a single-node Kubernetes cluster inside a VM on your laptop for users looking to try out Kubernetes or develop with it day-to-day.(Minikube是一種工具,可以在本地輕松運行Kubernetes。Minikube在筆記本電腦的VM中運行單節點Kubernetes集群,供希望嘗試Kubernetes或日常開發的用戶使用。)
啟動minikube,從控制台也可以看到,啟動的時候下載了一個ISO鏡像文件,具體運行使用的vm技術由--vm-driver指定。
minikube試過的坑:
中文官方教程的minikube是在osx系統進行的,但實際按照教程,並不能完整走完整個流程。
第一個錯誤在minikube啟動的時候,所給的命令是minikube start --vm-driver=xhyve,bhyve是FreeBSD下的虛擬技術,xhyve是在基於bhyve的osx版本,體積非常小,只有230k,可以當做virtualBox,VMware Function之外的虛擬機使用。這個命令是設置k8s集群使用虛擬技術為xhybe,它的值包括virtualbox、xhyve、vmwarefusion,默認是virtualbox。該命令最終不能正常
1、網絡不通
官方原版minikube,本地藍燈代理,會報錯:minikube start --vm-driver=xhyve --docker-env HTTP_PROXY=http://代理ip:端口號 --docker-env HTTPS_PROXY=http://代理ip:端口號


有一個warning,大意是說xhyve已經被廢棄了,后續版本將刪除,建議使用hyperkit。報錯內容是下載kubelet失敗,莫非我代理設置的不對?
2、國內版本,按照社區的介紹進行啟動,會報錯
采用阿里雲版本:啟動minikube,會停留在starting cluster components......很長時間,最終報異常:

這個看上去是k8s的代理不能正常啟動導致的。沒找到解決辦法。
3、正常啟動的,無法獲取對外網絡ip地址
既然上邊有warning提示,那就按照提示用hyperkit吧。安裝docker-machine-driver-hyperkit后,minikube start --vm-driver=hyperkit啟動,可以啟動,但對外暴露的ip是無法獲取的:

minikube start --bootstrapper localkube也是可以啟動minikube的,只是要安裝virtualBox,最后對外暴露端口問題一樣無法解決。
如果不在外部訪問應用,這個倒是也沒啥影響,而且教程中所給示例也是這樣的。有文章說顯示為pending的時候,等一分鍾就好,試過了等了好幾分鍾,仍然這樣。
使用docker自帶的k8s:
為啥使用minikube呢,因為當時選的學習教程用的minikube,由於是官方教程,沒有絲毫懷疑,結果撞的頭破血流。使用minikube不就是為了一個集群環境么,docker for mac已經自帶了k8s,而且啟動自帶一個單節點集群,直接使用豈不美哉?
因為教程中先把執行環境設置為了minikube,需要先把環境切換為k8s,docker for mac 上右鍵即可:

可以看到地址正常了:

資源刪除:
kubectl delete service hello-node
kubectl delete deployment hello-node