陈沙克

Jun 072019
 

对于我来说,确实已经很久没折腾过台式机,还停留在IDE硬盘的年代,不过最近几年,都要换成ssd,所以我这里就复习一下各种硬盘的接口。

我也算是IT老人,不过面对笔记本上的各种硬盘参数,其实也是一头雾水。去油管学习,这也证明是最快的途径。本来听完一个视频,感觉有点了解,不过多看几个以后,还是发现以前很白痴。

Snap8

一张图,把所有的知识点都放在一起,确实比较容易理解。

对于笔记本来说,M.2和SATA3接口,类似小门和大门的区别。

SATA的通道和PCI-e的通道,类似马路和高速的区别。

M.2的接口,可以走SATA的通道,也可以走PCI-e的通道,目前应该都是PCI-e的通道。

通道的协议,AHCI,和MVMe,类似自行车和汽车。

最后就是速度:你就算在高速上,如果你的车不够快,还是不行的。

最理想的情况下,就是M.2的接口,走PCI-e的通道,走NVMe的协议,最快的闪存。

Snap9

对于笔记本来说,其实你是无法感受到M。2和SATA3的SSD的速度的差异,他们的差异很小很小。

Snap11

简单点说,有2个接口的,就是速度慢的。不是基于mvme协议的。

购买笔记本的时候,PCI-e的ssd,就是表示M.2接口的

ssd的颗粒

Snap10

Snap12

SATA接口

这个是家用电脑的常用接口。分为 SATA2 和SATA3两种接口的规格,外形都是一样,SATA3兼容SATA2,只是传输的速度不一样。

Snap4

实际使用中,SATA3,如果装上SSD,可以跑到500M/S,如果是SSD装在SATA2上,可以跑到200多MB/s.

7200转机械硬盘,最高速度,也就最高达到200MB/s,正常的速度,其实就100多MB/s, 所以什么接口都没区别。

PCI-E插槽

真的不要和PCI插槽搞混,现在最新的主板,已经是全部都是PCI-E x16扩展插槽。

PCI-E插槽有长度的区别:X1,X4,X8,X16的区别。X16向下兼容,可以插X1,X4,X8的卡,通常X16是插显卡使用。

针对PCI-E接口的SSD,也分为PCIe2.0, PCIe 3.0,就是2代和3代。

Snap5

家用的PCIe,比较少见。京东可以搜索到一家 https://item.jd.com/6311640.html

PCIe Gen3x4,连续读取速度:高达3200 MB/s;连续写入速度:高达2100 MB/s。1T的价格大概是1800,目前普通SATA3的SSD的价格,大概是1k不到。

M.2接口

这基本是所有主板标配的接口,替代以前的mSATA接口。

这个接口,可以走SATA,PCIe和USB的通道,

Snap7

M.2的接口的速度,其实是看的主控芯片,到底是接到SATA接口上还是到PCIe接口上。

采购的时候,需要注意自己主板的接口,我的理解,目前主流的应该都是M key的,接到PCIe上。

M.2固态硬盘根据接口处卡口的数量分成了Socket 2和Socket 3两种形态。当接口使用B key或者B+M key时,定义为Socket2,可用传输模式为SATA或者PCIe X2,当接口使用M key时,定义为Socket3,可用传输模式为PCIe X4。

参考文章

https://g.pconline.com.cn/x/1084/10844576.html

https://www.youtube.com/watch?v=alb6-zp52mA

https://www.youtube.com/watch?v=NbL231dhnKs&t=182s

May 212019
 

最近看物联网相关的资料,我就顺手记录一下自己的学习总结。

对于搞IT的人理解,所谓物联网,就是每个传感器都给分配一个IP地址,这样他的信息就可以传回中心的节点上。感觉没啥太特别的地方。

实际中,物联网使用的协议,并不是我们熟悉的Tcp协议。他的传输的过程,和我们想象的有很大的不同。

image1

MQTT(消息队列遥测传输) 是基于 TCP/IP 协议栈而构建的,已成为 IoT 通信的标准。

其实我读这句话也理解不深,我就动手来理解,搭建一个MQTT服务器,

开源干同样事情的软件,通常是多个

1)EMQTT:github 3265 stars

2)Mosquitto:github 1645 stars

3)Apollo:ActiveMQ的升级版,github 109 stars,但是该项目已经有3~4年没有更新。

就选择最热门的EMQTT来体验一下

EMQTT服务器端搭建

官方的文档提供了详细的安装过程和不同操作系统的软件包。包括docker

https://developer.emqx.io/docs/broker/v3/cn/install.html

我是在centos 7.5下,快速搞定

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://repos.emqx.io/emqx-ce/redhat/centos/7/emqx-ce.repo
yum install emqx
systemctl start emqx
systemctl status emqx

