帮助你理解容器化基本概念的18张图

文摘   2024-08-19 00:00   陕西  


虚机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转化

Pod的规划的原则:解耦,如非必要、尽量分割

kubectl port-forward测试场景中如何连接Pod网络

灵活的Label

基于Label灵活管理Pod


编程废柴
努力Coding