虚拟化原理到K8s实践经验路线总结

  以下这些内容均为自行学习总结的内容,很多内容没有写概括介绍,看起来可能会有些突兀,但并不影响整体性,我自己的学习经验告诉我,这些内容还仅仅是最精简的核心部分,周边还有很多可扩展内容,主要是操作系统生态方面的内容,这些内容我目前无法概括总结,但会陆续将计算机原理和网络原理部分梳理成系列文章,以便能成系统,学习技术到一定阶段一定是需要有无全局观的,否则很容易迷失方向而无法深入。另外因为我自己的能力也很有限,无法将下面文章写的尽善尽美,但还是斗胆将自己走的弯路过滤出去,希望能分享一些有价值的东西,能让想我一样的初学者能规避一些不必要的错误; 另外我的经验是积极捕捉每一个学习的机会,不分Windows,Linux,Unix,其实你积累的多了,有了对系统生态的整体感觉相信你就会发现,下面这些内容学起来就不难了,另外告诉所有认真对待自己的道友一个小窍门,就是“慢慢来”,总结8个字“慢就是快,快就是慢”。

  对于虚拟化来说,下面这些仅仅还只是入门,它诞生很早,早在80-90年代时就已经提出了虚拟化,但因为硬件技术无法承载它,因此被搁置,直到本世纪初,硬件性能随着莫尔定律每18个月在不断翻新,不断创造奇迹,CPU性能,内存容量,磁盘容量都不断富余,人们发现业务增长带来了阶段性服务器性能不足,比如 一个外买平台,其24个小时中,可能只有在中午11:30~13:00,晚上6~8点之间业务流量可能非常巨大,但其它时间业务量可能很小,但为了避免在高峰期巨大访问流量导致整个网站"雪崩",就不得不增加服务器数量,来应对这短短的3~4个小时的高峰流量,这让这些平台的成本不断增高,因为服务器需要用电,需要降温,需要有地方放,需要安保,需要有专业人员管理等等,但仔细想想,这些服务器在大部分时间里基本非空闲,但我们不得不为3~4个小时付出巨大代价,在这样的需求之下,以及硬件技术的升级,使得虚拟化技术迎来了自己的春天.
  虚拟化技术之所以抽象,是源于它自身是建立在两项基础技术的基础上产生的,一方面是硬件技术,另一方面是软件技术,这两个巨人让虚拟化变得可能,变得简单,我对硬件了解不多,我仅想通过软件技术来引出一个点,希望每个想了解它的初学道友有一个全局概念.
  最早软件技术仅是单机上运行一个执行单个计算任务的程序,这些程序输出信息是靠纸袋打孔的方式,后来输出技术演进出现了显示器,但这不是我们要关注的,这些程序仅仅在单机上运行,并不能满足我们所有需要,我们更想要的是能多机通信,将一个主机上程序的运行结果输出给另一个主机,由它根据这些数据做其它事,但如何让两个机器通信? 于是研究员们就发明了网络通信, 网络通信出现后,最早并没有标准,你有你的实现, 我有我的实现,于是就是出现了很多局域网通信技术,如:令牌环,以太网等等,后来大家发现,光我们内部自己玩,还是太局限,于是研究员们又开始尝试将多个局域网连起来一起玩,这就诞生了广域网通信技术,如:点对点(PPP),ATM,帧中继(虚电路)等等,这看上去好像一切都搞定了,但细想一下,软件要如何通信?早期是没有TCP/IP协议的,所有协议都在各自为政,各自发展,如ipx,tcp/ip等等,每种协议各不兼容,也就ipx不认识tcp/ip,反过来依然,程序要怎么通信? 在局域网通信时,只能自行调用底层硬件驱动接口,写一套基于某局域网通信协议的通信组件,然后,只能跟基于这种局域网通信协议的程序通信,换一种就不能通信了,但广域网来了,大家要通信,问题又来了,我通过局域网能通信的程序,不能认识广域网通信协议的数据包,必须在重写一套能识别广域网协议的网络组件,然后才能进行广域网通信,但对端也必须和你一样,它也要使用相同的广域网通信协议开发网络组件,并且还要开发一个跟你一样的局域网通信组件,才能识别广域网转为局域网协议后,你发来的数据包到底是什么. 非常之麻烦! 如何才能解决这些问题? 所以各种各样的通信标准就出现了, 在局域网中以太网技术最终因其成本低,易维护,带宽高等优势成为了标准,广域网技术中,TCP/IP协议最终成为主流,成为标准, 这些就垫定了Internet的基础,但早期网络通信是非常复杂的,因为它太底层,对程序员的要求非常高,你必须对底层硬件驱动接口有非常精深的了解,才能完成操纵网卡收发数据包,才能使用好,因此就有大牛看不惯了,于是就对这些非常底层的驱动接口做了一层封装,对外提供了一个统一的操作接口,这就是socket编程,后来软件技术继续发展,人们发现即便是socket编程也是非常底层的,门槛依然很高,后来就又有大牛出来,对socket做了一层封装,RPC调用就出现了,网络编程的难度再次降低,这也就是目前比较常用的网络通信方法.
  说了这么多,这些和虚拟化有什么关系?
  想想看,虚拟化用最通俗的理解就是我们经常用到虚拟机,但这不准确,但可先这样理解,我们的笔记本上安装一个VMware就能安装很多台虚拟机,当然前提是你笔记本的CPU是支持硬件虚拟化的,在VMware中,VM之间通信我们都很清楚,它是通过VMnet虚拟网卡来通信的,这个虚拟网卡其实相当于一个虚拟网桥,所有连接到这个虚拟网桥上的VM都属于同一个局域网,因此它们之间就可以通信了,这个过程在我们看来很简单,但是其背后隐藏的虚拟网络才是虚拟化中最不可缺少的重要基础组件,而虚拟网络的根基则源于物理网络,而物理网络的根源则来源于网络通信,因此了解本源对深入技术的本质会有更深层次的理解,这个过程我个人觉得就是找到技术感觉的方法。
  

