欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

.NETCore+Kubernetes怎么構(gòu)建項目

這篇文章主要講解了“.NET Core+Kubernetes怎么構(gòu)建項目”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“.NET Core+Kubernetes怎么構(gòu)建項目”吧!

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供交城網(wǎng)站建設(shè)、交城做網(wǎng)站、交城網(wǎng)站設(shè)計、交城網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、交城企業(yè)網(wǎng)站模板建站服務(wù),十余年交城做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

在 Kubernetes 中,Pod 資源的控制器 Deployment、Replicaset、Daemonset 等常用于管理無狀態(tài)應(yīng)用,它們所管理的 Pod 對應(yīng)的 IP、名字,啟停順序等都是隨機(jī)的,Pod 之間也并不存在任何關(guān)聯(lián)關(guān)系。而實際情況下,在應(yīng)用集群部署時,實例彼此之間可能是需要存在關(guān)聯(lián)關(guān)系的(啟動順序、角色),如 MySQL、MongoDB,所以 StatefulSet 就是為了運行有狀態(tài)服務(wù)引入的一種資源類型,StatefulSet 為每個 Pod 維持一個唯一且固定的標(biāo)識符,必要時還會為其創(chuàng)建專用的存儲卷,當(dāng) Pod 被重建時,也依然能保持原來的標(biāo)識符和存儲卷。

完整的 StatefulSet 通常由三部分構(gòu)成:StatefulSetVolumeClaimTemplateHeadless Service

StatefulSet 用于 Pod 資源定義與管控,在 StatefulSet 模式下,Pod 有自己固定的命名規(guī)則(StatfulSet 名稱 + Pod 創(chuàng)建時所在的索引),假設(shè)設(shè)置的 StatefulSet 名稱為 k8sdemo,replicas 為3,則對應(yīng)的 Pod 名稱將分別是 k8sdemo-0k8sdemo-1k8sdemo-0,同時在進(jìn)行 Pod 副本伸縮時也能做到按序號進(jìn)行升降。

VolumeClaimTemplate 用于定義 Pod 所需存儲的 PVC 聲明 ,PVC 與 PV 進(jìn)行綁定,提供專有固定的存儲卷。

Headless ServiceclusterIP: None)用于為 Pod 生成可解析的 DNS 域名記錄,基于 Pod 名稱的有序規(guī)則,Pod 域名是不會變的(Pod 名稱.serviceName),這也保證了 Pod 網(wǎng)絡(luò)標(biāo)識的穩(wěn)定性。

下面繼續(xù)以 .NET Core  項目構(gòu)建的 beckjin/k8sdemo:1.2.0 鏡像為例,增加了接口訪問日志記錄的功能。通過集成 log4net 將接口訪問日志進(jìn)行文件記錄,日志將輸出到 /Data/ 目錄,每個 Pod 都會擁有自己的一份日志文件(這只是一個假設(shè)的場景,切勿較真,實際情況下日志記錄一般都會使用統(tǒng)一的日志采集工具)。 

定義資源

k8sdemo-statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
 name: k8sdemo
spec:
 serviceName: "k8sdemo-service"  # 需要與創(chuàng)建的 service name 一致
 replicas: 3
 selector:
   matchLabels:
     name: k8sdemo
 template:
   metadata:
     labels:
       name: k8sdemo
   spec:
     containers:
     - name: k8sdemo
       image: beckjin/k8sdemo:1.2.0
       imagePullPolicy: IfNotPresent
       volumeMounts:
       - name: data
         mountPath: /app/Data  # 將容器內(nèi)的 Data 目錄進(jìn)行掛載
 volumeClaimTemplates:  # 定義模板,自動創(chuàng)建 PVC
   - metadata:
       name: data
     spec:
       accessModes:
         - ReadOnlyMany
       resources:
         requests:
           storage:  100Mi
       storageClassName: "k8sdemo-sc"  # 將自動與集群內(nèi) storageClassName 匹配的 PV 進(jìn)行綁定
 

k8sdemo-service.yaml

apiVersion: v1
kind: Service
metadata:
 name: k8sdemo-service
spec:
 clusterIP: None
 ports:
 - port: 80
   targetPort: 80
 selector:
   name: k8sdemo
 

