前言:本系列博客又更新了,是博主研究很長時間,親自動手實踐過后的心得,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/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。