k8s删除Terminating状态的命名空间

背景: 我们都知道在k8s中namespace有两种常见的状态,即Active和Terminating状态,其中后者一般会比较少见,只有当对应的命名空间下还存在运行的资源,但是该命名空间被删除时才会出现所谓的terminating状态,这种情况下只要等待k8s本身将命名空间下的资源回收后,该命名空间将会被系统自动删除。但是今天遇到命名空间下已没相关资源,但依然无法删除terminating状态的命名空间的情况,特此记录一下.

Golang中的单元测试、基准测试、覆盖测试

单元测试、基准测试、覆盖测试

背景: 之前很长一段时间再写Golang程序时,不会有意识去写单元测试,直到后来写了独立项目后,慢慢才发现给一个功能编写对应的单元测试是多么高效和方便,接下来就再一起复习下Golang中的测试.

Golang module的使用

前言: 在Golang1.11之前的版本中,官方没有提供依赖和包管理工具。开发者通常会使用vendor或者glide的方式来管理依赖(也有直接使用GOPATH多环境方式),而在Golang1.11之后官方终于出了名为go modules的版本管理机制。

注意:

  • 在Golang1.11版本中需要使用export GO111MODULE=on来显式开启go module
  • 在Golang1.12之后默认开启了module

k8s dashboard的http接口改造

背景: 玩过Kubernetes的人都知道,官方提供了一种集群web插件dashboard,使用官方示例可以快速的部署一套dashboard,可以方便相关人员进行集群概况预览.但是官方的实例默认使用了https并且需要通过证书或Token来进行统一认证,而dashboard这种内部基础工具增加了https和证书认证后不仅使得使用的成本高了起来,而且和内部的统一管理入口也不太好集成(通常内部系统都会统一使用nginx之类的代理工具进行统一代理).

Golang中的异常处理

Golang的异常处理和单元测试

  • 1.Golang语言中没有其他语言中的try...catch...语句来捕获异常和异常恢复
  • 2.在Golang中我们通常会使用panic关键字来抛出异常,在defer中使用recover来捕获异常进行具体逻辑处理
  • 3.Golang中我们通常会在函数或方法中返回error结构对象来判断是否有异常出现

注意事项

  • 1.利用recoverpanic指令,defer必须放在panic之前定义(panic会终止其后要执行的代码).
  • 2.recover只有在defer调用的函数中才有效,否则recover无法捕获到panic.
  • 3.recover处理异常后,业务逻辑会跑到defer之后的处理片段中
  • 4.多个defer会形成defer栈
  • 5.panic会等到整个goroutine退出才会报告错误

使用Python来操作Hive中的数据

背景:在整个运维内部数据仓库构建中,我们使用了Hadoop大数据生态圈中的组件来支撑运维数据的数据仓库构建。我们使用了Hive作为数据仓库工具,同时使用Hue来对整个运维数据进行管理和查询,最终根据部门需求生成结构化数据存入关系型或K/V型数据库,以供其他部门进行商业化决策。但是在使用command-line方式和hue上操作hive时,经常会有些许问题,并且灵活性交差,因此为了改善数据到Hive的加载过程以及对Hive库中数据的操作,借此机会使用PyHive库进行操作管理Hive.

本篇简单记录下使用Python操作Hive。