陈沙克

Mar 172021
 

希望一篇文章解决所有问题,看来还是不现实,我这里就把常见问题整理一下。主要是针对DiskImageBuilder(DIB)。制作镜像,网络速度非常关键。

官方镜像

基本的主流linux,DIB都是支持的,我需要用到的就是CentOS和Ubuntu。cloud image,目前国内就中科大提供下载。

  • https://mirrors.ustc.edu.cn/centos-cloud/centos/
  • https://mirrors.ustc.edu.cn/ubuntu-cloud-images/

这个比国外速度应该快很多。

制作CentOS各个版本镜像

默认你使用DIB,是下载最新版本的CentOS镜像进行构建。你可以指定 7,8,但是你没法具体到7.6版本。

你需要知道7.6版本的发布时间,下载相应的镜像到本地,指定镜像构建,这个是最简单的。2003,表示2020年3月发布的,是CentOS 7.8

curl -O https://mirrors.ustc.edu.cn/centos-cloud/centos/7/images/CentOS-7-x86_64-GenericCloud-2003.qcow2

export DIB_LOCAL_IMAGE="/root/cloud-images/CentOS-7-x86_64-GenericCloud-2003.qcow2"

这样第一次构建,下载速度慢的问题,也解决了。直接指定网上的镜像,我验证没有成功。

export DIB_CLOUD_IMAGES="https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-2009.qcow2"
export DIB_CLOUD_IMAGES="https://mirrors.ustc.edu.cn/ubuntu-cloud-images/${DIB_RELEASE}/current"

国内源构建

构建镜像,需要使用到源,可以指定国内的源,这样加快速度。

export DIB_DISTRIBUTION_MIRROR="http://mirrors.163.com/centos"

Elements

可以理解这就是一个一个模块,你需要对镜像进行那些定制化,就用那些模块。如果是使用rpm包安装,那么位置

/usr/share/diskimage-builder/elements

后续的命令,基本都是这这里面,看一下里面的代码,就明白很多。

  • DIB_RELEASE=bionic
  • DIB_RELEASE=7
  • DIB_RELEASE=8
  • DIB_RELEASE=8-stream

例子

公有云上找一个网络比较好的虚拟机,家里虚拟机也是可以,我使用的上CentOS的。什么都不需要,最小化的系统就可以。

yum install centos-release-openstack-train
yum install diskimage-builder

运行下面代码,我是用root用户,直接根目录下创建。

mkdir cloud-images
cd cloud-images
curl -O https://mirrors.ustc.edu.cn/centos-cloud/centos/7/images/CentOS-7-x86_64-GenericCloud-2003.qcow2

设置环境变量

export DIB_LOCAL_IMAGE="/root/cloud-images/CentOS-7-x86_64-GenericCloud-2003.qcow2"
export DIB_DISTRIBUTION_MIRROR="http://mirrors.163.com/centos"
export DIB_RELEASE=7

这样就可以开始创建镜像。

disk-image-create -a amd64 -o centos7.qcow2 vm base centos7

或者

disk-image-create -a amd64 -o centos7.qcow2 vm base centos

上面两条命令的区别,在于使用的centos的Elements不同,第一个使用centos7,红帽希望日后都使用centos,不需要区分不同版本。后续红帽会淘汰掉centos7的element。

区分CentOS 7 和8,通过上面的 DIB_RELEASE 来设置。

上面的命令,还有一种方式运行

DIB_LOCAL_IMAGE="/root/cloud-images/CentOS-7-x86_64-GenericCloud-2003.qcow2" DIB_DISTRIBUTION_MIRROR="http://mirrors.163.com/centos" DIB_RELEASE=7 disk-image-create -a amd64 -o centos7.qcow2 vm base centos

网络速度的问题,会导致很多意想不到的问题,上面的内容,全部是经过我多次验证。

root 登陆

镜像的默认用户是centos,没有密码,通过sudo,切换到root,可以给用户centos设置密码,不过你是没办法给root设置一个密码,让他登陆。

至少我的习惯是用root,直接登陆。

