Kubernetes
物理云:通过计算机网络提供的数据中心的计算资源服务
云计算:资源池化来提供服务的模型,有iaas,paas…,层不一样
无服务计算:只关心应用程序的逻辑,其他的任务如服务的实现交给cloud provider
Faas:会计算这个函数,这种输入用到多少CPU等资源消耗,进而进行计费
云端开发程序的一个目的是随着用户越来越多,弹性的扩展资源,是基于云提供商提供的服务开发一个更为上层的服务
KVM在内核去监管用户空间的虚拟机应用,硬件的虚拟化由QEMU实现,虚拟机对虚拟硬件资源的请求会翻译为内核空间的指令,通过KVM调度真实硬件资源
云的开销部分来自于Hypervisor等带来的资源消耗,以及OS的许可
容器没有虚拟化,是基于OS的运行环境打包,其大小也是弹性的,取决于你需要多少资源
所以编排容器的时候需要声明容器的环境以及容器之间的交互情况,所谓环境是包管理和资源分配
镜像(image):系统状态的快照,存有相关的静态资源,运行时成为系统组件
所以容器镜像实在基础镜像之上添加层,容器是镜像的运行载体,镜像也由容器创建
Dockerfile会按层通过docker builder构建镜像,在base image上添加不同的层来添加环境组件
容器的生命周期由deamon管理
容器之间的隔离通过namespace
Docker uses a union file system to combine these layers into a single image. Changes in one layer do not affect the underlying layers. This makes images lightweight, as only the changes are stored.
Each layer represents a snapshot of the filesystem, which can be useful for rolling back changes or tracking modifications.
微服务架构去部署应用程序可以解耦合依赖关系,将不同组件放到不同容器中,只暴露API接口
容器编排是对容器进行多功能的管理和优化,包括创建副本,动态增加等
Docker管理容器的生命周期,kubernetes监控docker的运行,负责容器编排
也就是说,docker提供容器技术
Kubelet 通过容器运行时接口(CRI)与 Docker(或其他容器运行时)进行通信,以创建、启动和停止容器
每一个节点一个docker daemon
kubernetes将很多组件用作他自己本身的架构
kubelet可以帮助找到container,最重要的是API-server,用户和系统运行的接口
etcd分布式数据库存储着调度信息
pod内部的container之间共享网络和存储,IP相同,可挂载共享卷来持久化存储
pod将容器进行逻辑分割,提供管理抽象,所以pod与docker之间解偶
一个pod里面的一个container就像是一个host里面的一个app
kubectl run [podname] —image=[默认搜索dockerhub]
-i 是标准输入,-t是tty
kubectl describe component name
specific name
一个cluster中的pod之间可以通过pod的虚拟ip进行通信
horizontal scaling: an dynamically add or remove nodes to accommodate changing workload demands
本机访问节点:kubectl port-forward —address 0.0.0.0 mypod 8888:8080
kubelet belongs to control plane
kubelet excute the schedule
objects: controller organize the system resources to run or operate
different pods can install different database
default type: Cluster IP
Deployment:
- 滚动更新和重建更新
Endpoint:
- 对pods抽象的低级别扩展
- 增强Service对pods控制的自定义性
存储:
- 外部存储,无法提供healthy check
- k8s提供的功能,提供存储管理
- 暂时存储
- 永久存储
emptyDir Volume:
- 周期:Pod内
- 目录: /opt/data
nodeAffinity:
- 确保PV绑定到节点上
ConfigMap:
- 主要作用是将配置信息与容器化应用分离,使得配置可以在不重新构建镜像的情况下进行修改
一个容器运行一个进程,启动容器设置初始化任务
Downward API:
- 注入静态的环境变量和元信息到Volumn上
Init container:
- 容器之间共享存储,所以可以将一些功能分开
Sidecar container(动态更新存储数据):
- 数据同步器
- 传递和监控容器信息
- 管理流量和增强安全性(nvoy in Istio)
- 更新配置
- 安全验证
Ambassador pattern:
- 远程访问外部数据时实现解耦合