Mac環境下開啓Docker之旅
使用桌面版的docker已經有一段時間了,主要是在平時的開發中用以搭建各種開發環境。總的來說,在mac上使用桌面版的docker比較容易上手,桌面版也提供k8s的功能,但是開啓時總是不能成功,而且在此基礎上使用Rancher管理k8s也遇到了各種問題,這裏就記錄一下這一路上遇到的各種坑。
1 Docker Desktop for Mac
使用桌面版的Docker很簡單,官網也提供Mac/Window的版本下載,這裏爲了後面使用k8s集羣,下載的是edge版本的docker。
下載頁面:https://docs.docker.com/docker-for-mac/edge-release-notes/
下載完成後,我們就可以直接安裝即可。
輸入自己的Docker賬戶和密碼
命令行查看我們的docker版本
docker version
小試牛刀,使用docker快速啓動一個redis容器。
docker run -itd -p 6379:6379 --name redis hub.c.163.com/public/redis:2.8.4
查看容器
docker ps
2 安裝Kubernetes集羣
如下圖所示,桌面版的docker提供開啓k8s的選項,但是如果我麼直接勾選的話,由於qiang的原因,會一直處於starting的狀態。
所以要想開啓k8s需要做一下幾項工作:
- 添加國內鏡像庫
- 手動使用腳本拉取k8s鏡像
- 開啓k8s
2.1 添加國內鏡像庫
將https://docker.mirrors.ustc.edu.cn,https://registry.docker-cn.com添加到鏡像庫列表,可在 Docker -> Preferences… -> Advanced -> Registry Mirror添加。
添加完成後,點擊Apply&Restart按鈕。
2.2 手動使用腳本拉取k8s鏡像
先從github上download腳本
git clone https://github.com/maguowei/k8s-docker-desktop-for-mac.git
然後進行k8s-docker-desktop-for-mac目錄,執行load_images.sh 腳本
./load_images.sh
2.3 開啓k8s
2.3.1 開啓
鏡像完成之後,我們就可以開啓k8s了。
k8s顯示running狀態,說明集羣已經啓動成功了。
2.3.2 查看狀態
查看集羣狀態:kubectl cluster-info
查看節點:kubectl get nodes
2.3.3 開啓dashboard
官網:https://github.com/kubernetes/dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
要從本地工作站訪問儀表板,您必須爲Kubernetes羣集創建安全通道。運行以下命令:
kubectl proxy
訪問:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
如上圖所示,需要驗證,這裏我們可以創建一個簡單的用戶,參考https://github.com/kubernetes/dashboard/wiki/Creating-sample-user,如要一下幾步:
-
創建dashboard-adminuser.yaml文件
文件內容:
apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kube-system
-
創建Service Account和ClusterRoleBinding
執行命令
kubectl apply -f dashboard-adminuser.yaml
-
獲取Token
執行命令獲取Token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
我們可以得到如下輸出:
只需要將token內容粘貼到web端即可。
2.3.4 Helm
Helm 是一個命令行下的客戶端工具。主要用於 Kubernetes 應用程序 Chart 的創建、打包、發佈以及創建和管理本地和遠程的 Chart 倉庫。Tiller 是 Helm 的服務端,部署在 Kubernetes 集羣中。Tiller 用於接收 Helm 的請求,並根據 Chart 生成 Kubernetes 的部署文件( Helm 稱爲 Release ),然後提交給 Kubernetes 創建應用。Tiller 還提供了 Release 的升級、刪除、回滾等一系列功能。
在mac上安裝helm比較簡單,使用brew就可以直接安裝。如果mac上沒有安裝brew,可以跳轉到https://www.jianshu.com/p/08a9d9479c2a
brew install helm
初始化本地 CLI 並 將 Tiller 安裝到 Kubernetes cluster
helm init
原先的stable倉庫
helm repo remove stable
添加新的倉庫地址
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
更新倉庫
helm repo update
3 使用Rancher管理k8s集羣
接下來進行高能操作,使用Rancher來管理k8s集羣。參考https://rancher.com/blog/2018/2018-05-18-how-to-run-rancher-2-0-on-your-desktop/
在安裝Rancher之前,一定要執行第2節裏的Helm的操作。更換stable爲國內源。
3.1 添加 Ingress Controller
Ingress Controller用於提供從外部世界到在Kubernetes中運行的服務的L7(主機名或路徑庫)http路由。
我們將用於helm
安裝Kubernetes穩定社區nginx-ingress
chart
。這將在我們的本地羣集上創建Ingress Controller。
helm install stable/nginx-ingress --name ingress-nginx --namespace ingress-nginx --wait
3.2 安裝 Cert-Manager
Kubernetes 的Cert-Manger項目將管理本地Rancher安裝的SSL證書。
因爲cert-manager會拉取國外的鏡像,可能會報錯,這裏我寫了個腳本,可以先拉取國內源,然後替換,所以先從我的git上拉取腳本。
git clone https://github.com/shirukai/docker-desktop-for-mac.git
然後切換到rancher目錄
cd docker-desktop-for-mac/rancher
執行load_images.sh腳本
./load_images.sh
然後安裝Cert-Manager
helm install stable/cert-manager --name cert-manager --namespace kube-system --wait
3.3 安裝 Rancher
接下來就開始安裝Rancher了,首先添加Rancher的chart倉庫
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
安裝rancher
helm install rancher-latest/rancher --name rancher --namespace cattle-system --set hostname=rancher.localhost --wait