一、雷电多开ip代理集中式架构
1.以Web层、服务层、数据访问层为代表的三层架构。
面向企业内部员工、部署在内部局域网。
2.主流的技术是SSH或者SSM,典型的全栈工程师时代。
SSH:Spring + Struts(SpringMVC) + Hibernate
SSM:Spring + Struts(SpringMVC) + Mybatis
前端:js/jQuery
3.性能水平/系统容量/扩容方式
服务的用户规模有限/增长慢,全部是企业内部员工。
垂直扩容:增加或提高服务器配置的方式
二、分布式架构
需要一个仅通过加机器即可完成服务能力水平扩容的架构模式。
1.分布式场景相关的CAP定理。
CAP三选二,即满足CP或AP,采用最终一致性替代传统事务ACID强一致性。
2.SOA架构时代
面向服务的架构
特征是中心化,具有一个数据雷电多开ip代理总线负责服务之间的路由转发、协议转换。
3.微服务架构时代
特征是去中心化,在客户端做负载均衡、异常容错、服务限流、熔断、降级。
Dubbo/SpringCloud + 注册中心
4.云原生架构时代(Cloud Native)
服务
容器(Docker/Kubernetes)
网格(Linkerd、Envoy、Istio等Sevice Mesh产品)
相对侵入式微服务框架而言
云产品
三、云原生
云平台上的服务
1.云与云计算
云,一个提供资源的平台
云计算,按需分配资源和弹性计算
2.云计算的三种基本服务类型
IaaS,关注硬件基础设施的基础设施即服务
PaaS,关注软件和中间件平台的平台即服务
SaaS,关注业务应用的软件即服务
2.云原生(Cloud Native)
Pivotal公司
在2013年提出云原生,先后开源Spring Boot和Spring Cloud
Google公司
在2015年成立CNCF(Cloud Native Computing Foundation)
推出Kubernetes
四、Docker
1.Docker是什么?
雷电多开ip代理一种容器化技术,可以被看作是一个集装箱。
将App及其依赖的环境资源封装到一个可被移植的容器中,这个容器就是Docker。
2.Docker镜像是什么?
一个封装了App及其依赖的环境资源的Docker就是一个Docker的镜像。
3.Docker具体怎么用?
部署最新版本的Docker镜像,其历史版本做回滚备份。
五、Kubernetes
1.Kubernetes可以做什么?
一个可以被看作是云平台上的分布式操作系统,提供容器调度和编排的能力。
调度能力
将分布式系统中的闲置资源合理分配给需要运行的进程并采用容器进行封装的过程。
编排能力
对系统中的容器进雷电多开ip代理行健康检查、自动扩容/缩容、自动重启、滚动发布等过程。
2.Kubernetes的分布式架构
Kubernetes的分布式架构
Kubernetes集群部署被定义为:
Master
Kubernetes Master
控制节点,一种特殊的Node:
组件功能API集群的统一访问入口Scheduler对Node资源计算及调度controller manager监听API,容器编排及部署后的管理,处理常规的后台任务etcd存储集群状态数据Node
Kubernetes Node
工作节点,普通Node:
组件功能Kubelet管理当前Node上的容器Proxy负责网络代理、负载均衡3.Kubernetes核心组件
etcd
协同存储,负责保存整个集群的状态,通常会部署2N+1个节点来保证其高可用性。
API
提供了资源操作的唯一入口,提供认证、授权、访问控制、API注册和发现等机制。
controller manager
负责维护集群的状态,雷电多开ip代理执行故障检测、自动扩展、滚动更新等操作。
Scheduler
负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上。
Kubelet
作为工作节点负责维护容器的生命周期,
同时负责对容器存储接口(CSI)和容器网络接口(CNI)进行管理。
容器运行时
负责镜像管理,实现Pod和容器的真正运行。
Proxy
负责提供集群内部的服务发现和负载均衡。
4.Kubernetes插件
CoreDNS,负责为整个集群提供DNS服务。
Ingress Controller,负责为服务提供外网入口。
Prometheus,负责资源监控。
Dashboard,负责提供GUI。
Federation,负责提供跨可用区的集群。
Istio插件,提供限流、灰度(灰度策略:version、header、cookie)、故障转移能力
5.Kubernetes的分层架构
核心层,Kubernetes的核心
对外提供API雷电多开ip代理构建高层应用
对内提供插件式应用执行环境
应用层,负责部署和路由
可部署的应用包括无状态应用、有状态应用、批处理任务、集群应用
路由的类型主要有服务发现、DNS解析
管理层,负责自动化及策略管理
自动化主要有自动扩展、动态部署
策略管理主要有RBAC、ResourceQuota、NetworkPolicy
接口层,负责提供一些实用工具
kubectl命令行工具
客户端SDK等用于客户端操作的库
集群联邦
云原生生态系统
接口层之上的负责容器集群管理调度的生态系统
Kubernetes内部
CRI,即容器运行时接口
CNI,即容器网络接口
CSI,即容器存储接口
镜像仓库
云供应商
雷电多开ip代理身份供应商
六、Kubernetes基本操作
1.官方网站(学习、理解、声明式配置示例)
https://kubernetes.io/zh/
2.声明式设计
用户编写YAML格式的程序编排文件
kubernetes将其转换为JSON格式
用户通过Restful Http方式与API Server进行通信
kubernetes组件基于gRPC进行通信
3.kubernetes本身只提供了程序部署及资源调度的能力。
4.kubernetes开发语言
Ballerina、Pulumi云原生语言
Go语言客户端库
5.kubernetes对象
资源对象
如Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob、Node、Service、Ingress、Namespace、Label等。
存储对象
策略对象
身份对象
6.通过yaml配置文件来描述资源对象
配置文件主要包含以下4个部分:
apiVersion:资源版本 kind: 资源类型,如Pod、Service、Deployment、Ingress metadata: 元信息,比如资源名称、命名空间(逻辑隔离) spec: 资源规范字段,比如容器相关信息(镜像、容器端口)每一个kubernetes对象都包含spec和status两个字段。
yaml雷电多开ip代理配置文件示例(nginx-pod.yml)
apiVersion: v1kind:Podmetadata:namespace: nginxname: nginx-podlabels:app: nginx-podspec:containers:name: nginximage: nginximagePullPolicy: IfNotPresentports:containerPort: 807.命令行工具
通过kubectl工具可以传递yaml格式参数。
#查看支持的全部资源kubectl api-resources#查看支持的全部版本kubectl api-versions#查看nginx服务部署kubectl get pods --namespace nginx#查看nginx服务部署显示的结果NAME READY STATUSRESTARTSAGEnginx-pod 1/1Running03m#创建 Podkubectl apply -f--namespace=cpu-example#curl :8081/api/v1/nginx/nginx-pod#查看部署情况kubectl get pods#查看服务kubectl get service --namespace nginx#查看服务显示的结果 NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEnginx-service NodePort127.0.0.1<none>80:80/TCP1m8.Master
apiserver
一个static Pod,可提供对资源CURD操作的Web服务能力。
scheduler
一个static Pod,可提供资源调度计算的能力,一个资源调度器。
在部署开始前,封装Pod、为Pod分配一个资源合适的Node,然后分配资源。
controller manager
一个static Pod,可提供容器编排的能力,基础对象Pod的控制管理器。
监听API Server
负责部署及部署之后的管理,Pod的几种管理方式:
Pod的管理方式说明Deployment无状态部署,雷电多开ip代理最常用的部署配置创建/更新/删除/暂停及恢复、健康检查/存活StatefulSet有状态部署ES集群、MySQL集群、Redis集群DaemonSet守护服务每个Node节点都有,可以做日志采集、主机安全检测Job单次执行的任务CronJob定时周期性执行的任务通过ReplicaSet/Deployment这两种管理对象来部署和管理多个Pod。
在部署的过程中,新旧版本在短时间内会同时存在,互不影响。
controller可以启动新Pod,可以杀死正在运行中的Pod,因此可能会出现以下现象:
Pod从生到死带来服务中断,正在处理的请求被丢弃;
Pod从死到生的时间差造成服务的不可用;
杀死Pod的N个理由:Probe Failure、Node负载过高、App进程异常。
etcd
一个存雷电多开ip代理储集群信息的数据库,具有强一致性。
在部署Docker镜像时,服务地址会写到etcd。
9.Node
Kubelet
节点代理,在kubelet初始化时向Master注册说明自己是一个Node,同时负责维护Node上的容器生命周期。
Pod
Node上运行的最小的管理单元,容器管理的抽象层。
K8S只能看见Pod,Pod能看见容器。
在集群内部,Pod是可以随时被删除、升级、回滚的,因此Pod本身没有提供可被外部直接访问的能力。
kube-proxy
在Node上运行的网络代理,负责服务发现和负载均衡,配合云供应商适配不同场景。
Service/Ingress
通过使用Service来提供集群内部的负载均衡,暴漏集群内的服务供外部客户端访问,这个过程相当于反向代理,但是
Service,这种方式是云供应商提供的负载均衡器。
Ingress,这种方式是自定义负载均衡器,如Nginx Ingress Controller。
自定义:替代kube-proxy
在Service中声明Pod资源(创建Service和Pod的绑定关系,如访问类型、端口映射等)来提供可被外部访问的能力,yaml配置文件示例(nginx-service.yml):
apiVersion: v1kind: Servicemetadata:namespace: nginx name: nginx-servicelabels:app: nginx-servicespec:selector: app: nginx-podports:port: 80targetPort: 80 type: NodePortspec部分配置内容说明
字段说明selector指定选择器,建立绑定关系ports约定端口映射关系type约定类型,NodePort描述使用该节点的IP和端口对外提供服务