Vagrant 虚拟机管理

个人操作系统并不需要配置化,但随着开发人员的复杂化,每个开发人员都需要同样的主机系统以保证开发环境的可移植性;另外一方面,随着微服务的推广需要多主机节点管理,重复性的指令配置消耗大量时间且容易出错,于是出现了多主机配置化,可以用现在流行的说法“基础设施即代码”,Infrastructure as code (IaC),例如 docker machine、vagrant,本文将讲解 vagrant 的使用,并安装 Kubernetes 集群进行实战。

Docker Stack 多服务

我们从简到繁看一下 Docker 的学习路线:

  • docker run:Single Engine(者称 Single-Host,单 Docker 节点)下单服务运行
  • docker-compose:Single Engine(或者称 Single-Host,单 Docker 节点)下多服务编排
  • docker swarm:Multi-Host(多 Docker 节点,集群)下单服务编排
  • docker stack:Multi-Host(多 Docker 节点,集群)下多服务编排

可以看到 docker stack 其实就是 docker-compose 多应用和 docker swarm 规模化两者的结合。

Dockerfile 应用容器化及 Compose 部署应用

将应用整合到容器中并且运行起来的这个过程,或者把应用打包成为一个镜像的过程,称为容器化,有时也叫作“Docker 化”。容器化核心就是创建镜像,创建镜像有两种方式,一种是 commit 容器,还有一种是使用 Dockerfile 快速创建自定义镜像。

docker compose 能够在 Docker 节点上,以单引擎模式(Single-Engine Mode)进行多容器应用的部署和管理。它区别于 Swarm 和 Kubernetes 可以进行多引擎多容器应用部署(在 docker 中叫 swarm mode,Compose does not use swarm mode to deploy services to multiple nodes in a swarm)。compose 和 Kubernetes 其适用范围不同,所以不适合作对比。

Docker Engine

目前,以容器技术为代表的应用形态和以虚拟化为代表的系统形态完美融合于 OpenStack 生态圈之上,Kubernetes 是用于自动部署,扩展和管理容器化应用程序的开源系统(基于容器技术的分布式架构),Kubernetes 底层支持两种容器技术 Docker 的 containerd 和 CoreOS 的 rkt。
Docker 主要以 linux 内核的 namespace 和 cgroup 等特性为基础,保障进程或者进程组处于一个隔离、受限、安全的环境之中。Docker 用 Go 实现,并在容器技术之中有风靡之势。自 2007 年 cgroups 合并至 linux 内核 2.6.24 版本,2008 年 LXC 诞生,2009 年 Go 发布,2013 年 Docker 开源,2015 年 Kubernetes 发布。到 2018 年已经有不少企业应用于生产环境;当然不免有唱衰的 再见 docker

网络杂谈

摘要:在局域网需要靠物理地址发送给对应的主机,而到广域网是用的 IP 地址进行报文转发。IP 是点到点,负责发送给对应的主机,而 TCP 是端到端,负责发送给对应的应用程序。

HTTP/2 协议

HTTP/1.1 与 HTTP/2 相隔了大概20年,但是从目前的研究和实验情况来看,我们不可能等上几十年才升级到下一个版本,h2 在逐渐的普及。
h2 和 h1 的最大差别在于在 http 层上增加了分帧层;把原来的 http 层的数据拆分成多种帧类型,并在每种类型前加上协议性的帧首部。基于二进制分帧的优点:

  1. 传输使用的编码方式改变(采用帧、流模式),不用创建多个 TCP 连接,单个连接就可以有多个流(处理主页面和所有子元素的请求),能够减少延迟,服务器和浏览器的 socket 负载也大大减少。
  2. 并行处理,乱序发送帧,不再采用 pipeline 阻塞方式
  3. 传输的功能得以扩展(如服务端推送、首部压缩、优先级、流量控制)。

学习 HTTP/2 最好的文档是 RFC 7540。

DevOps

DevOps 是一套实践方法,在保证高质量的前提下缩短系统变更从提交到部署到生产环境的时间,它设想在开发组和运维组之间没有冲突。