Microservices Deployment via Docker/K8S
微服务是可以快速构建、修改和部署到独立生产环境中的小型代码单元。可以快速进行迭代开发和交付,从而部署应该也具有如下特征:
- 自动的——部署应该是能全部自动化的。
- 可重复的——部署流程是可以重复的,不因开发人员或环境变化而影响
- 完整的——部署成果应该是一个完整的虚拟机或者容器镜像(Docker),能够自包含运行
- 不可变的——服务镜像一旦构建运行时配置不应该被修改,修改应该从代码提交开始
云原生——Docker容器技术
容器是镜像的运行时实例。容器虚拟化操作系统资源,容器引擎划分操作系统资源(比如进程树,文件系统,网络栈等),将其打包到成为容器的虚拟操作系统中,运行一个应用。
容器技术不同于Hypervisor技术,后者将物理资源划分为虚拟机的虚拟版本,前者将操作系统本身划分为容器的虚拟版本。
容器镜像构建
Dockerfile是镜像构建的描述文件,以易于阅读的格式准确描述了应用及其依赖。Dockerfile由一系列指令组成,每条指令构建镜像的一层。镜像构建的基础目录就是Dockerfile所在的目录。
Dockerfile的构建指令包括:
- FROM:指定基础镜像
- RUN:在容器中执行命令
- COPY:复制文件到容器中
元数据指令包括:
- MAINTAINER:镜像作者
- LABEL:镜像标签
- EXPOSE:容器对外暴露的端口
- ENV:环境变量
- ENTRYPOINT:容器启动时执行的命令
- CMD:容器启动时执行的命令
- VOLUME:容器数据卷
Docker镜像的构建是分层叠加文件系统的过程,每条指令构建一层,镜像构建完成后,可以运行容器。文件是增量叠加的,删除上层镜像中的文件目录并不能真正的删除文件本身,而是在顶层layout中将文件隐藏,所以镜像文件并不能真正的变小。
- docker inspect命令可以查看镜像的构建过程,包括每一层构建的layer文件和指令。
- docker build命令可以逐行解析运行dockerfile构建镜像。
- docker history命令可以查看构建镜像的所有指令。
多段构建
多段构建有多个FROM命令,每一个FROM命令都会构建一个WORKINGDIR,以及一个独立的镜像,这为灵活运用镜像构建WORKSPACE提供了能力,甚至最终的运行时镜像可以引用完全不同的净化的base image,从而构建出与开发环境完全不同的运行时镜像。
同时也可以用 –target prod-client -f Dockerfile-final来灵活指定构建生产环境的客户端镜像。
容器网络栈虚拟化
Docker网络是基于容器网络模型的开源可插拔架构。libnetwork是CNM的实现,提供了docker的核心网络能力。Linux OS层面提供网络虚拟化的基础是VLAN,这是对eth0的拆分,每个VLAN都是一个独立的虚拟网络绑定到eth0.100等等,每个VLAN的流量都是隔离的,这是因为网桥间的隔离。Docker网络虚拟化基于VLAN,但是VLAN的隔离粒度是二层,而Docker网络虚拟化可以支持三层隔离,即每个容器可以拥有独立的IP地址,从而实现容器之间的子网隔离,也就是说在VLAN内部,即使可以将容器放在不同的子网段,保证网络间的相互通信。
VLAN
对于操作系统能L2的链路设计,是基于802.11Q扩展协议,让网卡从硬件上支持虚拟化,从而实现VLAN的隔离。VLAN不直连,并不代表两边的容器不同相互通信,如果VLAN是连向公网的,就可以通过公网通信。
VNET
虚拟子网一般是一个私网,类似于一个k8s cluster的所有容器都会在同一个VNET中,对于集群向外的通信,不要一个网关(也就是路由器)同时拥有私网IP(一般是网关IP)和公网IP(普通IP)从而可以建立路由规则,将私网向外访问的流量转发到网关,转发出去。类似于cluster的Egress IP。Ingress则是负载均衡的入口,对于外网的客户端,需要访问clkuster内部的应用,必须通过Ingress负载均衡反向代理流量进入容器,从而达到通信的目的,客户端只能发现到Ingress的IP。
容器运行时
runc是开放容器计划OCI运行时规范的实现。它的任务是与底层OS交互,启动和停止容器,docker每个容器都是runc创建的。OCI包括镜像规范,运行时规范,分发规范。
containerd管理容器的生命周期,包括拉取镜像和管理runc实例。
dockerd执行更高级别的任务,如暴露docker API,管理镜像,管理卷,管理网络等。
flowchart TD; A[runc内核级工作] --> B[containerd容器生命周期管理] B --> C[Docker守护进程CLI/API/Image/Network/Storage]