关联概念
- 流程
- 将软件投入到生产环境
- 架构
- 软件运行的环境结构
生产环境四个关键功能
- 服务管理接口
- 使开发人员能够创建、更新和配置服务
- 运行时服务管理
- 确保始终运行一定数量的服务实例
- 非中断更新
- 监控
- 让开发人员了解服务情况,包括日志文件和各种应用指标
- 可观测性
- 请求路由
- 将用户的请求路由到服务
部署模式
- 编程语言特定的发布包格式
- 举例
- js
- 发布就是发布源代码+模块目录
- go
- 某个目录下的可执行文件
- js
部署模式一
直接将发布包部署到机器上的问题
- 缺乏对技术栈的封装
- 运维需要了解服务的具体细节,比如说用什么实现的啊,如果是web应用,那么需要安装apache啊
- 无法约束服务实例消耗的资源
- 一个进程可能消耗掉整个机器的资源
- 缺少隔离
- 多个服务同时运行时,不可靠,服务之间相互影响
- 很难定位实例的位置
部署模式二
将服务部署为虚拟机
- 虚拟机镜像打包部署到生产环境,每个服务实例都是一个虚拟机
- 好处
- 封装了技术栈
- 隔离了服务实例
- 使用了成熟的云计算基础设施
- 弊端
- 资源利用效率低
- 一个服务拥有整个虚拟机的开销,包括操纵系统
- 部署速度慢
- 构建虚拟机需要几分钟
- 系统管理额外开销
- 操纵系统有时候需要打补丁
- 资源利用效率低
部署模式三
- 将服务部署为容器
- docker
- 构建docker镜像
- dockerfile描述如何构建镜像
- docker build
- 把docker镜像推送到镜像仓库
- 运行docker容器
- docker run
- 从容器中拉取镜像
- 创建并启动
- docker run
- 构建docker镜像
- 好处
- 封装技术栈
- 服务实例隔离
- 服务实例资源受到限制
- 轻量级,快速
- 弊端
- 需要承担大量的容器镜像管理工作
- 负责给系统和运行时打补丁
Kubernetes
- docker编排框架,docker之上的一个软件层
- 将一组计算机硬件资源转换程运行服务的单一资源池
- 只需要告诉编排框架运行n个实例,其他由它帮你搞定
- docker编排框架功能
- 资源管理
- 一组计算机,变成一个资源迟,一个计算机
- 调度
- 选择要运行容器的机器
- 意思是把服务功能有关系的部署到同一台机器上
- 选择要运行容器的机器
- 服务管理
- 服务的名词对应到具体服务
- 服务版本管理
- 资源管理
- 架构
- 主节点
- 负责管理集群
- 运行多个组件
- API服务器
- k8s命令
- etcd
- 存储集群数据键值的NoSql数据库
- 调度器
- 选择要运行的Pod的节点
- 控制器管理器
- 运行控制器,确保集群状态与预期状态匹配
- API服务器
- 普通节点
- 运行一个或多个pod
- pod由一组容器组成
- 运行多个组件
- kubelet
- 创建和管理节点上运行的pod
- kube-proxy
- 管理网络,包括跨pod的负载均衡
- pods
- 应用程序服务
- kubelet
- 运行一个或多个pod
- 主节点
- 关键概念
- Pod
- 基本部署单元
- Deployment
- Pod的声明性规范
- 每个服务都是k8s的一个deployment,控制pod的数量和版本
- Service
- 向客户端提供的一个静态/稳定的网络地址
- 具有一个IP和DNS名称,并对一个或多个Pod的流量进行负载均衡
- 这里的IP和DNS只能在K8s内部访问
- 当然可以配置成外部访问
- ConfigMap
- 键值对的配置
- pod的定义中可以引用
- 键值对的配置
- Pod
Istio
- 一个链接、管理和保护微服务的开放平台
- 是网络层,所有的网络流量都通过Istio进行处理
- 功能
- 流量管理
- 服务发现
- 负载均衡
- 路由规则
- 断路器
- 通信安全
- 传输层安全协议(TLS)保护服务间通信
- 遥测
- 捕获流量相关的指标,分布式跟踪
- 策略执行
- 强制实施配额和费率限制
- 流量管理
边车
- 与服务实例并行运行的进程或容器,负责实现服务运行需要的公共功能