/nacos-ctl

The controller command sdk for nacos

Primary LanguageJavaApache License 2.0Apache-2.0

nacos-ctl

简介

功能列表

以交互模式提供服务,可通过配置文件或启动参数设置初始信息 基本功能如下:

  • 命名空间:
    • 增删查改
  • 配置命令:
    • 增删查,列出前n条
  • 服务命令:
    • 增删查改,列出前n条
  • 实例命令:
    • 增删查改
  • 系统开关:
    • 查,改

实现方式

数据获取的实现基于:

  • Open-Api v1
  • Prometheus Http
  • Nacos Java SDK 1.4.2

功能效果

启动与参数设置

nacosctl以jar包形式部署,为方便启动,写了一个简易启动脚本,使用方式如下: image.png 启动会等待10秒左右,因为需要创建nacos-client中的service比较耗时,启动后可以看到提示语,参数配置情况,以及连接效果,看到输入栏提示后即可进行操作,按tab自动展示帮助,使用quit退出 初次连接会尝试使用配置中的信息进行鉴权,如果失败则会有提示,不过不影响后续正常启动(因为对于未启动权健的nacos-server,就算认证失败了也可以访问) image.png nacosctl中自带了一套基本的配置,启动后会自动以nacos初始账号密码连接本机8848端口 启动之前也可以修改配置,例如指定启动参数: image.png 更多的参数可以在启动后通过help指令查看: image.png 也可以通过配置文件,持久化修改配置,只需要在和nacosctl同目录下创建一个名为conf.properties的文件即可,比如example文件夹目录下的摆放方式: image.png 文件写法如下: image.png 在同时有配置文件且启动指定了参数到时候,nacosctl会优先使用启动指定的参数 ​

基本指令与帮助

启动后,可以通过help指令查看全局帮助: image.png 在输入的过程中,可以通过按tab键获得提示与补全能力: image.png 若想查看各个子命令的使用方式,则可以采用subcommand help xx的方式: image.png 查看子命令的具体某个小命令: image.png 如果输入指令的过程缺少参数或者拼写错误,也会有红色高亮提示: image.png 缺少参数的提示: image.png 此外,为了防止误删除操作,默认情况下nacosctl会对删除操作进行确认询问: image.png 如果想要关闭掉误操作询问,则可以在配置文件中将confirmEnabled设置为false: image.png 再次重启后,没有删除保护了: image.png

命名空间切换

由于Nacos存在命名空间隔离,不同Namespace下的Config和Service是不相通的,所以nacosctl在操作过程中也提供了一个全局上下文的namespace,代表当前操作的所有资源所属的命名空间,可以在启动后的输入提示栏左侧括号中看到: image.png 使用者可以通过use命令手动切换当前的上下文命名空间,输入use后按下tab,会自动展示可选的命名空间,以namespace名称(namespaceId)的形式展示: image.png 输入前缀后,通过tab键自动补全,回车后,即可切换到新的命名空间,此过程也需要几秒钟的等待 ​

命名空间操作

命名空间操作提供了基本的增删查改四个命令: image.png 具体语法规范可以在nacosctl中通过namespace help xx来查看,这里特意说明一下update子命令: image.png Namespace update只能修改命名空间的描述,而不能修改name和id,若想修改id,则需要重新创建删除,下图是一次命名空间的创建-查看-删除操作的指令流程: image.png

Config操作

Config操作是指对Nacos的配置模块的资源进行操作,而不是配置nacosctl自身的信息 该模块提供了增删查改四个功能 image.png 其中,config add是添加一条新的配置,指定好group与dataId后,输入配置内容即可创建,语法规则如下: image.png 其中,为了方便较长配置文件的创建操作,提供了文件读取功能,即通过-f指定文件,上传的config的内容即为文件内容,若不指定-f,则config的内容即为输入内容,例子如下: image.png 同理,对于config get操作,也提供了-f能力,可以把获取的输出内容直接写到指定文件中: image.png 而若只想浏览当前nacos-server上的配置文件,则可以使用config list命令,默认情况下会列出nacos-console第一页的config,可以通过help查看并指定参数修改数目,使用效果如下: image.png

Service操作

