关于kubernetes:深入剖析Kubenetes学习笔记01

50次阅读

共计 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 的实质

镜像和容器

  1. 一组联结挂载在 /var/lib/docker/aufs/mnt 上的 rootfs,这一部分咱们称为“容器镜像”(Container Image),是容器的动态视图;
  2. 一个由 Namespace+Cgroups 形成的隔离环境,这一部分咱们称为“容器运行时”(Container Runtime),是容器的动静视图。

Kubernetes 解决的问题

  1. 在一个给定的集群上运行利用。
  2. 路由网关、程度扩大、监控、备份、劫难复原等一系列运维能力。

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:定时工作
正文完
 0