配置和使用kube-prometheus

我们在k8s集群中使用云原生的promethues通常需要用到coreos的prometheus-operater,它可以方便的帮助我们在k8s中部署和配置使用prometheus。但prometheus并不是开箱即用的,如果要做到开箱即用的监控全家桶,官方提供了两个选择,分别是prometheus-operater helm chartkube-prometheus。这两者都可以为我们提供开箱即用的方式部署promethues+alertmanager+promethues-push-gateway(kube-promethueus不包含,需要单独部署)+grafana全家桶,同时包含kubernetes-mixin的一整套报警规则和node-exporter,kube-state-metrics等一系列metrics exporter。区别在于helm chart由社区维护,而kube-promethues由coreos维护。这里我们将以kube-prometheus为例,简要说明配置和使用方式。
继续阅读“配置和使用kube-prometheus”

grafana dashboard django bug修复

grafana的官方有很多用户提供的dashboard样本,其中关于django的有

https://grafana.com/grafana/dashboards/9528

对应的django-metric是https://github.com/korfuri/django-prometheus/

但是这个dashboard的页面是有问题的。页面的选择器选择的label是app,但是prometheus采集到的metric label是service和job。所以我们需要把dashboard json做一下修改。
继续阅读“grafana dashboard django bug修复”

Ant design pro删除BasicLayout国际化/帮助/顶部搜索

最近学了下react那一套东西,从react的官方文档和官方示例开始看起,感觉官方文档写得相当详实漂亮,由浅入深让人很容易接受。但想着国内可是有antd这么牛逼的轮子,作为react的UI组可是世界第二的存在(star数),肯定要支持一下学学啦,然后开始了极让人自闭的ant design之旅。
继续阅读“Ant design pro删除BasicLayout国际化/帮助/顶部搜索”

谈自由意志

此文写于一年半到两年前,写了一半就停住,存过草稿就不想发了。过了这么久,对一些东西的看法也发生了变化,现在回头看看过去写的东西,觉得挺有趣的,不妨发出来吧。(较初稿有微调)

关于自由意志的存在问题,是哲学的一个基本命题。

何谓自由意志,简单举例:
如果两个人,拥有完全一致的基因,完全一致的大脑,完全一致的身体构成和外观,并且拥有完全一样的经历。那么,在某个一致的时间节点上,他们能够(有权力)选择一个人吃蛋糕,而另一个人吃桃子吗?
继续阅读“谈自由意志”

kubernetes集群中服务的负载均衡和外部发现

传统的负载均衡策略一般是:

客户端 -> dns -> 4层库在均衡(HA) -> 7层负载均衡 -> 具体的后端服务

这种方式处理服务发现和动态配置比较难搞,比如后端服务动态扩缩容什么的。
一开始的做法肯定是OP人工维护7层负载均衡集群配置,以nginx为例,用git仓库之类的做人工服务发现和变更。这样很显然是不科学的。然后就会开始希望用种种自动化的手段去处理服务发现,比如微博的nginx-upsync-module,比如nginx-lua,比如openresty,比如etcd+confd等种种手段实现服务发现和自动化配置,但还是有很多瑕疵,比如etcd+confd每次修改upstream的服务后端就要reload nginx,nginx的策略会新开x个worker,容易造成性能问题甚至机器顶不住。而且vm服务机器的逻辑和upstream挂钩也有问题,总之,麻烦的很。

而kubernetes处理这一套服务发现和负载均衡的方法就挺好用的,比如接下来会实践的这一套nginx-ingress+externalIP+dns的方式就很直观而且方便自动化流程,大致策略如下:

客户端 -> dns -> k8s-nginx-ingress-service(in ExternalIP) -> ingress-obj -> service -> pod

继续阅读“kubernetes集群中服务的负载均衡和外部发现”