一、容器基本概念
容器运行时,多种虚拟化技术,runC、kata、gVisor等。containerd -shim不是个lib,是个守护进程,管理容器生命周期,可被containerd动态接管。
(可以从containerd中脱离出来,插件化管理)
容器引擎架构
有状态数据不能随容器删除丢失,挂在卷来持久化。
二、K8S核心概念
1、K8S——自动化容器编排平台:部署、弹性、管理。
核心功能:服务发现与负载均衡、容器自动装箱、存储编排、自动容器恢复、自动发布与回滚、配置与密文管理、
批量执行、水平伸缩。
调度:调度器(组件)将容器装到集群的某一台机器上
2、K8S架构
k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象。在k8s中,一般使用yaml格式的文件来创建符合我们预期期望的pod,这样的yaml文件我们一般称为资源清单
- Master
用户不会直接与Node交互,通过master
master主要4个组件
api server:所有组件都跟api server进行连接,组件间一般不独立连接,通过api server传送消息 。本身可以水平扩展
控制器:集群状态的管理,自动修复、水平扩张。可以热备
调度器:完成调度操作。只有一个active,可以热备。
分布式存储:etcd本身是高可用系统。
- Node
运行pod的组件是Kublet,Node中最关键的组件。每个node都会运行这几个组件:
通过api sever接收到需要pod运行状态的指令 ,提交到container runtime组件中,在OS中创建容器运行所需的环境,把容器运行起来。
kubelet不会直接对网络、存储进行操作,靠插件进行操作,厂商写网络插件、存储插件,真正进行操作。
在kubernetes中也有它自己的network,为提供service network进行组网。真正完成service组网的组件是kube-proxy。
一次调度pod执行操作
3、K8S核心概念与API
- pod:最小调度及资源单元,一个多个容器组成。
定义容器运行的方式(Command、环境变量等),提供给容器共享的运行环境(网络、进程空间)
- Volume(管理K8S存储)
声明在Pod中的容器可访问的文件目录。一个卷可被挂载在pod中一个或多个容器的指定路径下。
(是个抽象的概念)支持多种后端存储的抽象:本地存储、分布式存储、云存储。
- Deployment
pod上层的抽象,定义一组pod的副本数目、版本等。一般用deployment做应用的管理。
通过控制器维持pod的数目(自动恢复失败的pod)
通过控制器以指定的策略 控制版本(版本升级、重新生成、回滚等)
- Service
提供访问一个或多个pod实例的稳定访问地址。(用户想访问一个固定 的VIP,而不像要各容器的IP。负载均衡)
实现service有多种方式:ClusterIP,NodePort,LoadBalancer
- Namespaces
一个集群内部的逻辑隔离机制(鉴权、资源额度)每个资源pod,deployment、service都属于一个namespace。
三、pod与容器设计模式
所有“设计模式”的本质都是:解耦和重用。
容器本质是一个视图被隔离、资源首先的进程。
容器里PID=1的进程就是应用本身。(管理虚拟机= 管理基础设施;管理容器 = 直接管理应用本身)
K8S——云时代操作系统,容器镜像——软件安装包。容器——进程,pod——进程组。
1、pod设计的原因
亲密关系- 调度解决
两个应用需要运行在同一台宿主机上
超亲密关系-Pod 解决
会发生直接的文件交换
使用localhost或者Socket文件进行本地通信