.NET Core + Kubernetes:快速体验
Kubernetes[1] 是目前非常主流的容器編排工具,在應(yīng)用創(chuàng)建、應(yīng)用部署、應(yīng)用擴(kuò)容、應(yīng)用更新等方面都非常的方便,而且在應(yīng)用故障時(shí),也可以快速自愈。所以基于微服務(wù)架構(gòu)下的產(chǎn)品,了解 Kubernetes 的使用是非常必要的,我猜測很多人都曾經(jīng)多次打算自己搭建 Kubernetes 環(huán)境,部署個(gè)服務(wù)試試效果,但卻因?yàn)楹芏嘣蛞淮未螐娜腴T到放棄,這里應(yīng)該有部分原因是因 ?Kubernetes 的入門成本相對(duì)較高,概念較多,搭建略復(fù)雜,所以往往一開始就死在了環(huán)境搭建上,導(dǎo)致很多預(yù)定的目標(biāo)都沒能實(shí)現(xiàn)。
關(guān)于 Kubernetes 概念上的內(nèi)容這里不再贅述,但概念的部分又是在使用中必須優(yōu)先掌握的知識(shí),所以建議先通過查看資料對(duì)整體架構(gòu)和使用方式有一定了解后再動(dòng)手實(shí)際操作。
集群搭建
這里將搭建 Kubernetes 集群環(huán)境來進(jìn)行測試,3 臺(tái) Linux 服務(wù)器(1個(gè)Master,2個(gè)Node)。網(wǎng)上有很多 Kubernetes 集群搭建的文章,找了很多最終發(fā)現(xiàn)還是李振良的基于 kubeadm 30分鐘部署一個(gè)Kubernetes集群[2] 視頻教程對(duì)初學(xué)者來說較為靠譜,雖然有些操作命令在實(shí)際生產(chǎn)環(huán)境需要調(diào)整,但作為學(xué)習(xí)來說問題不大,更多細(xì)節(jié)的優(yōu)化還是交給更專業(yè)的運(yùn)維人員吧。
為了省去操作系統(tǒng)的安裝我直接在騰訊云購買了 3臺(tái) 2C4G 的機(jī)器,選擇按量計(jì)費(fèi)模式大半天也就幾塊錢(不是廣告,只是人懶)。基于云服務(wù)器搭建需提前在控制臺(tái)的安全組設(shè)置好以下幾點(diǎn):
3臺(tái)服務(wù)器內(nèi)網(wǎng)互通;
允許服務(wù)器訪問外網(wǎng),需要下載相關(guān)依賴內(nèi)容;
允許客戶端機(jī)器通過服務(wù)器外網(wǎng)IP訪問;
具體安裝操作步驟完全參考視頻教程即可,但我能肯定有些人還是可能會(huì)出各種奇葩問題,只能祝你好運(yùn)了,以下幾點(diǎn)這里備注一下:
kubeadm init 和 pod 網(wǎng)絡(luò)插件只需要在 Master 節(jié)點(diǎn)操作;
kubeadm init 中的 --apiserver-advertise-address 設(shè)置為內(nèi)網(wǎng)地址;
通過 hostname k8s-master 可修改 hostname 名稱;
最終通過命令 kubectl get nodes 查看集群中各節(jié)點(diǎn)是否已全部 Ready。
構(gòu)建 .NET Core 服務(wù)鏡像
接下來將直接在 Windows ?環(huán)境(鏡像構(gòu)建基于 Windows 還是 Linux 理論上是沒有區(qū)別的)下構(gòu)建 .NET Core 服務(wù)的 Docker 鏡像,所以首先需要安裝 Docker for Windows[3],安裝成功后啟動(dòng) Docker。
創(chuàng)建一個(gè) API 類型 ASP.NET Core ?Web 應(yīng)用程序,啟用 Docker 支持,會(huì)在項(xiàng)目下自動(dòng)生成 Dockerfile 文件,命令主要涉及 dotnet restore,dotnet publish。
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base WORKDIR /app EXPOSE 80 EXPOSE 443FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build WORKDIR /src COPY ["K8SDemo/K8SDemo.csproj", "K8SDemo/"] RUN dotnet restore "K8SDemo/K8SDemo.csproj" COPY . . WORKDIR "/src/K8SDemo" RUN dotnet build "K8SDemo.csproj" -c Release -o /app/buildFROM build AS publish RUN dotnet publish "K8SDemo.csproj" -c Release -o /app/publishFROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "K8SDemo.dll"]在 Dockerfile 文件右鍵菜單點(diǎn)擊生成 Docker 鏡像,這與直接在 sln 解決方案文件所在的目錄下執(zhí)行 docker build -f .\K8SDemo\Dockerfile . 本質(zhì)是一樣的,只是 VS 已內(nèi)置好了,執(zhí)行成功后在 cmd 窗口中通過 docker images 查看當(dāng)前存在的 Docker 鏡像。
為了能在 Kubernetes 集群中能獲取到這個(gè)鏡像,現(xiàn)將 k8sdemo 鏡像推送到個(gè)人 docker hub 公開倉庫(實(shí)際開發(fā)中應(yīng)該是公司的私有鏡像倉庫)。
如果還沒有 docker hub 賬號(hào),需要先 注冊(cè)[4] ;
cmd 窗口通過命令 docker login -u 用戶名 -p 密碼 登錄;
設(shè)置 Tag docker tag k8sdemo:latest 用戶名/k8sdemo:1.0.0,因?yàn)橥扑湍繕?biāo)只能是當(dāng)前用戶下;
推送到 docker hub 倉庫 docker push 用戶名/k8sdemo:1.0.0;
部署
以下操作操在?Master 節(jié)點(diǎn)進(jìn)行
創(chuàng)建服務(wù)配置文件 k8sdemo.yaml,配置暫且不詳細(xì)介紹,后續(xù)再針對(duì)性說明,先簡單理解為通過鏡像 beckjin/k8sdemo:1.0.0 創(chuàng)建了服務(wù),并將容器內(nèi) 80 端口映射到服務(wù)器某個(gè)端口上(NodePort 方式映射的端口會(huì)在 30000~32767 范圍內(nèi)隨機(jī)一個(gè)):
apiVersion: apps/v1 kind: Deployment metadata:name: k8sdemo spec:replicas: 1selector:matchLabels:name: k8sdemotemplate:metadata:labels:name: k8sdemospec:containers:- name: k8sdemoimage: beckjin/k8sdemo:1.0.0ports:- containerPort: 80imagePullPolicy: IfNotPresent --- kind: Service apiVersion: v1 metadata:name: k8sdemo spec:type: NodePortports:- port: 80targetPort: 80selector:name: k8sdemo通過命令 kubectl apply -f k8sdemo.yaml 創(chuàng)建服務(wù)
配置中指定了當(dāng)依賴的鏡像不存在時(shí)會(huì)自動(dòng)拉取,但如果拉取資源的速度較慢,啟動(dòng)完成的時(shí)間可能會(huì)比較久,可通過命令 kubectl get pods 和 kubectl describe pod 名稱 查看具體 pod 詳細(xì)描述。
通過命令 kubectl get pod,svc 查看服務(wù)運(yùn)行的端口
接著就可以通過 http://${外網(wǎng)IP}:31741/WeatherForecast 調(diào)用 API 接口查看效果。
如果需要擴(kuò)容或縮容,調(diào)整配置文件中的 ?replicas 節(jié)點(diǎn)值,重新 kubectl apply -f k8sdemo.yaml 即可;
通過命令 kubectl delete -f k8sdemo.yaml 可刪除服務(wù);
總結(jié)
其實(shí)很長一段時(shí)間都在嘗試自己把玩一下 Kubernetes,說實(shí)話阻力確實(shí)不少,特別是看到很多基于二進(jìn)制文件的搭建介紹,簡直了。所以好的指導(dǎo)教程確實(shí)可以給我們帶來事半功倍的效果,作為入門學(xué)習(xí)我們并不需要多么強(qiáng)大和安全的測試環(huán)境,基本套路都是先玩起來,再深入研究。
參考資料
[1]
Kubernetes: https://kubernetes.io/
[2]30分鐘部署一個(gè)Kubernetes集群: https://edu.51cto.com/course/17256.html
[3]Docker for Windows: https://docs.docker.com/docker-for-windows/
[4]注冊(cè): https://hub.docker.com/signup
總結(jié)
以上是生活随笔為你收集整理的.NET Core + Kubernetes:快速体验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET CORE WEBAPI文
- 下一篇: .NET Core + Kubernet