通过浏览器,就可以直接访问

Snap1

可以设置语言为中文。

客户端

MQTTBox,作为客户端。最简单的安装,就是一个chrome的插件,直接就可以使用。

https://www.jianshu.com/p/e5cf0c1fd55c

我参考上面的文章,确实跑完的全过程。

参考地址

https://www.ibm.com/developerworks/cn/iot/iot-mqtt-why-good-for-iot/index.html

Mar 202019
 

最近装Openshift,需要下载大量的镜像,想看看他们的带宽使用情况。

nload

这确实是非常好用的工具,我也是刚刚知道。直接yum install就可以。

使用也很简单,直接启动就可以,当然你也是可以加入参数,指定网卡。默认是监控所有的网卡

nload device eth0

Snap2

这样你就基本知道你的网卡的实时上传和下载的速度。

iftop

这个工具也挺有名气。可以查看到自己机器的IP和外面的ip地址,端口的连接情况。

iftop -n -P -b -i eth0

看看结果

Snap4

10.140.48.60,是我虚拟机的IP地址。124.160.145.59,是外面的地址,最右边的3栏显示的是实时速度,该访问ip连接到本机2秒,10秒和40秒的平均流量。

你会发现本地ip,利用不同的端口,请求远程ip的https端口。

=>代表发送数据,<= 代表接收数据

底部三行:

  • 表示发送:TX
  • 接收:RX
  • 全部的流量:TOTAL

底部三行第二列:为你运行iftop到目前流量 (cum)

底部三行第三列:为高峰值 (peak)

底部三行第四列:为平均值 (rates)

参考文章

https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858923.html

https://www.binarytides.com/linux-commands-monitor-network/

Feb 152019
 

借助同事做的Openshift All in one,现在装istio,也是非常快捷,便利。这里就不记录原理,仅仅是把过程整理一遍。

参考文章

https://www.jianshu.com/p/27163901e01a  同事大作

All in one

要求操作系统selinux打开,我是采用4core,8G内存的虚拟机来安装,基本没问题。

git clone https://gitee.com/xhua/OpenshiftOneClick.git -b 3.11
cd OpenshiftOneClick
bash deploy_openshift.sh

你是可以定制你自己的域名,通过修改配置文件 config.yaml,关于Elasticsearch的参数修改,我们已经在脚本实现。

istio 安装部署

下载镜像

可以进入 OpenshiftOneClick/istio/ 目录下,里面有下载镜像的脚本,提前下载镜像,是为了解决安装过程中因为镜像下载速度过慢导致的安装失败。

bash docker-pull-images.sh

配置master-config

使得新建pod自动注入istio-proxy sidecar

cp master-config.patch  /etc/origin/master/master-config.patch
cd /etc/origin/master/
cp -p master-config.yaml master-config.yaml.prepatch
oc ex config patch master-config.yaml.prepatch -p "$(cat master-config.patch)" > master-config.yaml
/usr/local/bin/master-restart api && /usr/local/bin/master-restart controllers
cd -

Istio Operator

oc new-project istio-operator
oc new-app -f istio_product_operator_template.yaml \
--param=OPENSHIFT_ISTIO_MASTER_PUBLIC_URL=https://os311.test.it.example.com:8443

如果你修改了域名,那么https://os311.test.it.example.com,你就需要修改就可以。

部署Istio

镜像在本地,其实部署的过程很快

oc create -f istio-installation.yaml -n istio-operator

Bookinfo Demo

进入 OpenshiftOneClick/istio/bookinfo-sample 目录下,相关配置都在这里

oc new-project bookinfo
oc adm policy add-scc-to-user anyuid -z default -n bookinfo
oc adm policy add-scc-to-user privileged -z default -n bookinfo
oc apply -n bookinfo -f bookinfo.yaml
oc apply -n bookinfo -f bookinfo-gateway.yaml

访问

访问相关地址,需要设置本地的hosts文件 C:\Windows\System32\Drivers\etc

139.198.17.101 os311.test.it.example.com
139.198.17.101 registry-console-default.apps.os311.test.it.example.com
139.198.17.101 alertmanager-main-openshift-monitoring.apps.os311.test.it.example.com
139.198.17.101 hawkular-metrics.apps.os311.test.it.example.com
139.198.17.101 console.apps.os311.test.it.example.com
139.198.17.101 jenkins-cicd.apps.os311.test.it.example.com
139.198.17.101 sonarqube-cicd.apps.os311.test.it.example.com
139.198.17.101 gitlab-cicd.apps.os311.test.it.example.com
139.198.17.101 gogs-cicd.apps.os311.test.it.example.com
139.198.17.101 nexus3-cicd.apps.os311.test.it.example.com
139.198.17.101 jeesite-jeesite.apps.os311.test.it.example.com
139.198.17.101 jenkins-jeesite.apps.os311.test.it.example.com
139.198.17.101 prometheus-k8s-openshift-monitoring.apps.os311.test.it.example.com
139.198.17.101 grafana-openshift-monitoring.apps.os311.test.it.example.com
139.198.17.101 etherpad-etherpad.apps.os311.test.it.example.com
139.198.17.101 kubevirt-web-ui.apps.os311.test.it.example.com
139.198.17.101 istio-ingressgateway-istio-system.apps.os311.test.it.example.com
139.198.17.101 kiali-istio-system.apps.os311.test.it.example.com
139.198.17.101 prometheus-istio-system.apps.os311.test.it.example.com
139.198.17.101 grafana-istio-system.apps.os311.test.it.example.com
Dec 292018
 