yum install libguestfs-tools-c

安装工具,后续就可以给镜像的root设置密码,下面是把root的密码设置成chenshake

export LIBGUESTFS_BACKEND=direct
virt-sysprep --root-password password:chenshake -a centos7.qcow2

这个步骤,应该在最后上传镜像前完成就可以。

Mar 162021
 

OpenStack 提供一个非常好用的工具 DiskImageBuilder, 简称DIB。那么这个工具其实做的还是非常不错。现在很多厂商都是用他来做自己应用都镜像,方便用户使用。

CentOS 官方提供镜像,我们可以基于这种镜像进行构建。把所有的改动都记录下来。我需要对镜像的定制

  • 关闭Selinux
  • 更新yum源
  • qemu guest agent
  • vi alias vim
  • cloud init
  • 更改默认的用户名和密码,root,pass。以前是centos,centos

外面的文章,你会发现根本都没法照做,而且好像都是互相抄。这次我折腾来1天,实在搞不定,找Jeffrey Zhang 指导一下,实在是太简单。

第一个CentOS镜像

今天是青云都上市日子,我也用青云的虚拟机来完成这个实验。

创建一个CentOS 7.8的虚拟机,2core,4G内存,就可以开始测试。

yum install centos-release-openstack-train
yum install diskimage-builder

不需要安装EPEL,也不需要安装什么qemu-image,默认都给你搞定。就运行上面都两条命令就可以。

disk-image-create -a amd64 -o centos7.qcow2 vm base centos7

这条命令就是帮助你创建一个CentOS 7的镜像。应该是最新的版本7.9

disk-image-create -h

基本可以看到参数的含义

从Centos 官方 https://cloud.centos.org/centos/ 下载base镜像,

  • -a 表示镜像的架构,如果是做arm,就是arm64
  • -t 虚拟机镜像格式,默认是qcow2,不指定就是qcow2,你可以设置raw
  • -o 这其实是镜像输出位置和名字,如果没指定,就这当前目录,生成 (image.qcow2 镜像)

vm base centos7 都是element,这些都是Disk image builder 默认自带的。

你可以猜到,如果是ubuntu到镜像。

DIB_RELEASE=bionic disk-image-create  -o ubuntu-18.04.qcow2 vm ubuntu

原理

尝试几次,你就大概明白原理。

cd /usr/share/diskimage-builder/elements/

所有的定制化,基本就是定制elements,内置很多elements,你可以参考修改,就应该够用来。

如果你不想了解原理,那么就看我怎么操作就可以。

关闭Selinux

disk-image-create -a amd64 -o centos7.qcow2 vm base centos7 disable-selinux 

cloud init

DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, OpenStack"  disk-image-create -a amd64 -o centos7.qcow2  vm base centos7 disable-selinux cloud-init cloud-init-datasources

修改默认的用户和密码

export DIB_DEV_USER_USERNAME=root
export DIB_DEV_USER_PASSWORD=pass
export DIB_DEV_USER_PWDLESS_SUDO=YES
export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, OpenStack"
disk-image-create -a amd64 -o centos7.qcow2 cloud-init cloud-init-datasources vm base centos7 disable-selinux devuser 

参考文章

  • https://blog.dustinrue.com/2019/04/getting-started-with-diskimage-builder/
  • https://support.hpe.com/hpesc/public/docDisplay?docId=c04223454&docLocale=en_US
  • https://docs.mellanox.com/pages/releaseview.action?pageId=39259372
Mar 082021
 

其实我很烦以前金山词霸翻译软件,鼠标一靠近,就翻译,我经常是不需要你翻译。所以我都是比较苯的办法,copy 单词去翻译。

Mac 内置的翻译就非常不错。这样我日常阅读英文的时候,如果需要翻译一个单词。你只需要3根手指轻压一下就可以。

三🈯️轻点查询单词

我已经习惯了,两指滚动文章,看到不懂的单词,三指轻碰一下就搞定,这样就基本够用.

Mar 032021
 