Service操作是指通过open-api,对nacos-server的服务进行编辑,提供了增删查改的基本能力: image.png 增删查改具体使用方式与config类似,参数选项细节可以通过service help xx指令查看 下图是一个 创建-查询-删除-查询 的使用案例: image.png 如果想知道nacos-server有哪些内容,也可以通过service list命令查看,用法与config list类似: image.png (这里注意,nacosctl及open-api的创建只会创建空服务而没有实例,过一段时间服务会被销毁掉) ​

Instance操作

Instance操作是基于nacos-client实现,提供了对实例的操作(以及创建后会维持心跳),也是增删查改功能: image.png 下面是一个简单的使用例子:为同一个服务创建3个实例,查询,修改后再查询,删除一个,再查询: image.png image.png

Switch操作

Switch操作是指对开源版Nacos的系统开关进行查询与修改,基于Open-Api完成。Nacosctl能解决某些开关的展示名称和真实的key名不一致的问题,并提供了remove与add对list与map类开关进行参数修改,switch操作支持的命令如下: image.png 通过switch get,可以查询到某个开关的情况,可以按tab自动补全,如果想查看全部开关,则输入switch get all: image.png 对于修改开关,以nacos-2.0.1开源版本总结,各开关需要注意的点如下:

open-api请求时 key name 需要修改:
(不过对于nacosctl使用者则无需关心,直接输原key就可以了,有自动转换):
    healthCheckEnabled:true    --> check true/false
    checkTimes:3     -->  healthCheckTimes
    distroEnabled:true  ---> distro
    defaultPushCacheMillis:20000   --->pushCacheMillis


    pushJavaVersion:"0.2.0"   -->pushVersion xx:xx.xx.xx
    pushPythonVersion:"0.4.3"
    pushCVersion:"1.0.12"
    pushCSharpVersion:"0.9.0"
    pushGoVersion:"0.1.0"


不能通过open-api修改:
    enableAuthentication:false     不能设置
    name:"00-00---000-NACOS_SWITCH_DOMAIN-000---00-00"   不能改
    checksum:null   不能设置
    adWeightMap:{}  不能改
    mysqlHealthParams:{"max":3000,"min":2000,"factor":0.65}  不能改
    incrementalList:[]   不能改
    healthCheckWhiteList:[]  不能改


可以直接用原key修改:
    masters:null        Ps:value用,分割输入多个,比如a,b,c,d即可
    serviceStatusSynchronizationPeriodMillis:5000
    distroThreshold:0.7
    disableAddIP:false
    overriddenServerStatus:null
    doubleWriteEnabled:true
    lightBeatEnabled:true
    pushEnabled:true
    clientBeatInterval:1
    enableStandalone:true
    defaultCacheMillis:3000
    sendBeatOnly:false
    distroServerExpiredMillis:10000
    autoChangeHealthCheckEnabled:true
    serverStatusSynchronizationPeriodMillis:2000
    defaultInstanceEphemeral:true
   
        
特殊类型(list/map):
    httpHealthParams:{"max":5000,"min":500,"factor":0.85}
    tcpHealthParams:{"max":5000,"min":1000,"factor":0.75}
    limitedUrlMap:{}

所以对于普通的key,可以通过switch set命令修改,例如: image.png 对于特殊类型map,可以通过add与remove修改,例如: image.png 不过要注意的是,nacosctl这里对map的添加,删除只是对open-api的switch操作进行了一个封装,所以目前会存在无法删除最后一个key的情况,后续需要配合nacos-server解决。


由于Open-Api中还对Switch提供了debug操作(也就是只在单节点上生效以便于调试),但是这里目前存在一个问题:若首次使用debug修改部分key后,当后续再使用非debug推送某个key,则该节点的所有key都会被同步到整个集群,包括debug的信息。更多细节原因请@三辰 所以为了尽可能减少用户触发这种情况,nacosctl对这个问题做了如下设计:

  • 当使用debug推送后,则后续不能进行非debug推送,提示用户在debug后需要手动改回原值
  • 若想继续使用非debug推送,则请重启nacosctl

例如下图,先进行带debug的推送后,如果不重启,就不支持进行正常的非debug推送 image.png