分类 互联网编程 下的文章

最近在做一个服务器能耗监测相关的工具,因为涉及到微服务,最终选定了Kubernetes作为平台。既然涉及到性能监控,一番搜索后,自然离不开该领域的“明星”Prometheus。

Prometheus是一个非常通用的性能数据收集工具。有多通用呢?通用到它几乎无法直接从任何性能数据源获取任何数据,必须通过类似驱动的中间件(官方称呼为exporter,译为导出器)对数据进行文本化的格式化处理,才能被Prometheus解析并记录下来。这一方面意味着Prometheus本身“一无是处”,而又意味着开发团队可以不用顾及任何数据源的兼容性,可以专心开发与监控相关的核心功能。

那么问题就来了:Prometheus是作为一个单体应用而设计的,接入方式可以说是“四通八达”,而性能数据收集往往涉及系统底层访问,时常需要提权操作;而Kubernetes可以说是一个半封闭式的系统,通过隔离性削减了很大一部分的特权级别的功能。好在Docker和Kubernetes做出了妥协,我们还是有机会通过参数强制开放危险权限以达成目的的。

CoreOS作为云计算领域的明星角色,在相当广泛的领域提供了大量开源组件的实现,比如CoreOS本体,Kubernetes网络层插件Flannel(据说是最好配置的CNI,但我就从来没安装成功过),等等。这次的主角Prometheus Operator也是源自CoreOS项目组。

默认情况下Service基于selector自动创建Endpoints,但是由于ipmi_exporter暂时没办法部署在容器里,所以用Service+Pod的方法行不通。Prometheus Operator只能用Service里定义的端口进行数据监控,所以改端口没什么用,必须创建包含目标端口的服务。思路是,先手动创建Endpoints,再基于Endpoints创建Service,这样Service就可以用现有的Endpoints提供服务。

Probe和Monitor好像不是同一种用法,所以就没用了。

  1. Service要与Endpoints重名,这样才能让Endpoints覆盖Service以提供服务
  2. Service不能写selector,不然会覆盖Endpoints
  3. 在一个Endpoints里写多个address即可
  4. serviceMonitorselector要与Servicelabel相对应

参考: https://devops.college/prometheus-operator-how-to-monitor-an-external-service-3cb6ac8d5acb
https://www.jianshu.com/p/005112fd2f0a

在实验室的内网搭了一个GitLab,结果没想到,没有经过任何配置的邮件服务居然是正常运行的。不过发现有一个问题是,由于是内网搭建,服务器显然是没有域名可言的,所以邮件发出去的时候顺便把内网地址也暴露出去了。这两天抽了点时间看一下,发现GitLab官方对这一块没有文档介绍,Email部分的似乎没有提到这个。

之前以为是改/etc/gitlab/gitlab.rb,然后sudo gitlab-ctl reconfigure,后面发现并不行,就一直没管了。

直到某次实验室学弟说我reconfigure又把clone那里显示的域名弄乱了,并给了我一个配置教程之后,才发现似乎是在另一个地方可以完成配置。

要修改的是/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml文件,这是每次reconfigure完GitLab后自动生成的配置文件。修改文件中email_from键值对的内容即可,对应的就是收信时显示的发信人地址;而修改host则可以更改网页中显示git clone时的仓库地址。然后sudo gitlab-ctl restart使得配置生效即可。

顺便提醒,每次reconfigure完之后,gitlab.yml的自定义内容会被重置,需要手动重新配置。

参见 https://www.cnblogs.com/miaocbin/p/13038601.html

在CentOS 8上配置Kubernetes。

步骤可以大致简述如下:

  1. 如果在国内,换源
  2. 安装Docker(需要手动添加repo)
  3. 安装Kubernetes配置工具Kubeadm,会自动顺带完成其他Kubernetes配件的安装(也需要手动添加repo)
  4. 决定一个CNI(容器网络接口)组件
  5. 使用kubeadm init初始化集群,记得带上CNI可能会需要指定的参数(至少FlannelCalico在默认情况下是要求手动显式指定默认的CIDR的)
  6. 使用kubectl apply(更新)或者kubectl apply(重置)安装对应CNI组件的Pod
  7. 使用kubectl taint nodes --all node-role.kubernetes.io/master-取消集群master节点的“特殊地位”,允许在master节点上部署应用容器 Google传统艺能

然后关于Kubernetes的镜像,默认用的是Google的GCR仓库,显然在国内是访问不到的,在拉取镜像的时候会报超时错误。网上有不少的解决方法,比如建立私有仓库,换源,但是要么太复杂,要么说的含糊不清。还是弄个透明代理最爽了

参考:https://coreos.com/flannel/docs/latest/kubernetes.html

  1. 获得一个公网IPv6地址;
  2. 在服务器上监听IPv6端口(记得监听地址是::(等价于IPv4的0.0.0.0)而不是::1(等价于IPv4的127.0.0.1));
  3. ip6tables上给监听的端口(一般是80/443吧)开个洞(可以抄22端口的,一般ipv6的ssh应该是会自动启用的吧);
  4. 可以使用IP:端口名进行测试了。
  5. 如果要使用域名的话,记得添加的是AAAA记录,不用放中括号。

简单流程,仅供排错参考

成品效果参考:http://6.esperz.tk/

代码高亮使用的是来自zhantong的HighlightJs

LaTeX支持使用的是来自zyuzhi的MarkdownKatex

记得按照教程把插件文件夹名改了。

MarkdownKatex插件需要JQuery支持。整了老半天,原来typecho默认没有用js框架,控制台里的$$$似乎是Firefox自带的,我就说怎么整老半天katex打死不出来,报错说$不存在。

到footer.php里面加上对bootstrap的<script>引用标签就好了。

hato-1