当前位置: 首页 新闻详细

应用命名空间和实例命名空间的使用场景——K8S学习指南(5)-k8s核心对象namespace

专业编程培训机构——完成蜕变以后轻松拿高薪

电话+V:159999-78052 ,欢迎咨询应用命名空间和实例命名空间的使用场景,[python实用课程],[C++单片机原理],[C#网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]

一、Nacos-参数配置

Nacos中的参数有很多,如:命名空间、分组名、服务名、保护阀值、服务路由类型、临时实例等,那这些参数都是什么意思?又该如何设置?

在Nacos中通过命名空间(Namespace)+分组(Group)+服务名(Name)可以定位到一个唯一的服务实例。

命名空间(Namespace):Nacos服务中最顶层、也是包含范围最广的概念,用于强制隔离类似环境或者租户等场景。Nacos的服务也需要使用命名空间来进行隔离。命名空间在Nacos控制台的一级目录里可以找到,如下所示:

在服务列表中也能看到命名空间的身影,如下所示:

命名空间默认为public,在项目开发中,如果不指定命名空间,那么会使用默认值public。官方推荐使用运行环境来定义命名空间,如生产版本可使用public,开发版可定义为private。在项目开发中,可通过配置"spring.cloud.nacos.discovery.namespace"老定义命名空间,如下所示:

命名空间在使用前,必须先在控制台新建命名空间,如下所示:

如果在控制台没有新建命名空间,直接在项目中使用的话,是不能将服务成功注册到Nacos中的,如下在项目中配置一个未新建的dev命名空间,如下所示:

然后启动项目,会发现,在Nacos控制台的服务列表中一直刷新不到任何服务实例

分组名(Group):Nacos中次于命名空间的一种隔离概念,区别于命名空间的强制隔离属性,分组属于一个弱隔离概念,主要用于逻辑区分一些服务使用场景或不同应用的同名服务,用常用的情况主要是同一个服务的测试分组和生产分组、或者将应用名作为分组以防止不同应用提供的服务重名。分组名在Nacos控制台的服务列表中可以看到,如下所示:

分组名默认为DEFAULT_GROUP,在项目中可通过"spring.cloud.nacos.discovery.group"来设置,如下所示:

此项可省略,省略时的默认值为DEFAULT_GROUP。分组名可以直接在项目中使用,无需像命名空间那样,在使用前还要在控制台中新建,设定了分组名之后,刷新服务列表就可以看到新的分组名称了,如下所示:

服务名(Name):该服务实际的名字,一般用于描述该服务提供了某种功能或能力。通常推荐使用由运行环境作为命名空间、应用名作为分组,服务功能作为服务名的组合来确保该服务的天然唯一性,当然使用者可以忽略命名空间和分组,仅使用服务名作为服务唯一标识,这就需要使用者在定义服务名的额外增加自己的规则来确保在使用中能够唯一定位到该服务而不会发现到错误的服务上。服务名在项目中可以通过"spring.application.name"来指定,如下所示:

健康保护阈值(ProtectThresHold):为了防止因过多实例故障,导致所有流量全部流入剩余实例,继而造成流量压力将剩余实例被压垮形成雪崩效应。应将健康保护阈值定义为一个0到1之间的浮点数。当域名健康实例数占总服务实例数的比例小于该值时,无论实例是否健康,都会将这个实例返回给客户端。这样做虽然损失一部分流量,但是保证了集群中剩余健康实例能正常工作。简单来说,保护阈值是一个0-1浮点数,保护阈值是允许群里中健康实例占比的最小值,如果实际健康实例的占比小于或等于设置的保护阈值时,就会触发阈值保护,如下所示,设置保护阈值为0.75:

停掉唯一的健康实例,集群的健康实例占比降成了0%,小于设置的保护阈值0.75,此时就会触发阈值保护,如下所示:

服务路由类型的设置如下所示:

它是用来设置服务的路由策略的,默认值为none。如果设置为label(标签)模式,需要设置响应的标签表达式来匹配实例选择器(Selector),通过实例选择器可以完成自定义负载均衡策略,比如我们可以自定义实例选择器,实现就近访问的负载均衡策略,这样消费者在调用时,会优先调用离自己比较近的IP节点,从而实现更高效的服务调用。

权重(Weight):实例的级别配置。权重为浮点数,范围为0-10000。权重越大,分配给该实例的流量越大。它是针对服务实例进行设置的,如下所示:

在Nacos中服务实例有二种类型:持久化实例和临时实例(也叫非持久化实例)。在控制台中"临时实例"为true时,表示此服务为临时实例,如下所示:

临时实例和持久化实例的区别主要有一下两点:

在项目开发中,可以通过设置
“spring.cloud.nacos.discovery.ephemeral”来指定服务的实例类型,默认为临时实例,也就是默认“spring.cloud.nacos.discovery.ephemeral=true”。如果要设置持久化实例,需要设置“spring.cloud.nacos.discovery.ephemeral”设置为false,如下图所示:

服务的实例类型一旦确定之后,整个生命周期内不允许被修改,如果试图修改实例类型会提示如下错误:

二、K8S学习指南(5)-k8s核心对象namespace

Kubernetes(简称K8s),一个开源的容器编排平台,通过自动化部署、扩展和管理来提升容器化应用的管理效率。在K8s架构中,Namespace作为核心概念,起到了划分和组织集群资源的关键作用。本文将详细阐述Namespace的内涵、应用场景以及其实现方法。

什么是Namespace?

Namespace是K8s中的一项功能,用于在集群内创建虚拟的资源隔离区域,帮助管理和区分不同的应用程序和服务,确保资源的有效组织和管理。

Namespace类型与创建

Kubernetes默认提供一些命名空间,同时也允许用户自定义命名空间。使用kubectl命令行工具,如`kubectlcreatenamespacemy-namespace`,即可创建一个新命名空间。

实践应用示例

在多团队共享的集群中,每个团队可以拥有独立的命名空间,例如`team-a`、`team-b`和`team-c`,便于资源隔离和团队间的协同工作。

切换和管理命名空间

在kubectl中,通过`kubectl--namespace=team-a`可以切换到特定命名空间,而`kubectlgetnamespaces`则能查看集群中所有命名空间。

在命名空间部署应用

部署应用时,只需在kubectl命令中添加`--namespace`参数,如`kubectldeployapp-nteam-a`,在指定命名空间内进行操作。

资源隔离与权限控制

<Kubernetes的RBAC(Role-BasedAccessControl)允许对不同命名空间的资源访问进行精细化管理,确保每个团队只能访问其对应命名空间的资源。

删除命名空间

在不再需要某个命名空间和其中资源时,使用`kubectldeletenamespaceteam-a`来彻底清除。

总结

三、Zookeeper原理解析

微信公众号:Spark大数据

一、Zookeeper介绍

ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。

分布式应用可以基于它实现更高级的服务,实现诸如同步服务、配置维护和集群管理或者命名的服务。Zookeeper服务自身组成一个集群,2n+1个(奇数)服务允许n个失效,集群内一半以上机器可用,Zookeeper就可用。

应用命名空间和实例命名空间的使用场景

假设3台机器组成的集群,可以有允许一台失效,如果有2台失效,这个集群就不可用,1<1.5,一般的搭建zookeeper集群时,以奇数台机器来搭建。目的:是为了提高容错能允许多损失一台。

1.1数据模型

1)ZooKeeper本质上是一个分布式的小文件存储系统;

