.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/

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM