1. 程式人生 > >.Net Core2.1 秒殺專案一步步實現CI/CD(Centos7.2)系列一:k8s高可用叢集搭建總結以及部署API到k8s

.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叢集的心得,有說的不對的地方還請糾正。

 

一、k8s高可用叢集搭建總結

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

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

注意:使用雲伺服器的,跳過keepalived的配置,不要用虛擬ip(雲環境一般都不支援自己定義虛擬ip)就直接把虛擬ip設定為第一個master的ip就可以了。

 PS:如果是一定要高可用的話可以購買雲商的負載均衡服務(比如阿里雲的SLB),把backends設定成你的三個master節點,然後虛擬ip就配置成負載均衡的內網ip即可。

具體的叢集搭建細節,我就不列出來了,因為不是重點。

二、部署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。

  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,這裡我就不再多說了。

 

 三、總結

本文,簡單總結了一下使用阿里雲部署高可用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/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。