2)Zookeeper表现为一个分层的文件系统目录树结构(不同于文件系统的是,节点可以有自己的数据,而文件系统中的目录节点只有子节点),每个节点可以存少量的数据(1M左右)。

3)每个节点称做一个ZNode。每个ZNode都可以通过其路径唯一标识。

4)ZooKeeper中的每个节点存储的数据要被原子性的操作。也就是说读操作将获取与节点相关的所有数据,写操作也将替换掉节点的所有数据。

5)在zookeeper创建顺序节点(create-s),节点路径后加编号,这个计数对于此节点的父节点来说是唯一的。

/app/

/s100000000001

/s100000000002

6)ZooKeeper中的节点有两种,分别为临时节点和永久节点。节点的类型在创建时即被确定,并且不能改变。

①临时节点:在客户端用create-e创建,该节点的生命周期依赖于创建它们的会话。一旦会话(Session)结束,临时节点将被自动删除,当然可以也可以手动删除。虽然每个临时的Znode都会绑定到一个客户端会话,但他们对所有的客户端还是可见的。另外,**ZooKeeper的临时节点不允许拥有子节点。

②永久节点:在客户端用create创建,该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,他们才能被删除。

7)客户端可以给节点设置watch,我们称之为监视器。当节点状态发生改变时(Znode的增、删、改)将会触发watch所对应的操作。当watch被触发时,ZooKeeper将会向客户端发送且仅发送一条通知。