1.虚拟化原理介绍
2.libvirt
3.virsh
4.KVM原理(删除)
5.KVM原理和使用
6.KVM系统镜像制作
7.Xen原理
8.Xen简单使用(不建议花时间学习,以包含在Xen原理中了)

9.OpenStack总体架构概览&OpenStack核心组件介绍(待完善)
10.OpenStack一键部署Mitaka实现【这是我使用shell实现的测试环境部署脚本】
  https://github.com/zhang75656/openstarck-mitaka

11.TCP协议深度刨析
12.TCP Socket通信详细过程

13.网络虚拟化的基本模型简介(删除)
14.OpenFlow和SDN的历史和原理介绍
15.VxLAN原理
16.容器原理
17.OpenVSwitch原理
18.OpenVSwitch使用参考
19.容器虚拟化原理
20.Cloud-init
21.Docker原理及使用
22.Docker网络(待总结)
23.Harbor简介及配置
24.Harbor高可用

25.系统架构概念及思想1
26.系统架构概念及思想2
27.传统IT容量估算思路

28.iptables使用总结
29.firewall-cmd使用总结
30.TC学习总结 【对于虚拟化学习,非必须,此为扩展知识】
31.ipset使用总结 【对于虚拟化学习,非必须,此为扩展知识】
32.LVS负载均衡总结

33.Ubuntu使用小结(主要为后面部署K8s集群做基础铺垫)
34.Kubernetes简介
35.yaml语法介绍(K8s基础)
36.Kubeasz部署K8s基础测试环境简介
37.k8s实现灰度发布(K8s基础测试镜像制作参考)
38.K8s无状态控制器原理介绍
39.K8s Service原理介绍
40.K8s的存储卷使用总结
41.K8s configMap原理介绍
42.K8s StatfulSet使用总结
43.K8s集群认证之RBAC
44.K8s之flannel网络+Calico策略
45.调度器/预选策略/优选函数
46.容器资源限制
47.helm原理
48.ELK原理
49.Elasticsearch状态API接口排障总结
50.fluentd日志收集器简介(待总结)

 

posted @ 2019-08-03 12:45  张朝锋  阅读(1800)  评论(0编辑  收藏  举报