整理一下我用到的快捷键,其实都是靠日常使用熟练,看看那些比较高频,就琢磨快捷键。我会把我后续日常用到的,整理这这里,方便我自己。

微信截屏

这个困扰的很长时间,截屏窗口无法隐藏,利用mac的快捷方式截图,再发到微信,还是比较麻烦的。

Command+w

隐藏窗口

Command+Control+A

这样就可以和Windows一样,截屏。

截屏没问题,不过如果想启动微信,这个时候,使用 Command +Tab 是不行的。

你需要

Command+tab

选中微信,然后

松开tab -> 按下option -> 松开command -> 松开option

有点复杂,对于隐藏的窗口,应该都是这样的方式换起来。

当你松开Command按键,微信窗口已经出来,顺便把Option按键放开。

Feb 242021
 

使用阿里云也算是一年,并且还是阿里云的MVP,工作的内容,其实也是和阿里云有关,到目前也算算告一个段落,所以怎么都要从我都角度来评估一下阿里云,也算是对国内对公有云做一个整体评估。

基本服务

公有云的用户,百分之90以上,基本都是使用虚拟机,网络和存储服务,那么这几项阿里云和国外同行,基本上已经基本一样,你运行的虚拟机,负载均衡,防火墙,基本上已经感受不到不稳定。

其实这也是非常不容易,这几年阿里云应该还是下来大功夫在底层,稳定性和可靠性,真的已经非常不错。虚拟机的存储,已经全部是闪存,网络都是必须使用vpc,虚拟机的规格,也基本固定下来,一个cpu对应4G内存。备份,快照,镜像,这些在私有云上很难处理的问题,在阿里云上真的可以说做的很流畅。

表扬完,就要说一下阿里云的不足。

计费

阿里云上的项目已经很多,各个项目的计费周期不一样,按小时,按日,按月,包年,内部对这个也是没有一个统一的要求,估计更多的是KPI考核。

阿里非常希望搞生态圈,对应开发,测试者来说,这样都计费模式,肯定是不友善的,测试一下,你就只能支付一天的费用。

Azure,AWS上,也确实是有某些服务,是如果你使用,是计费方式是按天的,例如那种存档,这种服务,按小时,还是比较不合算。但是这不是主流,真的也不是因为KPI,这样设计计费模式,更多是业务,技术代价导致的。

现在阿里云的IP,带宽的使用,已经改成按天计费,这就是KPI驱动导致的设计,一定能提高收入,但是一定会逐步影响你的生态圈。

我测试阿里云的功能,如果是按小时收费,那么我基本没啥担心费用,如果按天,就很难受,我就基本不去测试。很多新的东西,我也懒得去推荐使用。

例如阿里云上的对象存储,就可以模拟成一个nas,共享给虚拟机使用,让用户备份啥更加方便,不需要去理解S3的API。我测试一下,按天计费,我就懒得去折腾,很多时候,需要多次来测试。

API

阿里云上线一个产品,服务,有什么基本的要求呢,需要满足那些条件,才能上线呢?我过去一年,其实使用,测试过不少阿里云的产品,只能说,内部还是比较乱的。

2003年,AWS就提出,一切的交付,是用API。到今天阿里云还是没法做到。很多新的服务提供是没有API,这个估计老大销售压力很大,导致变形,有很大关系。

新的服务上线,产品经理考虑的最多的,应该还是KPI,而不是阿里云的长远的发展。

产品,服务要满足什么条件,才合适去上线,其实阿里云内部,我相信也是很清楚的,都是明白人。

曾经和阿里云的朋友探讨过,公有云的收入里,通过外部调用API的比例和通过控制台使用的比例是什么情况,如果是这个指标去对比Azure,AWS,基本就没法看。

账单

我当了一年公司阿里云的管理员,负责管理,协助公司内部各个项目,团队,部门使用阿里云的资源。那么我首先想到的在阿里云上的费用的拆分,逻辑的隔离项目的资源。

