云是什么:云由无数水蒸气,也就是小水滴组成。
云计算:管理无数虚拟资源,最小资源是虚机。云计算使用rabbitMQ消息总线,通知:虚拟资源,网络等。该创建虚机,虚机扩容,虚机不正常,虚机释放。以上操作记录,均记录在mysql。
k8s:管理无数容器镜像,最基础单位docker。k8s使用etcd作为消息总线,通知:网络,资源,和应用等。容器启动,应用状态,容器销毁,容器间通信等。以上操作均记录在mysql。
也就是k8s镜像容器应用不依赖openstack(虚机化),可以在linux3.8之后任何内核上运行。
linux3.8之后,为什么这么说呢?
linux原始生态就像动物园,弱肉强食。
CPU演进史:
- 因为:一个应用一个进程,10个应用10个进程,因为cpu调度非常快,看上去10个都在跑。其实10个应用在抢资源,cpu时间片切换根本察觉不到,所以看上去像并行。
-
所以:linux内核想办法,就像把动物园拿篱笆扎起来,稀有动物重点照顾,重点动物保护,其他常见动物散养。 分组:稀有放一组,重点放一组,其他不分组。进程在跑,拥有的cpu使用权 稀有 > 重点 > 常见。解决资源分配靠抢。
内存演进史: - 传统tomcat进程,运行需要多少内存,就占多少内存,先占先得。后启应用因内存不够,则无法运行。
- 处理:还是动物园管理原理。比如总共有20g内存,稀有占10g,重点占7g,常见占3g。那么稀有总共10g,重点7g,其他3g。重点:3者互相隔离,谁不够谁剩余,其他组都别想。
网络演进,欺骗。
- 传统A应用占用80,主机名称为host。则B应用就不能使用80,主机名称也是host。
- A用80端口,主机是AHost,B也用80端口,主机是BHost。但真正内部是其他端口,主机名一样,只是欺骗A和B应用。
linux内核演进上面三大功能后,还不足以让k8s大火。
硬核:文件分层出现,linux-3.8
- 传统一个虚机,有内核、文件、应用和内存都是独立个体,就像动物园。
-
文件分层,共享文件和目录层级可见。
比如:虚机/opt/user是自己的,但A应用使用/opt/user,B应用也用/opt/user,C应用也用/opt/user,他们不必自己创建,对A、B、C应用直接可见(透传)。A、B、C可直接使用虚机:/opt/user,A、B、C修改该路径下互不影响,并且虚机本身/opt/user目录下东西还不变。这功能牛逼吧。
也就是说:镜像仅仅包装应用即可,上传至镜像仓库。
docker pull下来
docker run直接运行
因为linux3.8之后-内核可处理文件共享透传,镜像使用Linux虚机目录和层级,并且还互不影响。
该技术问世后 市上工厂都想当老大,做管理k8s的独角兽。
cpu、进程、内存和文件等一系列限制配置在/etc/security/limits.conf下,使用limit -a命令查看。
*
CPU增强(优化)实际操作:
-
.调度优先级和调度类(设置nice值)
比如:nice -n 15command
renice 更改已经运行进程的优先级;
chrt 命令显示并直接修改优先级和调度策略; -
进程绑定(一个进程可以绑定在一个或者多个CPU上)
例如,taskset -pc 0-3 1000 - 独占CPU
- BIOS调优,比如:启用睿频
内存增强(优化)实际操作:
内存分配函数: malloc、kmalloc、vmalloc、alloc_page、dma_alloc等
- malloc: 分配用户空间内存 .不保证物理连续.linux中用户空间和内核空间不能直接互相访问内存,要通过copy_from_user 、copy_to_user 或者mmap影射。
- kmalloc: 内核空间分小内存(小于128K,这个值可以修改),内物理上连续. 这个内存由于比较小,不是直接从buddy得到,而是由slab管理,slab会从buddy中get_free_page等方法得到空闲page,然后将小内存,通过kmem_cache_alloc等(kmalloc会调用kmem_cache_alloc)返回给申请内存的地方。
- vmalloc: 内核空间分配内存,这个内存不保证物理上连续,而且内存可以比较大,大小没有特别的限定。
- alloc_page/dma_alloc等: 是从buddy 分配, 这个大小最大一般为4M或者8M, 由MAX_ORDER限制. 物理上连续的。
文件系统增强(优化)实际操作:
linux3.4新增:Btrfs,核心特性有(最核心Btree):
- 多物理卷支持:btrfs可由多个底层物理卷组成;支持RAID,以联机“添加”、“移除”、“修改”。
- 写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新;在文件进行修改的时候,首先将文件复制一份出来,在复制出来的文件上进行修改,修改完成之后,将指向原有文件的指针修改指向到修改完成的文件上,若修改完成的文件出现了错误,则我们可以通过原文件进行修复。
- 数据及元数据校验码:checksum ,当存储某个文件时,checksum会将数据的源数据和数据的校验码,分别通过文件的属性扩展进行保存,当我们再次读取数据时可以方便的检测数据是否受损,如果文件受损系统可以完成自动修复。
- 子卷:sub_volume,在一个卷上创建多个子卷,在每一个子卷上创建文件系统,并挂载使用。
- 快照:支持快照的快照;因此可以实现类似增量快照的机制。
- 透明压缩 :如果我们在存储文件时,进行压缩存储,那么在文件发往btrfs时,会自动的占用时钟周期,完成数据的压缩存放,而用户并不知道,在用户读取文件时,会自动的进行文件的解压缩,可以实现节约磁盘空间。但是压缩和解压缩会占用时钟周期。
版权声明:本文为weixin_44597836原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。