共计 2006 个字符,预计需要花费 6 分钟才能阅读完成。
容器,只是一种非凡的过程
一个“容器”,实际上是一个由 Linux Namespace、Linux Cgroups 和 rootfs 三种技术构建进去的过程的隔离环境。
- 虚拟机是在宿主机中装置并运行一个新的操作系统;Docker 只是在宿主机创立过程时加上了 Namespace 参数
- Docker 默认启用的 Namespace:PID,UTS,network,user,mount,IPC,cgroup
- 容器是一个单过程模型,在一个容器中不能同时运行两个不同的利用。
- 单过程的意思不是只能运行一个过程,而是只有一个过程是 docker 可控的
隔离与限度
- 在 Linux 内核中,有很多资源和对象是不能 Namespace 化的,比方工夫。
- Linux Cgroups(Linux Control Group)是 Linux 内核中用来为过程设置资源限度的一个重要性能,次要作用是限度一个过程组可能应用的的资源下限,包含 CPU、内存、磁盘、网络带宽等。
- Cgroups 还能对过程进行优先级设置、审计,以及过程挂起复原。
- Cgroups 以文件和门路的形式组织在 /sys/fs/cgroup 门路下,上面的子目录如 cpu、memory 也叫子系统。
深刻了解容器镜像
Mount Namespace
- Mount Namespace 批改的,是容器过程对文件系统“挂载点”的认知。
- Mount Namespace 跟其余 Namespace 的应用略有不同的中央:它对容器过程视图的扭转,肯定是随同着挂载操作(mount)能力失效。
rootfs 根文件系统
- rootfs 是挂载在容器根目录上、用来为容器过程提供隔离后执行环境的文件系统,也就是所谓的“容器镜像”。
- rootfs 只是一个操作系统所蕴含的文件、配置和目录,并不包含操作系统内核。
- 同一台机器上的所有容器,都共享宿主机操作系统的内核。
- 容器的 rootfs 由 只读层 , 可读写层 ,Init 层 组成
UnionFS (Union File System) 联结文件系统
- Docker 在镜像的设计中,引入了层(layer)的概念。也就是说,用户制作镜像的每一步操作,都会生成一个层,也就是一个增量 rootfs。
- Docker 镜像应用的 rootfs,往往由多个“层”组成。
- 每一层都是 Ubuntu 操作系统文件与目录的一部分;而在应用镜像时,Docker 会把这些增量联结挂载在一个对立的挂载点上(等价于后面例子里的“/C”目录)
Kubernetes 的实质
镜像和容器
- 一组联结挂载在 /var/lib/docker/aufs/mnt 上的 rootfs,这一部分咱们称为“容器镜像”(Container Image),是容器的动态视图;
- 一个由 Namespace+Cgroups 形成的隔离环境,这一部分咱们称为“容器运行时”(Container Runtime),是容器的动静视图。
Kubernetes 解决的问题
- 在一个给定的集群上运行利用。
- 路由网关、程度扩大、监控、备份、劫难复原等一系列运维能力。
Kubernetes 我的项目架构
管制节点(Master 节点)
- kube-apiserver 负责 API 服务
- kube-scheduler 负责调度
- kube-controller-manager 负责容器编排
整个集群的长久化数据,由 kube-apiserver 解决后保留在 Etcd 中
计算节点(Node 节点)
- kubelet 同容器运行时打交道(比方 Docker 我的项目)
- CRI(Container Runtime Interface):定义容器运行时外围参数的近程调用接口。
- CNI(Container Networking Interface):容器网络插件
- CSI(Container Storage Interface):容器存储插件
- Device Plugin:治理宿主物理设施的组件
Kubenetes 的设计思维
- 从更宏观的角度,以对立的形式来定义工作之间的各种关系,并且为未来反对更多品种的关系留有余地。
- “申明式 API”。这种 API 对应的“编排对象”和“服务对象”,都是 Kubernetes 我的项目中的 API 对象(API Object)
Pod
- Pod 是 Kubernetes 我的项目中最根底的一个对象。
- 划分规定:须要十分频繁的交互和拜访,或间接通过本地文件进行信息替换的利用。
- Pod 里的容器共享同一个 Network Namespace、同一组数据卷
Service
- Service 服务的次要作用,就是作为 Pod 的代理入口(Portal),从而代替 Pod 对外裸露一个固定的网络地址。
- Service 后端真正代理的 Pod 的 IP 地址、端口等信息的自动更新、保护,则是 Kubernetes 我的项目的职责。
其余
- Secret:保留在 etcd 里的键值对数据,Web 利用 Pod 启动时挂载到容器里,通过 Secret 拜访数据库。
- Job:一次性运行的 Pod(比方,大数据工作)
- DaemonSet:每个宿主机上必须且只能运行一个正本的守护过程服务
- CronJob:定时工作
正文完
发表至: kubernetes
2021-08-12