这个其实是1年前,同事出去谈项目,客户要一个持续集成的演示,哪怕最简单都可以,hello world就可以。也就因为这个Hello world,一直忙了一年。

我们当时从零开始,真的搞了1个多月,才把hello world的工具链,在OpenShift搞起来。后续经历了一年多的优化,改进。在2018年最后一天,终于完成,现在已经很自信的说,给客户demo hello world,我就只需要1个小时不到的时间,就可以搞定。

DevOps 1.0 工具链

以前朋友给客户demo,把了把这套工具链调试通过,整整花了一个星期的时间,而且每次搭建,其实也挺麻烦的。那么我们尝试把这套工具链,做的更加标准化。

pipeline

gogs

代码仓库,我选择gogs,演示的时候,我们需要轻量。资源占用少。那么功能是完全可以满足需求。

gogs初始化的时候,如何创建管理员的问题,解决后,就非常顺利。

Jenkins

这是红帽内置的,我们通过pipeline调用jenkins,非常高大上。使用了kubernetes的插件,通过slave的jenkins来跑job。

Nexus3

我们选择maven来构建,这也是红帽的jenkins默认支持,为了加快速度,我们搭建一个私有仓库,Nexus,采用代理模式。

SnoarQube

这是代码扫描工具,代码质量的保证。国内使用非常普遍,不过真正用起来,还是需要花心思。

OpenshiftOneClick

红帽是提供Openshift all in one安装的脚本,不过你经常会遇到很多意想不到的问题,导致你安装失败。未来简化安装,我们专门针对Openshift-ansible进行了一个封装了一下。

代码地址

https://gitee.com/xhua/OpenshiftOneClick

目前是支持3.11的版本。大家只需要一台干净的CentOS 7.4以上系统就可以。3.11的OpenShift安装,要求把Selinux启动,才能进行安装。

虚拟机配置建议

  • 默认安装:  1core,4G内存,20G系统盘
  • CICD安装: 4Core,8G内存   20G系统盘
  • Full安装:    8core,32G内存  50G系统盘

Full安装,主要是因为elasearch非常消耗内存。所以你必须内存够大,才能启动成功。

我的vm的单网卡,有朋友反馈如果是双网卡,并且都配置了ip地址,会导致服务启动有问题,这是可以理解。所以大家需要自己来调整。

我是使用青云的平台进行测试,虚拟机的网卡的ip地址,是私有的地址。访问是通过floating ip访问。

安装过程,先确认selinux是启动的

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          disabled
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31

安装git,checkout代码

git clone https://gitee.com/xhua/OpenshiftOneClick.git -b 3.11

进入目录,配置选项

# cat config.yml
---
CHANGEREPO: true
HOSTNAME: os311.test.it.example.com

Change_Base_Registry: false
Harbor_Url: harbor.apps.it.example.com

FULL_INSTALL: false
SAMPLE_TEMPLATES: false

CICD_INSTALL: true

PV_COUNT: 20

# GOGS_USER: root
GOGS_PASSWORD: 123456
GOGS_EMAIL: abc@123.com

上面的配置参数,其实很清楚。简单来说,你只需要考虑一个,CICD_INSTALL: true,默认是false。改成true就可以。如果你希望把监控,普罗米修斯都装上,那么就选择full。

默认是使用主机名:os311.test.it.example.com
。你可以修改,或者是:okd.chenshake.com

这个都是可以的。

开始安装

bash deploy_openshift.sh

需要等待40分钟,主要取决于带宽和你的硬盘的速度。

可以多开一个终端,查看启动的容器

watch -n 1 "oc get pods --all-namespaces"

查看容器数量

# docker ps -q | wc -l
36

如果是启动cicd,那么是36个容器,如果是默认安装,是22个容器。

Openshift使用

Host记录

C:\Windows\System32\Drivers\etc\hosts

你需要把虚拟机的公网访问的IP地址更换上。如果你修改了域名,就替换就可以。

