Kubernetes實戰 - 從零開始搭建微服務 - 1.5 提高可用性-釋出多節點的Node/Express網路應用程式
阿新 • • 發佈:2020-05-25
# 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 縮小
能大就能小,要不然就是貔貅了,