StatefulSet 模式下需要設(shè)置 serviceName 字段,用來告訴 StatefulSet 控制器具體使用哪個 service 來解析它所管理的 Pod。同時通過 volumeClaimTemplates 字段進(jìn)行 PVC 定義,StatefulSet 控制器會自動創(chuàng)建與 Pod 對應(yīng)的 PVC,PVC 的名稱為 (volumeClaimTemplateName)-(podName),然后 PVC 會自動與滿足要求的 PV 進(jìn)行綁定,PV 如果不支持自動創(chuàng)建可手動完成。另外當(dāng) Pod 被刪除時 PVC 與 PV 依然會被保留,Pod 重建時會重新關(guān)聯(lián)之前對應(yīng)的 PVC 與 PV。

這里還是使用的 NFS 創(chuàng)建 PV 來實現(xiàn)存儲,分別創(chuàng)建 3 個(data-k8sdemo-pv-[1~3])滿足定義要求的 PV,如下:

apiVersion: v1
kind: PersistentVolume
metadata:
 name: data-k8sdemo-pv-1
spec:
 nfs:
   server: 192.168.124.21
   path: /statefulset/data1
 accessModes:
 - ReadOnlyMany
 capacity:
   storage: 100Mi
 storageClassName: k8sdemo-sc
   

部署與測試

創(chuàng)建 PV 與 StatefulSet:

kubectl apply -f k8sdemo-statefulset-pv1.yaml
kubectl apply -f k8sdemo-statefulset-pv2.yaml
kubectl apply -f k8sdemo-statefulset-pv3.yaml
kubectl apply -f k8sdemo-statefulset.yaml
 
.NET Core+Kubernetes怎么構(gòu)建項目  
.NET Core+Kubernetes怎么構(gòu)建項目  

注意::PV 命名順序并不代表被 PVC 的綁定順序,這兩者沒有關(guān)系,所以不用對上圖的數(shù)字編號對應(yīng)關(guān)系有疑問。

創(chuàng)建 Service:

kubectl apply -f k8sdemo-service.yaml
 
.NET Core+Kubernetes怎么構(gòu)建項目  

因為 Service 定義的是 Headless 模式,所以需要進(jìn)去 Pod 內(nèi)進(jìn)行接口訪問測試,如:kubectl exec -it k8sdemo-0 bash 進(jìn)入 k8sdemo-0 這個 Pod,通過域名 Pod 名稱.serviceName來訪問,如下:

curl k8sdemo-0.k8sdemo-service/weatherforecast
curl k8sdemo-1.k8sdemo-service/weatherforecast
curl k8sdemo-2.k8sdemo-service/weatherforecast
 

在 NFS 掛載目錄中查看接口訪問日志,以下是 Pod  k8sdemo-1 中的日志:

2020-09-20 06:01:17,451 [17] INFO  [k8sdemo-1] - Request starting HTTP/1.1 GET http://k8sdemo-1.k8sdemo-service/weatherforecast
2020-09-20 06:01:17,455 [17] INFO  [k8sdemo-1] - Executing endpoint 'T.K8SDemo.Controllers.WeatherForecastController.Get (T.K8SDemo)'
2020-09-20 06:01:17,458 [17] INFO  [k8sdemo-1] - Route matched with {action = "Get", controller = "WeatherForecast"}. Executing controller action with signature System.Collections.Generic.IEnumerable`1[T.K8SDemo.WeatherForecast] Get() on controller T.K8SDemo.Controllers.WeatherForecastController (T.K8SDemo).
2020-09-20 06:01:17,459 [17] INFO  [k8sdemo-1] - Executing ObjectResult, writing value of type 'T.K8SDemo.WeatherForecast[]'.
2020-09-20 06:01:17,460 [17] INFO  [k8sdemo-1] - Executed action T.K8SDemo.Controllers.WeatherForecastController.Get (T.K8SDemo) in 2.3627ms
2020-09-20 06:01:17,460 [17] INFO  [k8sdemo-1] - Executed endpoint 'T.K8SDemo.Controllers.WeatherForecastController.Get (T.K8SDemo)'
2020-09-20 06:01:17,461 [17] INFO  [k8sdemo-1] - Request finished in 9.9194ms 200 application/json; charset=utf-8
 

執(zhí)行 kubectl delete pod k8sdemo-1 刪除 Pod k8sdemo-1,等待一會 k8sdemo-1 會自動恢復(fù),然后重新訪問 curl k8sdemo-1.k8sdemo-service/weatherforecast,日志依然向原來的文件內(nèi)追加,也說明保留了原來的狀態(tài)。

2020-09-20 06:01:17,451 [17] INFO  [k8sdemo-1] - Request starting HTTP/1.1 GET http://k8sdemo-1.k8sdemo-service/weatherforecast
2020-09-20 06:01:17,455 [17] INFO  [k8sdemo-1] - Executing endpoint 'T.K8SDemo.Controllers.WeatherForecastController.Get (T.K8SDemo)'
2020-09-20 06:01:17,458 [17] INFO  [k8sdemo-1] - Route matched with {action = "Get", controller = "WeatherForecast"}. Executing controller action with signature System.Collections.Generic.IEnumerable`1[T.K8SDemo.WeatherForecast] Get() on controller T.K8SDemo.Controllers.WeatherForecastController (T.K8SDemo).
2020-09-20 06:01:17,459 [17] INFO  [k8sdemo-1] - Executing ObjectResult, writing value of type 'T.K8SDemo.WeatherForecast[]'.
2020-09-20 06:01:17,460 [17] INFO  [k8sdemo-1] - Executed action T.K8SDemo.Controllers.WeatherForecastController.Get (T.K8SDemo) in 2.3627ms
2020-09-20 06:01:17,460 [17] INFO  [k8sdemo-1] - Executed endpoint 'T.K8SDemo.Controllers.WeatherForecastController.Get (T.K8SDemo)'
2020-09-20 06:01:17,461 [17] INFO  [k8sdemo-1] - Request finished in 9.9194ms 200 application/json; charset=utf-8
2020-09-20 06:17:06,467 [12] INFO  [k8sdemo-1] - Request starting HTTP/1.1 GET http://k8sdemo-1.k8sdemo-service/weatherforecast
2020-09-20 06:17:06,494 [12] INFO  [k8sdemo-1] - Executing endpoint 'T.K8SDemo.Controllers.WeatherForecastController.Get (T.K8SDemo)'
2020-09-20 06:17:06,527 [12] INFO  [k8sdemo-1] - Route matched with {action = "Get", controller = "WeatherForecast"}. Executing controller action with signature System.Collections.Generic.IEnumerable`1[T.K8SDemo.WeatherForecast] Get() on controller T.K8SDemo.Controllers.WeatherForecastController (T.K8SDemo).
2020-09-20 06:17:06,533 [12] INFO  [k8sdemo-1] - Executing ObjectResult, writing value of type 'T.K8SDemo.WeatherForecast[]'.
2020-09-20 06:17:06,548 [12] INFO  [k8sdemo-1] - Executed action T.K8SDemo.Controllers.WeatherForecastController.Get (T.K8SDemo) in 17.1904ms
2020-09-20 06:17:06,549 [12] INFO  [k8sdemo-1] - Executed endpoint 'T.K8SDemo.Controllers.WeatherForecastController.Get (T.K8SDemo)'
2020-09-20 06:17:06,550 [12] INFO  [k8sdemo-1] - Request finished in 84.3414ms 200 application/json; charset=utf-8

另外對 Pod 副本進(jìn)行伸縮時效果也是一樣的,都會保持 Pod 具有的狀態(tài)。當(dāng)然文中的例子和一些組件的集群部署不太一樣,比如像 MySQL 這類組件,各實例間還會做數(shù)據(jù)同步來實現(xiàn)數(shù)據(jù)的一致性,當(dāng)然最終也是每個實例關(guān)聯(lián)自己的數(shù)據(jù)存儲卷。

感謝各位的閱讀,以上就是“.NET Core+Kubernetes怎么構(gòu)建項目”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對.NET Core+Kubernetes怎么構(gòu)建項目這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

網(wǎng)站標(biāo)題:.NETCore+Kubernetes怎么構(gòu)建項目
本文URL:http://www.chinadenli.net/article30/pejeso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器移動網(wǎng)站建設(shè)靜態(tài)網(wǎng)站外貿(mào)網(wǎng)站建設(shè)虛擬主機(jī)企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)