软件系统生在云上,长在云上,利用云的资源敏捷,可扩展
不可变基础设施
自包含、可定制镜像
快速部署和隔离
自动化管理创建销毁
可复制的管控系统与支撑组件
云编排(Docker)
视图隔离、资源可限制、独立文件系统的进程集合。是一个单进程模型。原子调度单位。
单进程模型
比如有一个进程组hello,在这个进程组里边还有4个进程,由于容器是单进程模型,所以k8s会启动4个容器,每个容器里 边运行一个进程,而整个进程组是有Pod由管理,启动hello,会启动4个容器,共享一定的资源,定义在一个Pod中
隔离 -提供独立的运行环境
Linux提供chroot 使文件系统隔离
资源视图 namespace(网络资源...)
资源使用率 cgroup[systemd、cgroupfs两种驱动方式 ]
镜像 运行容器所需要的文件集合
dockerFile
分层可复用 changeset
build once run anywhere
生命周期
init进程=容器生命周期
数据卷 docker volume
docker run -v demo to
docker create volume demo
容器 VM
是否具有单独的内核
是否进程级别的隔离
支持自动化部署、大规模可伸缩、应用容器化管理。在k8s中,我们可以创建多个容器,每个容器运行一个实例,然后通过内置的负载均衡策略,实现对者一组应用实例的管理、发现、访问、扩展、自愈等等
服务发现负载均衡
存储编排
自动部署修复 迁移
水平伸缩 负载均衡
Master 负责管理整个容器,通过暴露出来的API Server和Node通信
每个业务负载以Pod形式运行,一个pod中运行一个或者多个容器,真正运行的是Node上的kubelet通过APIServer将状态提交到container runtime上,将容器运行
Node上的组件(Container Runtime\Storage plugin\Network plugin\kube-proxy[跨集群访问])
POD创建工作流
K8S通过将容器放入节点上运行POD来执行具体的工作负载,节点可以是一个虚拟或者物理机
向API服务器添加节点的方式:1.节点上的kublet向控制面自注册 2.手动添加Node对象
最小的调度以及资源单元,包括一个或者多个容器。
由于不能将多个进程聚集在一个单独容器,需要另外一种高级结构将容器绑定在一起,作为一个单元管理,这就是Pod背后根本原理
一个pod的共享上下文包括一组linux名字空间、控制组和kennel一些其他的隔离的技术,共享相同ip和端口空间
定义容器运行的方式 提供给容器共享的运行环境
共享网络:Pod 中的容器会作为一个整体被 Master 调度到一个 Node 上运行,具有一个IP地址,通过Infra Container方式共享一个NetWork Namespace.
共享存储:申明同一个volumes
InitContainer:容器启动之前启动 => sideCar 抽离出来一个单独的容器,执行业务的辅助工作(代理、Adapt)
申明pod可访问的文件目录 挂载在一个或者多个容器指定路径下 支持分布式远程云盘
提供访问一个或者多个Pod的访问地址
一个集群内部的逻辑隔离 同一个NameSpace资源命名唯一
类似负载均衡的中间件,而headless是干掉中间转发件之后的,其Cluster IP为None
Spec期望的状态
Status观测到的状态
MetaData
labels、
annotations、 扩展存储非标识性信息、OwnerReference、集合类资源
如 果更具POD需求找到满足的Node,称之为可调度节点,如果没有找到,则状态一直停留为未调度状态
调度器负责寻找可调度节点,通过watch手段发现集群中存在且尚未调度的节点上的POD,更具一系列的函数规则打分,先择最高的,并将调度决定通知kube-apiserver
NodeSelector
首先需要在nodes里边添加label
在Pod的中的Spec部分添加NodeSelector部分
亲和性和非亲和性(包括Node和Pod)
Taints污点-排斥某类型的POD
nodeName
Pod优先级-PriorityClass
压力驱逐
达到消耗水平的临界值,kubelet使节点失效,包括软硬驱逐
k8s默认提供的弹性伸缩组件,主要VPA、HPA伸缩分类:
(立即执行、定时伸缩、预测性伸缩(后两种暂无成熟方案))
垂直伸缩 (VPA)【根据容器资源使用率自动设置CPU以及内存】
AddonResizer
VPA定期查看pod资源使用情况, 主要从metric server中采集数据,需要重启pod,如果计算超过node可用资源,将导致pod一直pedding
水平伸缩(HPA)
Cron HPA、 MetricHPA
根据cpu和memory的使用率自动缩放 replication 控制器,deployment,副本集或状态集中的 pod 数量
水平伸缩
CA节点水平伸缩能否成功实施,与调度策略密切相关。kubernetes 在为 pod 选择可分配节点时, 是采用 LeastRequestedPriority 策略,简单来说就是就是尽可能把资源打散,把 pod 分配到资源利用率低的节点。这样会倒是有一批利用率较低,但未到缩容阈值的节点,因此会导致无法成功缩容,资源利用率低
垂直伸缩
具体有厂商提供,主机是否支持升降配,考虑过程中主机是否需要进行重启(节点驱逐)
cpu:“30”表示30个core,100m表示0.1个core云原生架构