使用EFK收集Kubernetes多集群日志

使用EFK收集Kubernetes多集群日志 Collecting logs for multi kubernetes clusters with EFK 在有多个集群的情况下,一个集群就搭建一套日志收集分析服务实在太浪费。因此可以尝试只跑一套Elasticsearch和Kibana实例,然后让各个集群中的日志收集器向Elasticsearch发送日志。 如图所示: Elasticsearch和Kibana可以放在Kubernetes集群中也可以独立部署。这里为了方便就选择独立部署. 部署ElasticSearch和Kibana Elastic 自建了 docker 镜像仓库,因此到https://www.docker.elastic.co/拉去最新的 Elasticsearch 和 Kibana 的镜像. 然后编写docker-compose.yaml文件. 关于详细配置,参考官方文档: Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/master/docker.html Kibana: https://www.elastic.co/guide/en/kibana/master/docker.html version: ‘2’ services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:6.4.0 restart: unless-stopped … “使用EFK收集Kubernetes多集群日志”

Read More

使用cgo实现高性能WebSocket服务

Go 语言的便捷,协程的高效,GC以及自身的安全性,使得它成为后端业务开发的利器. 之前看过来自 Mail.Ru 工程师分享 Go的百万连接数的WebSocket服务优化 ,*中文翻译版.描述通过使用优化 Go 协程和零拷贝Http Header 实现了对内存的高效利用. 但其中自定义的 epoll 结构中依旧用了锁,个人觉得还是有优化的空间. 可以用高效的 uWebSockets 库配合,使得接入层用高效的 C++ 语言,而后端业务处理则用 Go 语言.这样的好处就是 C++ 可以最高效精准的把控接入层的逻辑处理和内存的使用,而后端的业务开发则是以高效安全为主,使用 Go 正好合适. 这里使用的 uWebSockets 为 0.14.8 tag 的版本,配合 libuv作为事件驱动,zlib 作为压缩算法库,openssl 作为加密库,四个编译为 .a类型的静态库,方便一同编译到程序中,避免运行时动态库缺失的问题. … “使用cgo实现高性能WebSocket服务”

Read More

构建Flutter Android编译环境的Jenkins Slave

曾经给公司搞了个 Android 编译环境的 Docker 镜像,但是时间比较早,大概是17年5/6月,当时还加入 Node.JS 和 Cordova ,构建出来的镜像的 Size 非常巨大,达到了 3.7 G,于是想趁着添加 Flutter 的环境,重新搞一个,这里记录下. FROM jenkins/jnlp-slave:latest # 官方使用的jenkins用户没有太多权限,这里用root USER root # 抛弃 Android 4.4 版本之前的API SDK ARG ANDROID_APIS=”android-20,android-21,android-22,android-23,android-24,android-25,android-26,android-27,android-28″ ARG ANDROID_BUILD_TOOLS_VER=28.0.2 ARG ANDROID_SDK_TOOLS_VER=4333796 ARG FLUTTER_VER=0.7.3 … “构建Flutter Android编译环境的Jenkins Slave”

Read More

Dart和Flutter及其开发环境

去年关注到了 Flutter 这个来自 Google 的跨平台框架,上个月突然就发现 Flutter 火爆了,原来是阿里巴巴的闲鱼团队在他们的项目里混入了 Flutter,还分享了几篇文章,这无疑奠定了 Flutter 可以用于大型项目中的基础,毕竟闲鱼是有超千万用户级的体量. Dart Dart 和 Golang 一样也是来自 Google, 是在 2011 年发布的语言, 发布只比 Golang 晚了两年.前些年不温不火,混的实在是惨,但最近也是被 Flutter 带火了一把. 这就像当初 2009 年 Android 起来后,把半身入土的 Java 硬生生给送上了云端,并且最关键的一点就是根据 Flutter 的自我描述, 它将会是跨 Android … “Dart和Flutter及其开发环境”

Read More

关于Ubuntu 18.04图形界面下的max file open 值

