创建基于Fannel网络的Kubernetes 1.11.4

上次发布的 K8s 1.10.3 构建 的文章被同事喷我太懒了,居然文章里还嵌了另一篇的构建文章,而这另一篇文章里面居然还嵌了另一篇,简直不能看. 其实二进制搭建 K8s ,很多的步骤都是要重复的,并且升级版本也是,改动的只是极个别的参数,我不是很喜欢其他的构建方式,比如16年和17年我用 kubeadm 或 minikube 的时候,老会被网络问题困扰,毕竟公司的大网络环境下不能随意上代理, 而 kubespray(之前叫kargo) 的参数化配置还必须预先准备要用的程序然后再一行行填写,我也不喜欢,因此我为自己方便,早早的就搞了个 shell 的一键构建脚本,. 但为了方便阅读,好吧,那我就当个复读机好了. 人类的本质就是复读机. 准备环境 本次构建同样是基于 Fannel 网络,并启用 IPVS. Master节点的配置建议 2U2G 起,Node 节点的配置建议 2U2G 起. 各节点系统为 CentOS 7 ,需要配置各个节点的名称,IP,全部流程使用 root … “创建基于Fannel网络的Kubernetes 1.11.4”

Read More

7-Zip添加Plugin支持SHA-512校验方式

用 7-Zip 好多久了,没记错是2008北京奥运那会看 PortableSoft 推荐的.7-Zip 确实不愧一款解压缩神器,还自带多种 CRC 校验,这么多年用下来一直都很满意. 自从2017年那会 Google 宣布了一起 SHA-1 的碰撞文件后,网上文件的校验码开始从 MD5 / SHA-1 向 SHA-256 走了.但 是最近一些软件发布时,带的校验码都已经升级到了SHA-512,这时候数年一更的 7-Zip 就尴尬了,不支持 SHA-384 和 SHA-512 的校验. 今天逛7-Zip社区突然发现有人给 7-Zip 开发了一个插件, 叫做 WinCryptHashers. 安装方式很简单,在 7-Zip 的安装目录新建一个Codecs子文件夹,然后将下载过来的WinCryptHashers.64.dll或WinCryptHashers.32.dll(根据你安装的 7-Zip的版本,在帮助中可以查看32位或64位) … “7-Zip添加Plugin支持SHA-512校验方式”

Read More

解决flutter中Snackbar的显示问题

直接调用在SnackBar在底栏无法出现,可以给SnackBar写个扩展: class MySnackBar { static Show(final GlobalKey<ScaffoldState> scaffold, BuildContext context, String str) { final MySnackBar = new SnackBar(content: new Text(str)); scaffold.currentState.showSnackBar( MySnackBar); } } 这样在调用的时候关联GlobalKey传入,比如按钮的点击动作中加入即可: GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey(); … onPressed:(){ MySnackBar.Show(scaffoldKey, context, “show … “解决flutter中Snackbar的显示问题”

Read More

使用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 镜像,但是时间比较早,大概是去年五六月份,并且当时还加入了 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 硬生生给送上了云端(没有贬低 Java 的意思,虽然就当时而言它确实很辣鸡).并且最关键的一点就是根据 Flutter 的自我描述, … “说说Dart和Flutter及其搭建环境”

Read More

关于图形界面下Ubuntu的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的max file open 值”

Read More

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

Django默认开启`csrf`防跨站,因此需要在提交信息时同样带上csrf. “`bash # 每次都获取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 “imgFile=@xxx.jpg” … “curl命令上传文件到开启CSRF的Django站”

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