當近期的一個App上線後,發現目前的docker執行個體(應用服務BFF+中台服務+工具服務)已經很多了,而我司目前沒有專業的運維人員,發現運維的成本逐漸開始上來,是以容器編排也就需要提上議程。是以我決定開始學習Kubernetes,會将學習當中的過程記錄下來,預計會形成一個系列,暫且命名為:ASP.NET Core on K8S,而這個系列會由3個部分組成,且會在不同的時期寫完:
- ASP.NET Core on K8S學習初探:在Docker for Windows中搭建單節點環境,初步了解有個感性認識
- ASP.NET Core on K8S深入學習:在Linux上搭建K8S叢集,對K8S的一些核心概念有個深入的認識
- ASP.NET Core on ACK/TKE實戰:借助阿裡雲/騰訊雲容器服務進行生産環境的容器部署和運維的一些實戰總結
一、關于K8S
關于K8S,建議閱讀《
10分鐘看懂Docker和K8S》,這幾乎是一篇不用耗費多少腦細胞的文章,因為講的實在是太通俗易懂了。
總體來說,就是在Docker容器技術被炒得熱火朝天之時,大家發現,如果想要将Docker應用于具體的業務實作,是存在困難的——編排、管理和排程等各個方面,都不容易。于是,人們迫切需要一套管理系統,對Docker及容器進行更進階更靈活的管理。
于是,源自于Google的K8S出現了。K8S就是基于容器的叢集管理平台,它的全稱,是Kubernetes。
Kubernetes 這個單詞來自于希臘語,含義是舵手或領航員。K8S是它的縮寫,用“8”字替代了“ubernete”這8個字元。
這裡不再過多解釋,因為上面的文章裡已經講的很清楚了,理清那些繁多的K8S概念留到後面再來,這裡主要是先玩起來,玩了再說。K8S的環境搭建在Windows和Linux下,還可以基于雲服務提供商封裝好的K8S服務進行快速建構,這裡為了快速玩玩,選擇了在Windows下基于Docker for Windows來進行。
二、安裝核心步驟
2.1 前置條件
確定目前Windows環境有以下幾個關鍵點:
- Windows 10 PRO專業版及以上
- Hyper-V 虛拟機
- Docker for Windows,這裡示範的是Docker CE 18.06版本
為Docker for Windows的daemon配置鏡像加速:
2.2 下載下傳K8S鏡像
首先,從Git上下載下傳K8S所需的docker鏡像:
git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop
cd k8s-for-docker-desktop
這裡,為了比對18.06版本(Docker CE版本号或者你的Docker for Windows的版本号),切換到該項目的18.09分支。
git checkout 18.09
_Note:_關于哪個版本切換到哪個分支,請參閱
這裡。
然後,開始加載鏡像,這裡通過PowerShell的方式加載:
.\load_images.ps1
當然,也可以通過Bash Shell的方式加載:
./load_images.sh
最後,在Docker for Windows中啟用K8S:
2.3 快速配置K8S
(可選)切換運作上下文至docker-for-desktop
kubectl config use-context docker-for-desktop
核心:驗證Kubernetes叢集狀态
kubectl cluster-info
kubectl get nodes
_Note:_執行了kubectl cluster-info之後就可以看到已經啟動了一個master節點,也就是single-node模式啟用了。
面闆:部署Kubernetes Dashboard
kubectl create -f kubernetes-dashboard.yaml
通路:開啟API Server通路代理,向外部提供面闆通路
kubectl proxy
然後就可以通過下面這個URL通路Kubernetes的Dashboard:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/overview?namespace=default但是,你會發現出現的如下這個頁面,你可以選擇跳過 也可以選擇一個kubeconfig。
其中,kubeconfig的位置(這裡是Windows系統)位于:%UserProfile%.kubeconfig。當然,這裡也可以選擇跳過,不用管這個config。如果,碰到提示“not enough data to create auth”,需要執行以下指令來設定一下kubeconfig:
$TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1]
kubectl config set-credentials docker-for-desktop --token="${TOKEN}"
最後,可以正常登入後看到Dashboard的全貌了:
_Note:_如果想通過其它主機通路并且讓API Server能夠接受所有主機的請求,請通過以下指令啟動API Server。
kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'
三、小結
本篇簡單地記錄一下如何在Windows環境下基于Docker for Windows來搭建一個單節點的K8S環境,下一篇會将ASP.NET Core以Docker方式加入到K8S叢集中托管,操作K8S來管理Docker執行個體來有一個感性認識。
參考資料
- Jesse, http://video.jessetalk.cn/my/course/6
- 阿裡雲, https://github.com/AliyunContainerService/k8s-for-docker-desktop/tree/18.09
- https://yq.aliyun.com/articles/508460?spm=a2c4e.11153940.blogcont221687.18.7dd57733hFolMo
- 聖傑, https://www.cnblogs.com/sheng-jie/p/10591794.html
- 忱康, https://blog.csdn.net/cuipengchong/article/details/72459299