Kubernetes实战 - 从零开始搭建微服务 - 1.5 提高可用性-发布多节点的Node/Express网络应用程序
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配置文件,以平衡花费和可用性。