阿里云Kubernetes 托管版 起步的经验

服务器原来是部署在swram集群的,后来阿里云不再支持,开始往k8s上迁移。

1,降低成本:
参考了网上的帖子,那贴后来被删了,还好有备份。服务器少的话,可以删掉NAT。只要自己的服务器有公网ip或eip就行了。如果使用NAT每年成本得3-4000元。我们只有2台服务器,就把NAT去掉了。负载均衡也会给分配个公网的,不过这个服务标记了禁止删除,就还是别删了。

2,日志服务。ingress如果一开始没勾选的话,自己配还有点麻烦,并且网页版本的管理命令行不好用。跟客服沟通改用服务器自己的了。改用ingress代替之前的nginx入口服务器。ingress是托管服务的系统组件,日志格式最好就别改了。问题是之前会有个总nginx记录post信息用于调试。现在只能改在应用里记录post信息。

3,ingress里可以配置目录转发。不过阿里云网页编辑的验证不够严谨。如果配置错误会影响全局的ingress路由配置。新增配置会不生效。我是发现不生效后查ingress的日志,在报错,才发现有的配置错了。

hql组合条件查sum的方法

@Query("select sum(r.amount) from RechargeOrder r where 1=1  " +
            "AND (case when (:status is null) then true when(:status=r.status) then true else false end)=true " +
            "AND (case when (:walletType is null) then true when(:walletType=r.walletType) then true else false end)=true " +
            "AND (case when (:payType is null) then true when(:payType=r.payType) then true else false end)=true " +
            "AND (case when (:userId is null) then true when(:payType=r.userId) then true else false end)=true " +
            "AND (case when (:rechargeType is null) then true when(:rechargeType=r.rechargeType) then true else false end)=true " +
            "AND (case when (:successTimeBegin is null) then true when(:successTimeBegin<=r.successTime) then true else false end)=true " + "AND (case when (:successTimeEnd is null) then true when(:successTimeEnd>=r.successTime) then true else false end)=true " +

            "")
    Integer sumAmount(
            @Param("status")  Integer status
            ,@Param("walletType")  Integer walletType
            ,@Param("payType")  Integer payType
            ,@Param("userId")  Integer userId
            ,@Param("rechargeType")  Integer rechargeType
            ,@Param("successTimeBegin")  Date successTimeBegin
            ,@Param("successTimeEnd")  Date successTimeEnd
    );

win中cmd调用npm脚本的办法

打docker包,需要打node环境的镜像
先用bat命令行编译vue的代码
直接用npm install 无法按正常顺序执行,每个npm命令没有阻塞会并发运行
之后改用start /wait 可以顺序执行完但每次会弹出个新窗口,并且子窗口完成后需要手动关闭,并且在主装口选择是否继续
最后改用call 很好用,能正常在一个窗口中顺序执行

elasticsearch内存引起的结点无法正常运行

效果
1,kibana看服务red
2,/_cat/nodes发现少个结点
3,阿里云容器里看结点正常运行,重启提示找不到主结点。不过测试ping能通。
4,/_cat/indices 无法打开。

最后发现开结点有点慢,发现内存占用90%,偶尔飙到98%。怀疑内存不够
最后吧机器内的hadoop关了,内存降到90%以下就好了。

springcloud中怎么蓝绿发布嘞

百度上搜的有好多理论。就不说了
springcloud没啥管理界面。
搜到一个springcloudadmin的,结果是个第三方的。觉得不太稳。

我们的环境是,阿里云的docker,springcloud经典全家桶。
服务更新的时候是,同时启动版本1和版本2,两个服务,然后关掉老的版本1.
这样会造成5~10秒的服务中断

单一服务的时候,是用的阿里负载均衡的蓝绿发布。但使用注册服务eureka的话这样就不行了。

再说下早期的弯路,也是搜百度,springcloud如何优雅关闭,然后找到了,每个服务可以执行 shutdown方法,但这其实并没有什么卵用。阿里关闭服务的时候已经算是优雅关闭了。用这个效果一样。

最终解决的方向是,eureka里的 /status?value=OUT_OF_SERVICE
格式是 PUT方法(必须PUT别的不行)
http://eureka/apps/服务名(大小写都行)/[服务id]/status?value=OUT_OF_SERVICE
这样在eureka中服务会显示OUT_OF_SERVICE,新的请求就不会走这个服务了,如果想回滚只要这个服务没有删重新设置成UP就行了。
注意:如果里面运行着队列的话会继续执行的,并不会终止。

如何制作一个UI界面方便管理呢。
最早看贴子有说用postman的
然后想过做个html解析,处理下eureka页面。

现在的方案是,改写eureka的url
eureka.instance.status-page-url=http://处理页面/hoststatus?servicename=${spring.application.name}&clientid=${clientid}
这个配置是在每个服务里的。这样注册后,会在eureka中看到这个链接,不再是/info
这个页面里可以写个开关服务的按钮就行了。比较容易实现。

jmater,2毫秒间隔请求接口实测,0异常。