1. 程式人生 > >Kubernetes實戰 - 從零開始搭建微服務 - 1.5 提高可用性-釋出多節點的Node/Express網路應用程式

Kubernetes實戰 - 從零開始搭建微服務 - 1.5 提高可用性-釋出多節點的Node/Express網路應用程式

# 1.5 提高可用性-釋出多節點的Node/Express網路應用程式 > Kubernetes實戰 - 從零開始搭建微服務 ## 前言 在上一篇文章中,已經學習瞭如何簡單地開發一個單層網路應用。[【Kubernetes實戰 - 從零開始搭建微服務 1 - 使用kind構建一個單層架構Node/Express網路應用程式】](https://www.cnblogs.com/tim-unity/p/k8s-kind-get-started-to-deploy-an-express-app.html) ,本文將在上一篇基礎上,新增額外節點,目的在於提高可用性(high availability)。 ### 關於可用性 high availability 在軟體產品環境下,如何提高服務穩定性,進而避免使用者流失,一直是架構師工作的核心。高可用性有一些基本的設計原則, 1. 找到單一故障點/單點故障,就是在整個架構中,找到其中可用性最低的服務/點,增加冗餘,以避免單點故障 2. 可靠交叉(reliable crossover),沒找到很好的中文翻譯,即,當多服務交叉在一起,互相依賴度極高,它們可能成為單點故障 3. 及時發現故障 ### 計算可用性 high availability ![](https://img2020.cnblogs.com/blog/795737/202005/795737-20200525072442679-206672480.png) A(可用性),MTBF(平均故障間隔),MDT(平均修復時間) 舉個例子,AWS S3 儲存服務HA保證值就在99.99%,耐用性durability是11個9 - 99.999999999%。 ## kind 建立一個多節點叢集 k8s設計本身就是在於降低容器devops維護複雜度,提高可用性。 在上一篇文章的介紹裡,整個App執行在單叢集、單節點的情況下,雖然我們使用了Kubernetes,但是並沒有發揮其優勢,node service 仍然是一個無冗餘的單點服務。其實使用kind可以很容易地增加節點,以提高可用性。 3-nodes-config.yaml ```yaml # three node (two workers) cluster config kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker - role: worker ``` - [source code](https://github.com/tim-hub/kubernetes-deploy-sample/tree/master/1.5-k8s-kind-multi-nodes) - `kind create cluster --config 3-nodes-config.yaml` ![](https://img2020.cnblogs.com/blog/795737/202005/795737-20200525075618799-549456053.png) - `kubectl get nodes` ![](https://img2020.cnblogs.com/blog/795737/202005/795737-20200525080058039-264637593.png) ## 釋出到k8s 參考[【Kubernetes實戰 - 從零開始搭建微服務 1 - 使用kind構建一個單層架構Node/Express網路應用程式】](https://www.cnblogs.com/tim-unity/p/k8s-kind-get-started-to-deploy-an-express-app.html)。 - `kind get clusters` 獲取所有cluster - deploy, (配置檔案見上文,或者這裡[repo](https://github.com/tim-hub/kubernetes-deploy-sample)) - `kubectl apply -f deployment.yaml` - `kubectl apply -f service.yaml` ## scale up 擴充套件 - `kubectl get deployments` ![](https://img2020.cnblogs.com/blog/795737/202005/795737-20200525080948252-403178637.png) - `kubectl get pods` ![](https://img2020.cnblogs.com/blog/795737/202005/795737-20200525081038024-446328541.png) 截止目前,雖然叢集是多節點,但是pods和deployment都只有一個,接下來就是最重要的一步,擴充套件/Scale Up - `kubectl scale deployments/a-node-deployment --replicas=2` ![](https://img2020.cnblogs.com/blog/795737/202005/795737-20200525081301816-692688783.png) ## scale down 縮小 能大就能小,要不然就是貔貅了,