目录
36.SpringCloud? Config可以实现实时刷新吗?
38.什么是Kubernetes?Kubernetes与Docker有什么关系?
SpringCloud? Config实时刷新采用SpringCloud? ?Bus消息总线。
SpringCloud? GateWay 是SpringCloud官方推出的第二代网关框架,取代Zuul网关。网关在微服务系统中有着非常作用,网关常见的功能有路由转发,权限校验,限流控制等作用。
使用了一个RouteBuilder的bean去创建路由,除了创建路由RouteLocatorBuilder可以让你添加各种predicates和filters,predicates断言的意思,顾名思义就是根据具体的请求规则,由具体的route去处理,filters是各种过滤器,用来对请求做各种判断和修改。
是什么?
Kubernetes是一个开源容器管理工具,负责容器部署,容器扩缩容以及负载均衡。作为Google的创意之作,他提供了出色的社区,并与所有云提供商合作。因此,我们可以说Kubernetes不是一个容器化平台,而是一个多容器管理解决方案。
众所周知,Docker提供容器的生命周期管理,Docker镜像构建运行时容器。但是,由于这些单独的容器必须通信,因此使用Kubernetes。因此,我们说Docker构建容器,这些容器通过Kubernetes相互通信。因此,可以使用Kubernetes手动关联和编排在多个主机上运行的容器。
有哪些特性?
1.自我修复:在节点故障时可以删除失效容器,重新创建新的容器,替换和重新部署,保证预期的副本数量,kill掉检查失败的容器,并且在容器未准备好之前不会处理客户端情况,确保线上服务不会中断。
2.弹性伸缩:使用命令,UI或者K8s基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性,业务低峰时回收资源,以最小成本运行服务。
3.自动部署和回滚:k8s采用滚动更新策略更新应用,一次更新一个pod,而不是同时删除所有pod,如果更新过程中出现问题,将回滚恢复,确保升级不影响业务。
4.服务发现和负载均衡:k8s为多个容器提供一个统一访问入口(内部IP地址和一个dns名称)并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。
5.机密和配置管理:管理机密数据和应用程序配置,而不需要把铭感数据暴露在镜像里,提高敏感数据安全性,并可以将一些常用的配置存储在k8s中,方便应用程序调用。
6.存储编排:挂载外部存储系统,无论时来自本地存储,公有云,还是网络存储,都作为集群资源的一部分使用,极大提高存储使用灵活性
7.批处理:提供一次性任务,定时任务:满足批量数据处理和分析的场景。
Kubernate主要由以下几个核心组件组成:
1.etcd:提供数据库服务保存了整个集群的状态。
2.kube apiserver:提供了资源操作的唯一入口,并提供认证,授权,访问控制,API注册和发现等机制
3.kube? controller? manager:负责维护集群的状态,比如故障检测,自动扩展,滚动更新等
4.cloud? controller? ?manager:是与底层云计算服务商交互的控制器
5.kub? scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
6.kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
7.kube? proxy:负责为Service提供内部的服务发现和负载均衡,并维护网络规则
8.container? ?runtime是负责管理运行容器的软件,比如docker.
除了核心组件,还有一些推荐的Add? ons:
1.kube dns:负责为整个集群提供DNS服务。
2.ingress? Controller为服务提供外网入口
3.Heapster提供资源监控
4.Dashboard提供GUI
5.Federation提供可用区的集群
6.Fluentd? ?elasticsearch提供集群日志采集,存储与查询
Cluster,Master,Node
Cluster
Cluster(集群)是计算,存储和网络资源的集合,Kubernetes利用这些资源运行各种基于容器的应用。最简单的Cluster可以只有一台主机(他既是Master也是Node)
Master
1.Master是Cluster的大脑,他的主要职责是调度,即决定将应用放在哪里运行。
2.Master运行Linux操作系统,可以是物理机或者虚拟机。
3.为了实现高可用,可以运行多个Master。
Node
1.Node的职责是运行容器应用。
2.Node由Master管理,Node负责监控并汇报容器的状态,并根据Master的要求管理容器的生命周期。
3.Node运行在Linux操作系统,可以是物理机或者是虚拟机。
Pod
1.基本概念?
①Pod是Kubernetes的最小工作单元。
②每个Pod包含一个或者多个容器。Pod中的容器会作为一个整体被Master调度到一个Node上运行。
2.引入Pod的目的
①可管理性:有些容器天生就是需要紧密联系的,一起工作。Pod提供了比容器更高层次的抽象,将他们封装到一个部署单元中。Kubernetes以Pod为最小单元进行调度,扩展,共享资源,管理生命周期。
②通信和资源共享:Pod中所有容器使用同一个网络namespace,即相同的IP地址和Port空间。他们可以直接用localhost通信。同样的,这些容器可以共享存储,当Kubernetes挂载volume到Pod,本质上是将volume挂载到Pod中的每一个容器。
3.Pod的使用方式
①运行单一容器:one? container? per Pod是Kubernetes是最常见的模型,这种情况下,只是将单个容器简单封装成Pod。即便是只有一个容器,Kubernetes管理的也是Pod而不是直接管理容器。
②运行多个容器:对于那些联系非常紧密,而且需要直接共享资源的容器,应该放在一个Pod中。比如下面这个Pod包含两个容器:一个File Puller,一个Web? Server。File? Puller会定期从外部的Content? Manager中拉取最新的文件,将其存放在共享的volumn中。Web? Server从volume读取文件,相应Consumer的请求。这两个容器是紧密协作的,他们一起为Consumer提供最新的数据;同时他们也通过volume共享数据。所以放到一个Pod是合适的。
Controller
1.基本概念
Kubernetes通常不会直接创建Pod,而是通过Controller来管理Pod的。Controller中定义了Pod的部署特性,比如有几个副本,在什么样的Node上运行等。为了满足不同的业务场景,Kubernetes提供了多种Controller,包括Deployment,ReplicaSet,DaemonSet,StatefulSet,Job等。
2.各个Controller
Deployment:Deployment是最常用的Controller,比如我们可以通过创建Deployment来部署应用的。Deployment可以管理Pod的多个副本,并确保Pod按照期望的状态运行。
ReplicaSet:ReplicaSet实现了Pod的多副本管理。使用Deployment时会自动创建ReplicaSet,也就是说Deployment时通过ReplicaSet来管理Pod的多个副本,我们通常不需要直接使用ReplicaSet。
DaemonSet:DaemonSet用于每个Node最多只运行一个Pod副本的场景。正如其名称所揭示的,DaemonSet通常用于运行daemon。
StatefuleSet:StatefuleSet能够保证每个副本在整个生命周期中名称是不变的。而其他Controller不提供这个功能,当某个Pod发生故障需要删除并重新启动时,Pod的名称会发生变化。同时StatefulSet会保证副本按照固定的顺序启动,更新或者删除。
Job:Job用于运行结束就删除的应用。而其他Controller中的Pod通常是长期持续运行。
Service,NameSpace
1.Service
①Deployment可以部署多个副本,每个Pod都有自己的IP。而Pod很有可能会被频繁的销毁和重启,他们的IP会发生变化,用IP来访问Deployment副本不太现实。
②Service定义了外界访问一组特定Pod的方式。Service有自己的IP和端口,Service为Pod提供了负载均衡。
2.NameSpace
①NameSpace可以将一个屋里的Cluster逻辑上划分成多个虚拟Cluster,每个Cluster就是一个NameSpace。不同Namespace里的资源是完全隔离的。
②Kubernetes默认创建了两个NameSpace:
? ? default:创建资源时如果不指定,将被放到这个NameSpace中。
? ? kube? system:Kubernetes自己创建的系统资源将放到这个Namespace中。