如果你今天去问负责你的阿里云的销售,售前,他们给你的答案,应该还是无法实现,要实现,要通过CMP。你再去外面问一圈,都是阿里云的红人,结果都没解决过这样的问题。

这样的需求,难道很变态,不合理吗?大家都认为阿里云肯定就有这个功能,但是很可惜是没有的。

如果让我去帮各个项目创建资源,每个月给他们计算费用,搞定发票,我估计真都啥都不用干。

我都需求就是一个项目需要使用阿里云都资源,我给他们团队一个人开通一个账号,让他负责管理资源,他可以创建资源,创建用户,知道自己都消费是多少。不能超过你申请都费用。如果超过了你申请的费用,你就没法使用资源。

也很感谢阿里云的研发的朋友,把做好的功能,第一时间给我用上,解决了我这个公司阿里云管理员的管理上的重大难题。

通过阿里云的:资源目录,这个功能,是可以很好解决这个问题,用起来后,真的感觉很爽,负责这个产品的弟兄,也是非常有想法,借鉴了AWS,没有闭门造车。这个问题阿里云的最终解决的办法,其实比国内其他厂商都要强。

主账号对各个资源目录,或者说子账号的财务管理,做的还是非常值得夸赞,就是这是不同的team做的东西,很少人全部搞明白。我是折腾了一遍,应用上线,碰上过大坑,通宵折腾阿里云弟兄帮忙解决。

资源组

我是因为折腾这个功能,对阿里云的认识逐步加深。Azure,AWS都有资源组的概念,不过真正好用的,其实是Azure,真的做的非常不错。

资源组,对我来说,我的使用,就是把项目使用,涉及的资源,都放到一个资源组里,用完后,统一删除。Azure解决了一个公有云一个难点:创建资源容易,删除难,在Azure上,你基本可以直接删除资源组,就把下面资源删掉,除非你有备份都设置,估计有点麻烦。

阿里云上都资源组,我测试都时候,出现了很多很有意思都事情。

  • 不支持api在资源组创建资源
  • 很多资源不支持资源组管理
  • 对着阿里云官方都文档进行操作,我居然无法创建出虚拟机。不是我水平的问题,是阿里自己压根就没对着自己的文档测试过。

我专门也问了外面几个生态圈的伙伴,他们都抱怨给阿里都资源组坑过,坑多了,就没有朋友了。

据说2021年,阿里云要重构资源组都功能,上次看阿里云都资源组都产品经理demo演示都视频,其实很不容易,很多坑,不是一个人能搞定,在江湖呆久,看视频演示,也都能看出问题,他有意回避都地方,基本就是一堆问题,没法解决的,例如前端UI在不同资源组切换,资源的显示,缓存,都是麻烦事。

文档

对于公有云来说,文档的重要性,超出你的想象。AWS上,其实是没有客服,你了解一切,都只能是通过文档,不会出现文档更新不及时都情况。AWS,我都理解真都一切交付是API和文档,你看文档来用API。

如果你开发都过程,没把文档搞定,指望产品上线后,再去更新文档,注定是悲剧。

如何开发过程,自动生成api文档,做到完全同步,业界应该已经很多实践,还是看领导层的意识。

培训认证

微软玩培训认证,搞生态圈是高手,微软自己的培训,肯定不是为了挣钱,微软的培训都是第三方,合作伙伴来进行,考试也是让第三方来搞。

阿里云上的培训,认证,都是自己搞,据说他们还有收入的KPI。为了挣点培训,考试费用,对于阿里云来说,真的比较low。

疫情期间,我看了Azure,AWS,Google cloud的培训视频,基本都是免费,放到油管上,真的已经非常完善,讲师通过公开的视频,能获得收益,持续的更新,这就是一个很好的生态圈。

培训是生态的关键环节,你的产品,应该如何使用,是需要依靠培训去洗脑。

安全合规

安全和合规,这是私有云最后一根稻草,阿里云也开始意识到这个问题,这这方面发力,解决企业在安全合规上的担心。

阿里云是互联网基因,满足互联网客户,没有问题,但是企业的基因,2B方面比较欠缺,这方面,就要好好跟Azure学习。

