1.5 提高可用性-發布多節點的Node/Express網絡應用程序
Kubernetes實戰 - 從零開始搭建微服務
前言
在上一篇文章中,已經學習了如何簡單地開發一個單層網絡應用。【Kubernetes實戰 - 從零開始搭建微服務 1 - 使用kind構建一個單層架構Node/Express網絡應用程序】 ,本文將在上一篇基礎上,添加額外節點,目的在於提高可用性(high availability)。
關於可用性 high availability
在軟件產品環境下,如何提高服務穩定性,進而避免用戶流失,一直是架構師工作的核心。高可用性有一些基本的設計原則,
- 找到單一故障點/單點故障,就是在整個架構中,找到其中可用性最低的服務/點,增加冗余,以避免單點故障
- 可靠交叉(reliable crossover),沒找到很好的中文翻譯,即,當多服務交叉在一起,互相依賴度極高,它們可能成為單點故障
- 及時發現故障
計算可用性 high availability
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
# three node (two workers) cluster config
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
- source code
kind create cluster --config 3-nodes-config.yaml
kubectl get nodes
發布到k8s
參考【Kubernetes實戰 - 從零開始搭建微服務 1 - 使用kind構建一個單層架構Node/Express網絡應用程序】。
kind get clusters
獲取所有cluster- deploy, (配置文件見上文,或者這里repo)
-kubectl apply -f deployment.yaml
-kubectl apply -f service.yaml
scale up 擴展
-
kubectl get deployments
-
kubectl get pods
截止目前,雖然集群是多節點,但是pods和deployment都只有一個,接下來就是最重要的一步,擴展/Scale Up
kubectl scale deployments/a-node-deployment --replicas=2
scale down 縮小
能大就能小,要不然就是貔貅了,😀
kubectl scale deployments/a-node-deployment --replicas=1
結語
以上是一個k8s 手動擴展/縮小的過程,在實際產品中,這一般是一個自動過程,可以依托於雲/k8s服務提供商或者k8s配置文件,以平衡花費和可用性。