分布式锁

zookeeper是高可用协调流程图

1.2zookeepr角色介绍

领导者(leader),负责进行投票的发起和决议,更新系统状态(数据同步),发送心跳。

学习者(learner),包括跟随者(follower)和观察者(observer)。

跟随者(follower),用于接受客户端请求、向客户端返回结果,在选主过程中参与投票。

观察者(Observer),可以接受客户端请求,会把请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。

1)leader失效后会在follower中重新选举新的leader

2)每个follower都和leader有连接,接受leader的数据更新操作

3)客户端可以连接到每个server,每个server的数据完全相同

4)每个节点的服务Server,记录事务日志和快照到持久存储

1.3工作原理

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。

恢复模式:当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,恢复模式不接受客户端请求,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

广播模式:一旦Leader已经和多数的Follower进行了状态同步后,他就可以开始广播消息了,即进入广播状态。这时候当一个Server加入ZooKeeper服务中,它会在恢复模式下启动,发现Leader,并和Leader进行状态同步。待到同步结束,它也参与消息广播。ZooKeeper的广播状态一直到Leader崩溃了或者Leader失去了大部分的Followers支持。

1.4Zookeeper节点数据操作流程

(1)写操作

1)在Client向Follwer或Observer发出一个写的请求;

2)Follwer或Observer把请求发送给Leader;

3)Leader接收到以后向所有follower发起提案;

4)Follwer收到提案后执行写操作,然后把操作结果发送给Leader;

5)当多数follower返回提案结果后,leader会commit该提议,通知其他Follower和Observer同步信息;

6)Follwer或Observer把请求结果返回给Client。

(2)读操作

1)在Client向Follwer或Observer发出一个读的请求;

2)Follwer或Observer把请求结果返回给Client;

1.5主要特点

最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的特性;

可靠性:具有简单、健壮、良好的性能,如果消息被某一台服务器接受,那么它将被所有的服务器接受;

实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口;

等待无关(wait-free):慢的或者失效的client,不得干预快速的client的请求,使得每个client都能有效的等待;

原子性:更新只能成功或者失败,没有中间状态;

顺序性:按照客户端发送请求的顺序更新数据。

1.6zookeepr应用场景

1.6.1数据发布与订阅

发布与订阅即所谓的配置管理,顾名思义就是将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。

应用配置集中到节点上,应用启动时主动获取,并在节点上注册一个watcher,每次配置更新都会通知到应用。

1.6.2命名空间服务分布式命名服务,创建一个节点后,节点的路径就是全局唯一的,可以作为全局名称使用。

1.6.3分布式通知/协调

不同的系统都监听同一个节点,一旦有了更新,另一个系统能够收到通知。

1.6.4分布式锁

Zookeeper能保证数据的强一致性,用户任何时候都可以相信集群中每个节点的数据都是相同的。锁的两种体现方式:

(1)保持独占

一个用户创建一个节点作为锁,另一个用户检测该节点,如果存在,代表别的用户已经锁住,如果不存在,则可以创建一个节点,代表拥有一个锁。

(2)控制时序

有一个节点作为父节点,其底下是带有编号的子节点,所有要获取锁的用户,需要在父节点下创建带有编号的子节点,编号最小的会持有锁;当最我号的节点被删除后,锁被释放,再重新找最我号的节点来持有锁,这样保证了全局有序。

1.6.5集群管理

【WINDRISES EMPLOYMENT PROGRAMMING】尊享对接老板

电话+V:159999-78052

机构由一批拥有10年以上开发管理经验,且来自互联网或研究机构的IT精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。

应用命名空间和实例命名空间的使用场景
发布人:chengtanshua19800320 发布时间:2024-10-17