企业合同流程

一般企业内部的财务的流程,都是签订合同,合同完成,验收结束,给发票,90天后付款。你现在和阿里,微软做业务,基本都是这样的一个流程。

对于企业来说,如果按照这个流程来使用公有云,就会遇到麻烦,根本走不通。如果阿里集团要采购阿里云的服务,也肯定是没法进行。我专门去看了一下Azure是怎么解决这种问题的。

Azure 不愧是有企业基因,设计了一套合同支付的流程,是可以满足企业目前的流程的。

对于很多外企来说,企业的管理,都是依靠流程,修改流程,是一件不可完成的事情。流程的设计其实也有他合理的地方,我们需要在流程下,完成自己的工作。

目前我其实还是没解决这个企业的流程问题。

省钱

云平台都是希望增加收入,但是如何增加收入?帮助用户省钱,用好阿里云,长远来看,实现盈利呢?

同事让我介绍一下,如何使用阿里云,我这里就做一个总结。假设你上第一次登陆账号,应该如何处理。

  • 使用资源组来管理项目到资源,默认到资源组Default,如果你不指定资源组,就会创建在这个Default资源组。一个账号里,日后都会有不同到项目在运行,所以建议才有资源组来管理,当然资源创建后,也是可以修改资源组
  • 选择region,根据你需要到资源,选择区域,要注意,你需要到资源,可能不会在一个区域里,可能是分布在多个区域。
  • 创建vpc,规划好ip地址段,不同区域,一个子网。这个玩一下,就明白。可以数据库在一个子网,web在两位一个子网。甚至你可以一个vpc跑数据库,另外一个vpc跑web,通过vpc互联来实现web访问数据库。我个人倾向一个vpc,不同的子网。阿里云的网段可以自己指定,虚拟机的ip地址,你也可以指定。
  • 创建安全组,设置好自己要开放的端口。规则。这个比以前使用的防火墙方便多来。
  • 申请floating ip,一定要注意,公网IP,单独申请,不要在创建虚拟机的时候申请,这是不一样的,导致后续很麻烦。创建虚拟机时候申请的公网ip,和虚拟机是紧密绑定,会导致你删除虚拟机后,公网ip就给删掉,收费必须和虚拟机一致。
  • NAT网关:可选,当你的虚拟机超过10个,公网的ip地址超过5个,这个时候,你可以考虑通过NAT网关来提高灵活性,降低带宽成本。如果你只是2,3个ip地址,那么就没必要使用。
  • 创建虚拟机,需要注意:虚拟机的规格,磁盘大小,都是成本的关键。记得关掉快照。记得上面提到的,不要选择申请公网的IP。计费模式,选择按需,后续确定满足需求,再转成包月。从包月转按需,或者包月后,调整配置,都是很麻烦的事情。虚拟机的规格,2core,8G,基本可以满足企业的百分之90以上的需求的,目前的虚拟机的cpu。
  • 应用部署完成后,不要使用快照来做备份,要使用镜像,这个最便宜的。虚拟机关机,成本仅仅是减少cpu的成本,存储的成本,带宽还是在的。
  • 根据实际情况,可以先把虚拟机转成包月,带宽观察一段时间,再决定。
  • 数据库,尽量使用RDS,不过要测试,应用的数据库可能用到的某些功能,RDS是禁用的,这个需要测试,否则比较麻烦。数据库的迁移,就把备份放到对象存储上,可以直接倒入到RDS。
  • 公有云的虚拟机后续的运维,基本都是磁盘满了,所以要用心处理应用的日志,虚拟机要装上agent,才能监控到磁盘的使用情况。这个比较关键。
  • 安装的文件,就放对象存储上,上线后,可以考虑把虚拟机做一个镜像,这样成本很低,完全可以忽略。
  • 备案,目前哪怕用ip地址访问,日后都会有麻烦。所以你还是注册一个域名,备案。这个需要提前准备,提工单来解决。流程不同时候,不同区域是不一样的。
  • 安全,就是安全组尽量少开端口。很多时候,可以登陆阿里云的后台,web登陆console来维护,尤其windows,这样是最安全的。平衡一下,大部分时候,你都是不需要公网访问3389端口,22 ssh端口。
  • ssl证书,这个就用免费就可以,需要注意的是免费的证书,我的理解,3个月,需要update一下,这个实际场景,需要留意,用脚本,工具来实现自动更新。ip地址访问,其实也是可以考虑自己签发证书,来加强安全。http:// 是明文传输,都要改成https。
  • 阿里云上镜像跨账号,跨区域共享,做的还是非常不错。你对一个虚拟机做镜像,镜像的内容会包括你的系统盘,数据盘,你可以通过镜像创建出来,非常方便。可以考虑测试的时候,测试通过的虚拟机,通过这种方式,迁移到生产环境的账号里。
  • 阿里云上,资源大部分都是收费的,要搞清楚那些是收费,那些是免费。资源不使用就删掉。ssh的密钥,公钥都是要收费的。对象存储,免费的额度,估计就足够你使用。
  • 快照,在应用的升级的时候,可以考虑使用,确认没问题就删除快照就可以。日常你的数据库备份,如果你没使用RDS,就通过脚本进行备份到对象存储上。web应用,上面基本是没数据,做一个镜像就可以。

