• K8S:本质


    容器

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

    架构

    在这里插入图片描述

    • 控制节点,即 Master 节点,由三个紧密协作的独立组件组合而成,它们分别是负责 API 服务的 kube-apiserver、负责调度的 kube-scheduler,以及负责容器编排的 kube-controller-manager。整个集群的持久化数据,则由 kube-apiserver 处理后保存在 Etcd 中
    • 计算节点,即Node,上最核心的部分,则是一个叫作 kubelet 的组件

    kubelet

    • 在 Kubernetes 项目中,kubelet 主要负责同容器运行时(比如 Docker 项目)打交道。而这个交互所依赖的,是一个称作 CRI(Container Runtime Interface)的远程调用接口,这个接口定义了容器运行时的各项核心操作,比如:启动一个容器需要的所有参数
    • 这也是为何,Kubernetes 项目并不关心你部署的是什么容器运行时、使用的什么技术实现,只要你的这个容器运行时能够运行标准的容器镜像,它就可以通过实现 CRI 接入到 Kubernetes 项目当中

    设计思想

    • kubelet 的另一个重要功能,则是调用网络插件和存储插件为容器配置网络和持久化存储。这两个插件与 kubelet 进行交互的接口,分别是 CNI(Container Networking Interface)和 CSI(Container Storage Interface)
    • Kubernetes 项目就没有像同时期的各种“容器云”项目那样,把 Docker 作为整个架构的核心,而仅仅把它作为最底层的一个容器运行时实现
    • 而 Kubernetes 项目要着重解决的问题:运行在大规模集群中的各种任务之间,实际上存在着各种各样的关系。这些关系的处理,才是作业编排和管理系统最困难的地方
    • Kubernetes 项目最主要的设计思想是,从更宏观的角度,以统一的方式来定义任务之间的各种关系,并且为将来支持更多种类的关系留有余地
    • 声明式API,这就是 Kubernetes 最核心的设计理念
    • 首先,通过一个“编排对象”,比如 Pod、Job、CronJob 等,来描述你试图管理的应用;然后,再为它定义一些“服务对象”,比如 Service、Secret、Horizontal Pod Autoscaler(自动水平扩展器)等。这些对象,会负责具体的平台级功能。这种使用方法,就是所谓的“声明式 API”。

    编排与调度

    • 过去很多的集群管理项目(比如 Yarn、Mesos,以及 Swarm)所擅长的,都是把一个容器,按照某种规则,放置在某个最佳节点上运行起来。这种功能,我们称为“调度”。
    • 而 Kubernetes 项目所擅长的,是按照用户的意愿和整个系统的规则,完全自动化地处理好容器之间的各种关系。这种功能,就是我们经常听到的一个概念:编排。所以说,Kubernetes 项目的本质,是为用户提供一个具有普遍意义的容器编排工具
  • 相关阅读:
    Ubuntu18.04运行gazebo的launch文件[model-4] process has died报错
    unity3d中单例模式两种简单写法与对比
    DHCP概述及原理
    【面试专栏】java线程第一篇:Java线程、线程状态、线程方法
    《棒球英豪》:青春球场·棒球1号位
    “如果哪天腾讯遇到了更大的挑战,也许就是新的一天开始了。“
    1-STM32之GPIO点亮LED
    js 小数相乘后,精度缺失问题,记录四舍五入,向下取整
    使用 Promise.withResolvers() 来简化你将函数 Promise 化的实现~~
    电脑重装系统后内存占用高怎么解决?
  • 原文地址:https://blog.csdn.net/weixin_40108561/article/details/125545081