本篇已加入《.NET Core on K8S學習實踐系列文章索引》,可以點擊查看更多容器化技術相關系列文章。
當近期的一個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實戰:借助阿里雲/騰訊雲容器服務進行生產環境的容器部署和運維的一些實戰總結
下面是這個學習初探部分的三篇文章索引:
Section 1 - ASP.NET Core on K8S學習初探(1)K8S單節點環境搭建
Section 2 - ASP.NET Core on K8S學習初探(2)K8S基本概念快速一覽
Section 3 - ASP.NET Core on K8S學習初探(3)部署API到K8S
一、關於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%\.kube\config。當然,這里也可以選擇跳過,不用管這個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