Kubernetes 如何部署微服务应用**最新2023**
注:全文引用书籍《微服务架构设计模式》12章【美】克里斯·里查森 著
部署微服务应用
1、传统部署方式(特定编程语言发布包)
- 专门的运维人员操作,服务器大多使用WebLogic、WebSphere,定期安装补丁更新软件。
- 轻量级web容器,Apache Tomcat、Jetty,手动操作。
好处:
- 快速部署,如jar、war、node.js 文件直接拷贝
- 高效的资源利用,多个服务实例共享机器和操作系统,在同一进程中效率更高。
弊端:
- 缺乏技术栈的封装,各种服务部署方式不同。
- 无法约束服务实例消耗的资源
- 服务无法隔离
- 很难自动判断放置服务实例的位置
2、虚拟机方式部署
部署方式:服务源代码创建虚拟机镜像,使用镜像灵活创建实例。
好处
- 封装技术栈,简单、可靠
- 使用成熟的云计算基础设施
弊端
- 资源利用率较低
- 部署速度相对较慢
- 系统管理额外开销
3、容器化部署
部署方式:构建容器镜像(如:Docker构建镜像时,分层文件系统),存储在镜像仓库,部署时从仓库拉取镜像来创建服务实例。
多个服务互相依赖,使用Docker Compose。可靠的部署至多台机器,须使用容器编排框架,如 Kubernetes。
好处
- 封装技术栈,使用容器API对服务管理。
- 服务实例间隔离
- 限制服务实例的资源消耗
弊端
- 容器镜像管理繁琐,容器基础设施和虚拟机基础设施管理(操作系统、运行时补丁)。
4、容器编排框架(Kubernetes)
Kubernetes 框架的三个主要功能:
- 资源管理:如CPU、内存、存储卷,将计算机集群当作一台服务器。
- 调度:选择运行容器的机器,根据资源使用情况动态调整。
- 服务管理:实现命名和版本话服务,服务间的负载均衡、滚动升级等
Kubernetes的架构:计算机节点分为 主节点(一个或多个)和多个普通节点(工作节点),工作节点运行一个或多个Pod(Pod由一组容器组成)。
主节点运行组件:
- API服务器,部署和管理服务的REST API,如可被kubectl调用。
- Etcd:存储集群数据
- 调度器:选择要运行Pod的节点
- 控制管理器:运行控制器,确保集群中实例数量稳定
普通节点运行的组件:
- Kubelet:创建和管理节点上Pod
- Kube-proxy:管理网络,将应用程序请求路由到Pod,跨Pod负载均衡
- Pods:应用程序服务
Kubernetes的关键概念
- Pod:基本的部署单元,它由一个或多个共享ip地址和存储卷的容器组成。
- Deployment:控制器,确保始终运行所需数量的Pod实例,通过滚动升级和回滚来支持版本控制。每个服务都是Kubernetes的一个Deployment。
- Service:向应用程序服务的客户端提供的一个静态/稳定的网络地址。基于TCP和UDP流量负载均衡处理,DNS名称解析IP地址。
- ConfigMap:名称与值对的命名集合,用于定义一个或多个应用程序服务的外部化配置。
Kubernetes 部署
1、创建Kubernetes对象(Deployment)编写YAML文件
2、启动 Pod 服务,使用kubectl apply命令向API服务器发出请求创建Deployment和Pod。
kubectl apply -f src/deploymeny/kubernetes/ftgo-restaurant-service.yml
3、创建 Kubernetes Service 对象,提供网络访问节点。
Istio 服务网络
- 流量管理:包括服务发现、负载均衡、路由规则和断路器
- 通信安全:使用传输层安全性(TLS)保护服务间通信
- 遥测:捕获有关网络流量的指标并实施分布式追踪
- 策略执行:强制实施配额和费率限制
5、Serverless 之 Lambda函数
四种方法调用lambda函数:
- HTTP请求:配置AWS API Gateway,讲请求路由到lambda
- AWS服务生成的事件:在DynamoDB表操作数据、在Kinesis流中读取消息等
- 定时调用
- 直接使用API调用
注:全文引用书籍《微服务架构设计模式》【美】克里斯·里查森 著