139.198.18.250 okd.qingcloud.com
139.198.18.250 apollo-cicd.apps.okd.qingcloud.com
139.198.18.250 rabbitmq-cluster-jeesite.apps.okd.qingcloud.com
139.198.18.250 kibana-cicd.apps.okd.qingcloud.com
139.198.18.250 apache-dubbo-zookeeper-jeesite.apps.okd.qingcloud.com
139.198.18.250 registry-console-default.apps.okd.qingcloud.com
139.198.18.250 alertmanager-main-openshift-monitoring.apps.okd.qingcloud.com
139.198.18.250 hawkular-metrics.apps.okd.qingcloud.com
139.198.18.250 console.apps.okd.qingcloud.com
139.198.18.250 jenkins-cicd.apps.okd.qingcloud.com
139.198.18.250 sonarqube-cicd.apps.okd.qingcloud.com
139.198.18.250 gitlab-cicd.apps.okd.qingcloud.com
139.198.18.250 gogs-cicd.apps.okd.qingcloud.com
139.198.18.250 nexus3-cicd.apps.okd.qingcloud.com
139.198.18.250 jeesite-jeesite.apps.okd.qingcloud.com
139.198.18.250 jenkins-jeesite.apps.okd.qingcloud.com
139.198.18.250 prometheus-k8s-openshift-monitoring.apps.okd.qingcloud.com
139.198.18.250 grafana-openshift-monitoring.apps.okd.qingcloud.com
139.198.18.250 etherpad-etherpad.apps.okd.qingcloud.com
139.198.18.250 kubevirt-web-ui.apps.okd.qingcloud.com
139.198.18.250 istio-ingressgateway-istio-system.apps.okd.qingcloud.com
139.198.18.250 kiali-istio-system.apps.okd.qingcloud.com
139.198.18.250 prometheus-istio-system.apps.okd.qingcloud.com
139.198.18.250 grafana-istio-system.apps.okd.qingcloud.com
139.198.18.250 launcher-frontend-devex.apps.okd.qingcloud.com
139.198.18.250 easy-mock-cicd.apps.okd.qingcloud.com

简单使用

如果使用公有云,记得打开80,443,8443 这3个端口。

  • user:admin
  • paas:admin

Snap12

CICD持续集成和Jeesite两个project是我们增加的。

CICD主要是部署DevOps工具链,这个project里,部署Gogs,Nexus,SnoarQube。

Jeesite项目是一个demo的java代码,

Snap15

默认的访问都是通过http,目前很多公有云,对http的网址需要备案。我们可以手工改成https

Snap16

Snap17

Snap18

选上Secure router,save,访问地址,就会变成https

Pipeline演示

脚本跑完,其实默认的webhook,jenkins的配置,其实已经全部完成。你只需要触发就可以。你可以选择

  • Openshift里的Jeesite项目里的pipeline手工触发
  • gogs的jeesite,修改代码来触发构建

手工触发

Snap13

Snap14

start Pipeline

Snap19

有时候第一次build失败,多来几次就可以。

查看应用

我是启用了https

Snap20

默认的用户名和密码

  • user:admin
  • pass:admin

自动触发

用root,123456 登录后,就可以看到Jeesite的repo

可以修改README.md ,就会自动触发pipeline

附录

应用相关的密码

Gogs

  • user:root
  • paas:123456

Nexus

  • user:admin
  • paas:admin123

SnoarQube

  • user:admin
  • paas:admin

Jeesite

  • user:admin
  • pass:admin

安装代码地址

https://gitee.com/xhua/OpenshiftOneClick

Jeesite地址

默认的Jeesite的pom文件,是需要修改才能用的

https://gitee.com/openshiftx/jeesite

full install的容器

Snap21

# docker ps -q | wc -l
90

90个容器。

Dec 032018
 

这是在OpenShift管理虚拟机的项目。这是我第一次直接用ansible。

我是使用默认一键安装Openshift来装好OpenShift 3.11的版本

我们需要用ansible部署

需要修改一下参数
cd kubevirt-ansible
vi vars/all.yml
只需要把openshift版本从3.10改成3.11就可以
修改 /etc/ansible/hosts 文件增加一行
kubevirt_web_ui_image_name = "quay.io/kubevirt/kubevirt-web-ui:latest"

因为我是在虚拟机里安装,不支持kvm

kubectl create configmap -n kube-system kubevirt-config \
--from-literal debug.useEmulation=true

这时候,就可以开始安装

ansible-playbook -i /etc/ansible/hosts playbooks/kubevirt.yml -e@vars/all.yml

这样应该就可以顺利搞定。

找到地址,就可以访问到UI。启动虚拟机失败,估计和我在虚拟机里装Openshift有关,

参考文档

https://kubevirt.io/user-guide/#/installation/README?id=requirements