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

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

Kubernetes实战 - 从零开始搭建微服务

前言

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

关于可用性 high availability

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

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

计算可用性 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配置文件,以平衡花费和可用性。

参考及推荐

一些入门架构文章

posted @ 2020-05-25 16:41  Tim-  阅读(1040)  评论(1编辑  收藏