他们相信天堂是有的,可以实现的,但在现世界与那天堂的中间隔着一座海,一座血污海,人类泅得过这血海,才能登彼岸,他们决定先实现那血海。

Windows上编译安装运行rancher


rancher 是一个为DevOps团队提供的完整的Kubernetes与容器管理解决方案。rancher最大的优点就是安装部署方便,极大地简化了K8S的安装配置。在官网上,推荐的是使用docker方式安装rancher,这种方式隐藏了大量的细节。在网上搜了下现有的资料,几乎都是照抄官方文档,更没有在windows上安装rancher的先例。

Read more ⟶

HttpURLConnection里setReadTimeout超时无效


今天群里有位360的安全大佬,发了个链接http://93.175.29.89:8008/,说爬这个网址的时候,IO会一直卡在那,一直没有返回响应。 那个网址是他构造的一个特殊请求,输出一个视频流,但是服务器端不返回Content-Length,也不输出真实数据,就是输出不到1024字节的流后就一直停在那也不close,浏览器打开的效果就是看到了视频的前几帧,然后一直卡在哪转圈。

Read more ⟶

K8s管理crd和K8SAPI编程


k8s每个版本看起来兼容性不是太好,很多网上的例子跑起来往往都有问题。

目前用的版本

root@de001:/develop# kubectl version
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.2+k3s1", GitCommit:"cdab19b09a84389ffbf57bebd33871c60b1d6b28", GitTreeState:"clean", BuildDate:"2020-01-27T18:09:26Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.2+k3s1", GitCommit:"cdab19b09a84389ffbf57bebd33871c60b1d6b28", GitTreeState:"clean", BuildDate:"2020-01-27T18:09:26Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}

1.编写Spec文档

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  # name must match the spec fields below, and be in the form: <plural>.<group>
  name: crontabs.chenwen.com
spec:
  # group name to use for REST API: /apis/<group>/<version>
  group: chenwen.com
  # list of versions supported by this CustomResourceDefinition
  versions:
  - name: v2
    # Each version can be enabled/disabled by Served flag.
    served: true
    # One and only one version must be marked as the storage version.
    storage: true
    # A schema is required
  # The conversion section is introduced in Kubernetes 1.13+ with a default value of
  # None conversion (strategy sub-field set to None).
  conversion:
    # None conversion assumes the same schema for all versions and only sets the apiVersion
    # field of custom resources to the proper value
    strategy: None
  # either Namespaced or Cluster
  scope: Namespaced
  names:
    # plural name to be used in the URL: /apis/<group>/<version>/<plural>
    plural: crontabs
    # singular name to be used as an alias on the CLI and for display
    singular: crontab
    # kind is normally the CamelCased singular type. Your resource manifests use this.
    kind: Crontab
    listKind: CrontabList
    # shortNames allow shorter string to match your resource on the CLI
    shortNames:
    - ct 

2.导入K8S

ln -s /etc/rancher/k3s/k3s.yaml ~/.kube/config
kubectl apply -f crontab_crd.yml
kubectl get crd

可以看到自己创建的crd了。

Read more ⟶

hadoop 3.1.2 单机模式安装配置


hadoop 3.1.2 单机模式安装配置

现在搞大数据记录一下,方便查阅。

1.安装配置jdk和下载hadoop略。

hadoop 下载地址:http://mirror.bit.edu.cn/apache/hadoop/common/ 使用了较新且保守的3.1.2版本

2.配置修改

环境变量修改

export HADOOP_HOME=/soft/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

配置etc/hadoop/hadoop-env.sh

Read more ⟶

讲清楚CAS的那点事


互联网低潮,老是会看到别人发面试经验,看到很多人谈乐观锁,谈CAS,但是都没有说清楚。忍不住叨叨几句。

那什么是乐观锁呢,比较书面的定义是 “它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。”,在多线程中则指对于数据冲突保持一种乐观态度,操作数据时不会对操作的数据进行加锁(这使得多个任务可以并行的对数据进行操作),只有到数据提交的时候才通过一种机制来验证数据是否存在冲突。在Java中,是通过CAS来实现乐观锁的。

Read more ⟶

Netty实现http服务器keep Alive无效的问题排查


netty实现http服务器keep-alive无效的问题排查

今天在用netty实现一个http服务器的时候,发现keep-alive并没有生效,具体表现是在request和response的header里都能看到keep-alive的标志:

request:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: max-age=0
Connection: keep-alive

response:
HTTP/1.1 200 OK
content-type: text/html;charset=UTF-8
content-length: 0
connection: keep-alive

可以看出,无论是请求还是响应,都是keep-alive的,但是请求两次,服务器端日志如下:

Read more ⟶

Filebeat7自定义index的一个坑


我用的filebeat7来收集日志发给Elastic search,版本是7.1.1,对应的elasticsearch版本和其相同。

默认的,filebeat生成的索引名字是filebeat-7.1.1-2019.06.24这种,不利于区分不同的业务,需要自定义索引,看了下官方文档, 是这么写的

Read more ⟶

从钉钉一个忽略了近亿人的产品细节谈谈产品思维


本来我一个软件工程师,是很不屑提产品的,但时不时总见到一些产品人吹牛皮,也忍不住凑个热闹。

钉钉(DingTalk)是一款由阿里巴巴集团开发的用于商务沟通和工作协同的IM,其和企业版微信占据了中国的大部分企业IM市场。阿里并不是一个擅长做社交的公司,钉钉也是一款命途多舛的产品。2014年左右阿里在内部强行推广来往,一款承载了阿里社交梦的产品,花了巨额的研发和营销费用后,依然是折戟沉沙。后来,来往的团队保留了部分下来,做起了钉钉,针对办公社交,居然做成功了。

Read more ⟶

使用Java自动登录需要动态密码的堡垒机


公司的生产服务器买了QiZhi Technologie的堡垒机,每次登录都得输入密码+空格+OTOP验证码,都得打开手机APP操作一把,烦不胜烦。

不可忍,想了想,还是借助Java在每次调用时自动生成验证码,然后搞个ssh自动登录(别问我问啥不用公钥,哪有权限啊)得了。

Read more ⟶

Linux 下获取文件创建时间


在Linux里,用户层面并没有文件创建时间的概念,无论是用ls还是stat 指令,都无法获取到文件的创建时间

[tudou@tudou-pc statx]$ stat test-statx.c
  文件:test-statx.c
  大小:6656            块:16         IO 块:4096   普通文件
设备:805h/2053d        Inode:6684737     硬链接:1
权限:(0644/-rw-r--r--)  Uid:( 1000/   tudou)   Gid:( 1001/   tudou)
最近访问:2018-10-07 13:16:29.000000000 +0800
最近更改:2018-10-07 13:21:09.855461986 +0800
最近改动:2018-10-07 13:21:09.855461986 +0800
创建时间:-

可以看到「创建时间」一行总是「-」。

Read more ⟶