前言:本系列博客又更新了,是博主研究很長時間,親自動手實踐過后的心得,k8s集群是購買了5臺阿里云服務器部署的,這個集群差不多搞了一周時間,關于k8s的知識點,我也是剛入門,這方面的知識建議參考博客園大神edisonchou的系列文章《
.NET Core on K8S學習實踐系列文章索引(Draft版)
<https://www.cnblogs.com/edisonchou/p/aspnet_core_k8s_artcles_index.html>
》,為什么我要寫該系列的文章,是因為我之前 工作的幾家公司應用都已經(jīng)容器化了,.net framework 應用也在慢慢遷移到.net core 上,.net
core
從1.0就開始使用了,作為開發(fā)人員,有些細節(jié)上的東西對開發(fā)人員是封閉的,我們只知道項目開發(fā)完成通過Jenkins構建,構建完成把鏡像推送到HarBor,然后在禪道上建個發(fā)布任務,貼上鏡像的地址,發(fā)給運維就好了。我就對這個過程很好奇,業(yè)余時間也在研究這方面的東西。好了,暫且聊到這里,下面我就分享一下自己在搭建k8s集群的心得,有說的不對的地方還請糾正。
?
一、k8s高可用集群搭建總結
我們都知道Kubernetes自身,側重穩(wěn)定性、可擴展性、安全性;核心策略的變化?。恢苓吷鷳B(tài)持續(xù)爆發(fā)。k8s搭建的方式有三種:(1)社區(qū)方案:雜亂、不可靠、升級難(2)kubeadm:優(yōu)雅、簡單、支持高可用、升級方便、不易維護、文檔不夠細致
(3)二進制部署,建議初學者使用二進制搭建,因為可以快速放棄,哈哈哈,玩笑歸玩笑,二進制的方式易于維護、靈活、升級方便。我的k8s集群使用的是二進制搭建的,5臺阿里云的配置
如下:
環(huán)境參數(shù):k8s 1.14.0? Docker 17.03.1-ce? Harbor 1.6.0? Jenkins v2.150.2,一定 要注意版本問題,
注意:使用云服務器的,跳過keepalived的配置,不要用虛擬ip
(云環(huán)境一般都不支持自己定義虛擬ip)就直接把虛擬ip設置為第一個master的ip就可以了。
?PS:如果是一定要高可用的話可以購買云商的負載均衡服務(比如阿里云的SLB),把backends設置成你的三個master節(jié)點,然后虛擬ip就配置成負載均衡的內(nèi)網(wǎng)ip即可。
具體的集群搭建細節(jié),我就不列出來了,因為不是重點。
二、部署WebAPI到k8s
* 準備Deployment YAML
這個YAML文件,引用自Edison Zhou(
https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_firststudy_part3.html
<https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_firststudy_part3.html>
),在這里我們使用了Edison Zhou的鏡像倉庫?
apiVersion: apps/v1 kind: Deployment metadata: name: k8s-demo namespace:
aspnetcore labels: name: k8s-demo spec: replicas: 2 selector: matchLabels:
name: k8s-demo template: metadata: labels: name: k8s-demo spec: containers: -
name: k8s-demo image: edisonsaonian/k8s-demo ports: - containerPort: 80
imagePullPolicy: Always--- kind: Service apiVersion: v1 metadata: name: k8s-demo
namespace: aspnetcore spec: type: NodePort ports: - port: 80 targetPort: 80
selector: name: k8s-demo
這里這個deploy.yaml就會告訴K8S關于你的API的所有信息,以及通過什么樣的方式暴露出來讓外部訪問。
需要注意的是,這里我們提前為要部署的ASP.NET Core
WebAPI項目創(chuàng)建了一個namespace,叫做aspnetcore,因此這里寫的namespace : aspnetcore。
K8S中通過標簽來區(qū)分不同的服務,因此這里統(tǒng)一name寫成了k8s-demo。
在多實例的配置上,通過replicas : 2這個設置告訴K8S給我啟動2個實例起來,當然你可以寫更大的一個數(shù)量值。
最后,在spec中告訴K8S我要通過NodePort的方式暴露出來公開訪問,因此端口范圍從上一篇可以知道,應該是 30000-32767這個范圍之內(nèi)。
?
* 通過kubectl 部署到k8s
需要先后執(zhí)行以下命令:
kubectl create namespace aspnetcore // 創(chuàng)建一個命名空間“aspnetcore” mkdir aspnetcore
cd aspnetcore/ vim deploy.yaml //將上面的配置寫入該文件中 kubectl create -f deploy.yaml
?
[root@m7-a2-15-43 aspnetcore]# kubectl get svc -n aspnetcore NAME TYPE CLUSTER
-IP EXTERNAL-IP PORT(S) AGE k8s-demo NodePort 10.254.180.117 <none> 80:8671/TCP
4h55m
?
可以看到在命名空間aspnetcore下,就有一個k8s-demo的服務運行起來了,并通過端口號8671向外提供訪問。
* 驗證WebAPI是否可以訪問
首先,在瀏覽器中訪問API接口,看看是否能正常訪問:http://公網(wǎng)IP:8671/api/values
然后,我們再到Dashboard中,看看k8s-demo的狀態(tài):
我們點擊命名空間,選擇:aspnetcore
當然了,你也可以直接點擊:“集群”選項下面的“命名空間”,點擊對應的名稱,里面可以看到詳細的信息。從Dashboard中可以看到更為詳細的信息,包括運行的Deployment、容器組(由于我們設置的replicas=2,因此會有2個容器運行起來)、副本集等等,也可以通過Dashboard實時初步地監(jiān)控我們的API的運行情況。
* 通過Dashboard伸縮WebAPI
在Dashboard中,我們可以可視化地對我們的Deployment進行容器實例的伸縮,具體操作可以參考:
https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_firststudy_part3.html
<https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_firststudy_part3.html>
,這里我就不再多說了。
?
?三、總結
本文,簡單總結了一下使用阿里云部署高可用k8s集群,可能有同學說怎么不詳細寫一下部署的過程呢?由于時間倉促,部署的過程文檔還在整理中,況且,部署的過程和該系列文章的主題不符,大家可以參考其他文章,關于Dashboard,一般企業(yè)內(nèi)部是不會使用的,都是自研的,只需要了解即可。該篇文章的目的,是
想讓大家體驗一下所謂的容器編排,以及asp.net core on k8s。筆者也是剛接觸,有很多東西需要學習,這只是k8s的一點點,因為還沒用到生產(chǎn)
環(huán)境,需要觀察一段時間,后期,我把部署的過程整理一下,再分享給大家。提前預告一下篇博客的主題:Jenkins+k8s,實現(xiàn)CI/CD,敬請期待。
這是該系類博客要使用的項目:https://github.com/guozheng007/asp.net-core2.1-miaosha-project
<https://github.com/guozheng007/asp.net-core2.1-miaosha-project>
參考資料:
Edison Zhou:
https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_firststudy_part3.html
<https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_firststudy_part3.html>
劉果國:https://coding.imooc.com/class/335.html
<https://coding.imooc.com/class/335.html>(付費課程366.00)
?
?
作者:郭崢
出處:http://www.cnblogs.com/runningsmallguo/
本文版權歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
熱門工具 換一換