操作记录

你接手一个账号,你最想知道的是什么,反正我是想搞清楚,上面的虚拟机是谁创建的。很遗憾,你只能提交工单,让他们后台查询,用户自己搞不定。

一般的web应用,对用户的修改,创建的操作,都会记录,这样方便解决问题,阿里云上,这样的功能,都希望引导用户使用付费的服务。

阿里云对控制台的操作的记录,是出过问题,我对账号里的财务的一个设置,阿里云平台升级,导致我这个设置给修改。那么这个时候,是平台升级修改,还是我自己修改的呢?

我最终是靠自己证明清白,我那天没人登陆过后台。最终证明是升级导致。

升级出现小问题,我是可以理解的,不过你修改数据,没做任何的记录,这是很危险的。当时是因为升级,我马上发现,如果这种问题,拖几天,估计排查就更加困难。

Feb 222021
 

以前使用客户端,在windows下写blog,这次换成mac,估计就只能习惯使用wordpress 后台都editor来写blog。

wordoress 5.5 做来很大改动,尤其是在editor,引入都block都概念。这个东西,需要习惯一下才行。看看我都写blog都需求是否可以满足,这篇文章,其实就是功能测试都文章。

  • 目录功能
  • 方便上传图片
  • 容易添加代码

目录功能,应该是默认就支持。不过由于插件默认是你文章里有4个标题,才会生成目录。我这篇文章就2个标题,导致测试了半天,最后修改了一下插件设置,改成2个header,也显示目录。这样就基本满足我的需求。

图片功能

以前wordpres,都是在客户端写完,一次上传全部都图片。不知道现在,如果我需要上传图片,要如何操作。默认mac的截图,好像比较大,不知道是否会压缩。

尝试使用一下图片都block功能

已经比开始习惯很多,写完一段都内容,如果更改,就要更换block。

Code

验证一下代码,我不是开发人员,不过blog上,也经常会有少量都code。

标题是一个block,下面都文字是一个block,再到代码。

for i in range (5):
    for j in range (0,i+1):
        print ('*',end = '')

    print ('')

print ('')

for i in range (5):
    for j in range (5-i,0,-1 ):
        print ('*',end = '')

    print ('')

这是python的代码。没有颜色。研究一下如何搞定。增加了一个代码插件,看看效果。看来以前的很多插件都失效,需要新都插件来支持。好像需要重启浏览器才能生效。

Python code

看看二级标题和代码高亮的效果。web端端效率,好像没以前客户端高。慢慢习惯。

for i in range (5):
    for j in range (0,i+1):
        print ('*',end = '')

    print ('')

print ('')

for i in range (5):
    for j in range (5-i,0,-1 ):
        print ('*',end = '')

    print ('')