虚机VM和容器化对比
虚机:操作系统级别的隔离,隔离性更强;需要提前将应用和VM的对应关系静态配置管理,开发维护效率低;每个虚机上都运行了一些系统服务(Guest OS),这些资源是额外的开销 容器: 更轻量化的隔离方案,隔离性稍弱;更轻量化体现在系统中少了很多系统服务(Guest OS),资源的利用率更高,同样的裸机资源可以支撑更多的应用软件运行;容器的调度和编排更加灵活,利用k8s等工具可以高效完成,开发维护效率高
镜像的构建、分发、运行
镜像是容器静态的描述,容器是根据镜像生产的动态的执行空间
k8s干了什么
根据开发人员提供的描述文件(通常是yaml),把整个应用系统方便地部署起来,并对整个系统提供升级、负载均衡等能力
k8s的系统架构
分为控制节点和工作节点:
控制节点:etcd提供持久化能力、API Server作为接口服务器、Scheduler提供调度能力、Controller Manager提供副本控制等能力 工作节点:Kubelet负责上下交互和管理、kube-proxy负责网络通信、Container Runtime是容器运行时
k8s的系统结构以及作用
根据开发人员提供的描述文件(通常是yaml),把整个应用系统方便地部署起来,并对整个系统提供升级、负载均衡等能力。
开发要干2件事:开发并制作镜像;提供描述文件 描述文件由控制节点处理, 控制节点通过Kubelet指挥各个工作节点做事
docker run干了什么
docker run busybox echo "Hello world"
的背后是一连串的操作
制作一个镜像,打印主机名
//app.js
const http = require('http');
const os = require('os');
console.log("Kubia server starting...");
var handler = function(request, response) {
console.log("Received request from " + request.connection.remoteAddress);
response.writeHead(200);
response.end("You've hit " + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080);
FROM node:7
ADD app.js /app.js
ENTRYPOINT ["node", "app.js"]
docker build
按照Dockerfile文件,构建镜像,按照菜谱做菜
分层构建
镜像在构建时,是分层构建的,Dockerfile中一个单独的语句会产生一个层 镜像分层的好处,多个镜像可以复用某些层
kubectl如何运行
容器、Pod和节点的关系
在k8s中运行Pod的
Service以及副本控制器
副本控制器:监控对应的Pod个数是否符合预期,动态保持平衡(即如果有Pod因为Node离线等各种原因被销毁,则自动新建Pod) Service:对外提供稳定的服务,屏蔽内部的变化,以不变应万变
Pod,k8s中可调度的最小单元
Pod内部可以是多个Container、也可以是1个Container(k8s的优秀实践认为,最好一个Pod仅有一个Conatiner)。但是,对于多个容器的Pod,Pod不可能横跨2个节点上。Pod是k8s中可调度的最小单元,不可再拆分
Pod的网络
一个词总结概括,就是平坦。一个Pod一个IP,不同的Pod通过IP就可以互通、不需要NAT转化