发展历程
容器概念
容器
特点
- 独立的文件系统 - chroot
- 控制资源使用率 - cgroup [PID_Namespace、IPC_Namespace、Mount_Namespace、Network_Namesapce、UTS_Namespace]
- 资源视图隔离 - namesapce
容器是一个视图隔离、资源可限制、独立文件系统的进程集合
镜像
运行容器所需要的所有文件集合-容器镜像
Dockerfile - 描述镜像构建步骤
构建步骤所产生出文件系统的变化 - changeset
changeset具备分层复用特点
- 类似 disk snapshot
- 提高分发效率,减少磁盘压力
生命周期
单进程模型
容器项目的架构
moby容器引擎架构
Containerd 是一个工业级标准(OCI(Open Container Initiative))的容器运行时,它强调简单性、健壮性和可移植性。Containerd 可以在宿主机中管理完整的容器生命周期:容器镜像的传输和存储、容器的执行和管理、存储和网络等
- 容器运行时管理引擎,独立于moby daemon
- containerd-shim管理容器生命周期,可被containerd动态接管
容器运行时
- 容器虚拟化技术方案
- runC kata gVisor
kuberneters基本概念
master
负责集群的管理调度工作
- API Server(组件之间链接的依赖)
- Controller(对集群状态的管理、扩张、修复等)
- Scheduler(完成容器在集群内的调度、分配)
- etcd(高可用存储系统、存储API Server所需的集群原信息)
Node
运行集群业务负载的组件
Pod
最小的调度及资源单元、由一个或多个容器组成、定义容器运行的方式、提供容器共享网络、进程空间等
静态Pod
静态Pod有kubelet进行管理,仅存在特定的Node上的Pod。不能通过API Server进行管理,无法与ReplicationController、Deployment或者DaemonSet进行关联,并且kubelet也无法对它们进行健康检查。静态Pod总是由kubelet进行创建,并且总是在kubelet所在的Node上运行。
Pod的调度
- 定向调度
通过Master上的Scheduler服务实现Pod的调度工作,为Node打定标签后,可通过Pod的nodeSelector属性匹配调度到指定Node
- 亲和性调度
不同于Label的精确匹配,NodeAffinity亲和性
Kubelet
在Api Server获取Pod运行状态,通过Container Runtime、Storage Plugin、Network Plugin、Kube-proxy 在Node 的 OS上创建容器运行所需的资源、环境
Volume
- 声明在Pod中的容器可访问的文件目录
- 可以被挂载在Pod中一个(或者多个)容器的指定路径下
- 支持多种后端存储的抽象
- 本地存储、分布式存储、云存储
Deployment
- 定义一组Pod的副本数目、版本等
- 通过控制器(Controller)维持Pod的数目
- 自动恢复失败的Pod
- 通过控制器以指定的策略控制版本
- 滚动升级、重新生成、回滚等
Service
- 提供访问一个或多个Pod实例的稳定访问地址
- 支持多种访问方式实现
- ClusterIP
- NodePort
- LoadBalancer
IP
- Node IP: Node 节点IP地址,集群节点中的物理网卡IP地址
- Pod IP : Pod的IP地址,Docker Engine根据docker0网桥的IP地址段进行分配,通常是虚拟的二层网络,Pod之间通信在一个广播域内通过MAC地址进行报文交换
- Cluster IP:Service的IP地址,由Kubernetes管理分配,每个Node运行一个
kube-proxy
负责为Service
实现一种VIP- iptables代理模式
- IPVS代理模式
- Userspace代理模式
Namespace
Namesapce在很多情况下用于多租户资源隔离,
#kubectl get
默认显示“default”命令空间的资源对象。可针对Namesapce进行资源配额管理
- 一个集群内部的逻辑隔离机制(鉴权、资源额度)
- 每个资源都属于一个Namespace
- 同一个Namespace中的资源命名唯一
- 不通Namesapce中的资源可重名
API
HTTP + JSON/YAML的格式呈现,通过kubectl、UI、curl 访问控制
API-Label
- 一组Key:Value
- 可以被selector所查询
- select color = red
资源集合的默认表达形式
build信息、Docker镜像信息、时间戳
- 日志库、监控库、分析库等
- 程序调试信息
- 团队联系信息
Pod & 容器设计
两种设计模式
- initContainer
- Init Container 会比用户容器先启动,并且严格按照定义顺序来依次执行
- Sidecar
应用存储和持久化数据卷
核心知识
存储快照与拓扑调度 snapshot & Topolopy
- 动态生成