正常在Linux下,对打开的文件描述符的数量限制设置有两个地方: sudo sysctl -a | grep file-max 是全局最多可打开文件描述符设置 sudo ulimit -n 是单进程最多可打开的文件描述符设置 全局的最大打开数量修改比较容易,只需要在/etc/sysctl.conf中添加fs.file-max并指定值即可,如fs.file-max = 6553500. 单进程的最大打开数量设置就比较坑了,我当前用的是Ubuntu 18.04,若仅是Server版本Ubuntu或是用SSH登陆的情况下,只需在/etc/security/limits.conf添加如下: * soft nofile 1024000 * hard nofile 1024000 # 16.04下用 * 会无效,需要指定用户如: root soft nofile 1024000 root hard … “关于Ubuntu 18.04图形界面下的max file open 值”

Read More

curl命令上传文件到开启CSRF的Django站

Django默认开启csrf防跨站,因此需要在提交信息时同样带上csrf. # 每次都获取csrf,也可以用固定的 csrf=`curl -s -o /dev/null -c –url ‘http://example.com/’ | grep ‘csrf’ | awk ‘{print NF}’` # 提交 curl –request ‘POST’ –url ‘http://example.com/’ –cookie “csrftoken={csrf}” –form “username=user” –form “password=pwd” –form “csrfmiddlewaretoken=${csrf}” –form “[email protected]” 其中表单的key根据实际值填写.

Read More

Protobuf在TypeScript中的64位长整型精度问题

一直以来,在 JavaScript 中表示数值的只有 Number 这种以 64 位浮点形式存储的类型, 是不存在类似 Long 这种64位的长整形,这就会造成后端传输来的长整型数据到了前端出现精度丢失的情况: let n1 = 177777777777777777; console.log(n1) // 177777777777777800 遗憾的是在 TypeScript 中也没有 Long 这样的长整型,但是 Node.JS 中的,有许多十分优秀的 modules ,其中 long这个第三方 module 使用了一个 class ,封装了两个 32 bit 有符号 number … “Protobuf在TypeScript中的64位长整型精度问题”

Read More

创建基于Flannel网络的Kubernetes 1.10.3

和之前系列的文章一样,都是手动部署 Kubernetes,流程也相似,参考之前记录的 关于 IPVS 以及部署Kubernetes 1.9.2 并启用IPVS和CoreDNS. 早在上个月 Kubernetes 就已经发布了 1.10 系列,这个系列的新特性主要是将 CSI 和 CoreDNS 特性置为 beta. 开启 IPVS modprobe ip_vs ip_vs_sh ip_vs_rr ip_vs_wrr. 手动管理 IPVS 可用 ipvsadm工具, RedHat 系的系统使用yum install -y ipvsadm安装 ,Debian 系的系统使用apt … “创建基于Flannel网络的Kubernetes 1.10.3”

Read More

QT下无法执行C++编译

安装QT完成后,无法执行c++项目的构建: Could not determine which “make” command to run. Check the “make” step in the build configuration. Error while building/deploying project xxx (kit: Desktop Qt 5.10.1 GCC 64bit) When executing step “qmake” 一般以为是qmake或make问题,但其实是C++的编译工具没指定:

Read More

MacOS 下登陆私有Docker 仓库并拉取镜像

在mac下,并不存在/etc/docker/certs.d文件夹,虽然可以手动创建,但即便将自己私有仓库的CA证书放入,仍旧提示x509: certificate signed by unknown authority错误. 因此可以在图形界面打开Docker.app-Preferences-Daemon在Insecure registries栏中填入私有仓库的doman:port.这样便可以直接拉去公开的镜像.但若要拉去私有镜像,则必须先登录,此时便有可能遇到如下错误: Error saving credentials: error storing credentials – err: exit status 1, out: `User interaction is not allowed.` 有两种方法可以解决这个情况: 在图形界面打开Docker.app-Preferences-General,取消勾选的Securely store Docker logins in macOS keychain,此后的登陆便不会验证证书. 在launchpad中搜索Keychain Access并打开,然后在搜索栏中搜索仓库的证书,关键字为仓库的domain. … “MacOS 下登陆私有Docker 仓库并拉取镜像”

Read More