1.5 提高可用性-发布多节点的Node/Express网络应用程序

前言

在上一篇文章中,已经学习了如何简单地开发一个单层网络应用。【Kubernetes实战 - 从零开始搭建微服务 1 - 使用kind构建一个单层架构Node/Express网络应用程序】 ,本文将在上一篇基础上,添加额外节点,目的在于提高可用性(high availability)。

关于可用性 high availability

在软件产品环境下,如何提高服务稳定性,进而避免用户流失,一直是架构师工作的核心。高可用性有一些基本的设计原则,

  1. 找到单一故障点/单点故障,就是在整个架构中,找到其中可用性最低的服务/点,增加冗余,以避免单点故障
  2. 可靠交叉(reliable crossover),没找到很好的中文翻译,即,当多服务交叉在一起,互相依赖度极高,它们可能成为单点故障
  3. 及时发现故障

计算可用性 high availability

Kubernetes实战 - 从零开始搭建微服务 - 1.5 提高可用性-发布多节点的Node/Express网络应用程序-LMLPHP

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

Kubernetes实战 - 从零开始搭建微服务 - 1.5 提高可用性-发布多节点的Node/Express网络应用程序-LMLPHP

  • kubectl get nodes

Kubernetes实战 - 从零开始搭建微服务 - 1.5 提高可用性-发布多节点的Node/Express网络应用程序-LMLPHP

发布到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

    Kubernetes实战 - 从零开始搭建微服务 - 1.5 提高可用性-发布多节点的Node/Express网络应用程序-LMLPHP

  • kubectl get pods

    Kubernetes实战 - 从零开始搭建微服务 - 1.5 提高可用性-发布多节点的Node/Express网络应用程序-LMLPHP

截止目前,虽然集群是多节点,但是pods和deployment都只有一个,接下来就是最重要的一步,扩展/Scale Up

  • kubectl scale deployments/a-node-deployment --replicas=2

Kubernetes实战 - 从零开始搭建微服务 - 1.5 提高可用性-发布多节点的Node/Express网络应用程序-LMLPHP

scale down 缩小

能大就能小,要不然就是貔貅了,

05-04 00:53