物理云:通过计算机网络提供的数据中心的计算资源服务

云计算:资源池化来提供服务的模型,有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

image

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:

  • 远程访问外部数据时实现解耦合