.Net Core2.1 秒殺項目一步步實現CI/CD(Centos7.2)系列二:k8s高可用集羣搭建總結以及部署API到k8s

前言:本系列博客又更新了,是博主研究很長時間,親自動手實踐事後的心得,k8s集羣是購買了5臺阿里雲服務器部署的,這個集羣差很少搞了一週時間,關於k8s的知識點,我也是剛入門,這方面的知識建議參考博客園大神edisonchou的系列文章《.NET Core on K8S學習實踐系列文章索引(Draft版)》,爲何我要寫該系列的文章,是由於我以前 工做的幾家公司應用都已經容器化了,.net framework 應用也在慢慢遷移到.net core 上,.net core 從1.0就開始使用了,做爲開發人員,有些細節上的東西對開發人員是封閉的,咱們只知道項目開發完成經過Jenkins構建,構建完成把鏡像推送到HarBor,而後在禪道上建個發佈任務,貼上鏡像的地址,發給運維就行了。我就對這個過程很好奇,業餘時間也在研究這方面的東西。好了,暫且聊到這裏,下面我就分享一下本身在搭建k8s集羣的心得,有說的不對的地方還請糾正。html

 

1、k8s高可用集羣搭建總結

咱們都知道Kubernetes自身,側重穩定性、可擴展性、安全性;核心策略的變化小;周邊生態持續爆發。k8s搭建的方式有三種:(1)社區方案:雜亂、不可靠、升級難(2)kubeadm:優雅、簡單、支持高可用、升級方便、不易維護、文檔不夠細緻 (3)二進制部署,建議初學者使用二進制搭建,由於能夠快速放棄,哈哈哈,玩笑歸玩笑,二進制的方式易於維護、靈活、升級方便。個人k8s集羣使用的是二進制搭建的,5臺阿里雲的配置 以下:git

環境參數:k8s 1.14.0  Docker 17.03.1-ce  Harbor 1.6.0  Jenkins v2.150.2,必定 要注意版本問題,github

注意:使用雲服務器的,跳過keepalived的配置,不要用虛擬ip(雲環境通常都不支持本身定義虛擬ip)就直接把虛擬ip設置爲第一個master的ip就能夠了。vim

 PS:若是是必定要高可用的話能夠購買雲商的負載均衡服務(好比阿里雲的SLB),把backends設置成你的三個master節點,而後虛擬ip就配置成負載均衡的內網ip便可。api

具體的集羣搭建細節,我就不列出來了,由於不是重點。瀏覽器

2、部署WebAPI到k8s

  • 準備Deployment YAML

這個YAML文件,引用自Edison Zhou(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項目建立了一個namespace,叫作aspnetcore,所以這裏寫的namespace : aspnetcore。app

  K8S中經過標籤來區分不一樣的服務,所以這裏統一name寫成了k8s-demo。負載均衡

  在多實例的配置上,經過replicas : 2這個設置告訴K8S給我啓動2個實例起來,固然你能夠寫更大的一個數量值。

  最後,在spec中告訴K8S我要經過NodePort的方式暴露出來公開訪問,所以端口範圍從上一篇能夠知道,應該是 30000-32767這個範圍以內。

 

  • 經過kubectl 部署到k8s

須要前後執行如下命令:

kubectl create namespace aspnetcore // 建立一個命名空間「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://公網IP:8671/api/values

而後,咱們再到Dashboard中,看看k8s-demo的狀態:

咱們點擊命名空間,選擇:aspnetcore

固然了,你也能夠直接點擊:「集羣」選項下面的「命名空間」,點擊對應的名稱,裏面能夠看到詳細的信息。從Dashboard中能夠看到更爲詳細的信息,包括運行的Deployment、容器組(因爲咱們設置的replicas=2,所以會有2個容器運行起來)、副本集等等,也能夠經過Dashboard實時初步地監控咱們的API的運行狀況。

  • 經過Dashboard伸縮WebAPI

在Dashboard中,咱們能夠可視化地對咱們的Deployment進行容器實例的伸縮,具體操做能夠參考:https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_firststudy_part3.html,這裏我就再也不多說了。

 

 3、總結

本文,簡單總結了一下使用阿里雲部署高可用k8s集羣,可能有同窗說怎麼不詳細寫一下部署的過程呢?因爲時間倉促,部署的過程文檔還在整理中,何況,部署的過程和該系列文章的主題不符,你們能夠參考其餘文章,關於Dashboard,通常企業內部是不會使用的,都是自研的,只須要了解便可。該篇文章的目的,是 想讓你們體驗一下所謂的容器編排,以及asp.net core on k8s。筆者也是剛接觸,有不少東西須要學習,這只是k8s的一點點,由於還沒用到生產 環境,須要觀察一段時間,後期,我把部署的過程整理一下,再分享給你們。提早預告一下篇博客的主題:Jenkins+k8s,實現CI/CD,敬請期待。

這是該系類博客要使用的項目: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://coding.imooc.com/class/335.html(付費課程366.00)

 

 

做者:郭崢

出處:http://www.cnblogs.com/runningsmallguo/

本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文連接。

原文出處:https://www.cnblogs.com/runningsmallguo/p/11345620.html

相關文章
相關標籤/搜索