Kubernetes 入门实战课
罗剑锋
Kong 高级工程师,Nginx/OpenResty 开源项目贡献者
19527 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 41 讲
Kubernetes 入门实战课
15
15
1.0x
00:00/00:00
登录|注册

10|自动化的运维管理:探究Kubernetes工作机制的奥秘

你好,我是 Chrono。
在上一次课里,我们看到容器技术只实现了应用的打包分发,到运维真正落地实施的时候仍然会遇到很多困难,所以就需要用容器编排技术来解决这些问题,而 Kubernetes 是这个领域的唯一霸主,已经成为了“事实标准”。
那么,Kubernetes 凭什么能担当这样的领军重任呢?难道仅仅因为它是由 Google 主导开发的吗?
今天我就带你一起来看看 Kubernetes 的内部架构和工作机制,了解它能够傲视群雄的秘密所在。

云计算时代的操作系统

前面我曾经说过,Kubernetes 是一个生产级别的容器编排平台和集群管理系统,能够创建、调度容器,监控、管理服务器。
容器是什么?容器是软件,是应用,是进程。服务器是什么?服务器是硬件,是 CPU、内存、硬盘、网卡。那么,既可以管理软件,也可以管理硬件,这样的东西应该是什么?
你也许会脱口而出:这就是一个操作系统(Operating System)!
没错,从某种角度来看,Kubernetes 可以说是一个集群级别的操作系统,主要功能就是资源管理和作业调度。但 Kubernetes 不是运行在单机上管理单台计算资源和进程,而是运行在多台服务器上管理几百几千台的计算资源,以及在这些资源上运行的上万上百万的进程,规模要大得多。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kubernetes是一个被誉为“事实标准”的生产级容器编排平台和集群管理系统。本文深入探讨了Kubernetes的内部架构和工作机制,将其比喻为集群级操作系统,具备资源管理和作业调度功能。与传统操作系统不同,Kubernetes需要开发人员和运维人员共同参与,形成了DevOps模式。文章介绍了Kubernetes的基本架构,包括Master Node和Worker Node,以及节点内部的组件和插件。Master节点包括apiserver、etcd、scheduler和controller-manager,它们通过RESTful API和etcd实现了Kubernetes强大的自动化运维能力。Node节点的组件包括kubelet、kube-proxy和container-runtime,它们负责管理节点的操作、网络通信和容器生命周期。此外,文章还介绍了Kubernetes的插件,如DNS和Dashboard,用于扩展和增强集群的管理能力。总体而言,本文详细解释了Kubernetes的工作原理和架构特点,适合读者快速了解该技术的核心概念,为理解和应用Kubernetes提供了重要参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kubernetes 入门实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(36)

  • 最新
  • 精选
  • 自由
    1. Kubernetes 算得上是一种操作系统吗? 算。什么是 OS,例如在物理服务器上,它用于对物理服务器硬件资源的抽象,并对进程进行调度等等。那么 Kubernetes 就是对云上资源的抽象,并对云原生微服务应用进行调度。Kubernetes 可以对公有云、私有云进行统一抽象,并实现对负载的无缝迁移和均衡,不会永远被绑定在某一个特定的云上。 OS,能屏蔽底层的复杂性,例如 Linux ,我们不用关心程序运行在哪个 CPU 核心上,OS 已经搞定了。Kubernetes 对云和应用程序进行了类似的管理,无须明确对应用程序在哪个节点或存储卷上进行硬编程。 2.我理解的 Kubernetes 组件的作用 2.1 主节点上的组件 2.1.1 API Server 负责集群中所有组件通信。访问它必须经过授权于认证。 2.1.2 集群存储 在控制平面中,只有集群存储是有状态的(会持久化的意思),存储集群的配置与状态。Kubernetes 底层用 etcd。etcd 认为一致性比可用性更加重要。对于所有分布式数据库,写操作性的一致性至关重要。etcd 使用 Raft 一致性算法解决这个问题。 2.1.3 Controller 管理器 Controller 管理器实现了控制循环,完成集群监控与事件响应。它负责创建 controller。一般控制循环包括:工作节点 controller、终端 controller 以及副本 controller。集群监控目的是保证集群当前状态与期望状态相匹配。集群监控基础逻辑大致如下: * 获取期望状态。 * 观察当前状态。 * 判断差异。 * 变更消除差异点。 2.1.4 调度器 调度器职责是监听 API Server 来启动工作任务,并分配合适的节点。它的核心是排序系统,该系统有评分机制,将工作分配到分数最高的节点来运行任务。调度器确定可以执行任务的节点后,还会再进行前置校验,例如该节点是否仍然存在、分配的任务需要的端口当前选择的工作节点是否可以访问等,如果无法通过,该节点会被直接忽略,如果调度器最后无法找到合适的工作节点,则当前任务无法被调度,并被标记为暂停状态。
需要特别注意,调度器不负责运行任务,只为任务负责分配合适的工作节点。 2.2 工作节点上的组件 2.2.1 Kubelet 工作节点的核心部分。新工作节点加入节点后,Kubelet 会被部署到新节点,然后 Kubelet 将当前节点注册到集群中。它还有一个职责,监听 API Server 分配的任务,监听到就执行该任务,并维护一个与控制平面的通信频道。 2.2.2 容器运行时 工作节点需要通过它来获取、启动、停止执行任务依赖的容器,它负责容器管理与运行逻辑。

    作者回复: amazing!

    2022-07-15
    6
    52
  • lesserror
    老师,有几个小问题: 1. etcd能取代redis的大部分功能吗? 2. 在 Kubernetes 里则只有一类人:DevOps。是不是意味着以后对开发或者运维人员都有更大的挑战,毕竟Kubernetes的也很很庞杂的知识要去学习。 3. 状态信息中的“AGE”代表启动时长吗? 4. DNS插件在执行命令:minikube addons list 输出的列表中没看到。是不是说这个插件已经集成到k8s中了,不需要单独安装。

    作者回复: 1.不能,etcd是分布式的,性能自然没有Redis好,用途不同。 2.是的,不过也可以找准方向,没有必要什么都学,和Linux开发一样,先有个基础。 3.是的,和http里的age差不多 4.对。dns已经是必备插件了,不用单独安装。

    2022-07-25
    12
  • hiDaLao
    执行minikube dashboard无法在本机自动用浏览器打开dashboard页面,网上搜到的解决办法:执行 kubectl proxy --port=8888 --address='虚拟机ip' --accept-hosts='^.*' & 然后在本机打开http://虚拟机ip:8888/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/workloads?namespace=default

    作者回复: 这个办法是可行的,但按理来说minikube会直接启动浏览器的,不需要这么麻烦,可以再找找原因。

    2022-07-21
    5
    8
  • peter
    请教老师几个问题: Q1:Mater的四个组件运行在一台主机上吗? 一个mater包括四个组件,这四个组件是运行在同一台主机上吗?即“一个Mater对应一个主机”。或者是另外一种理解:mater是个逻辑概念,可以对应一台主机,也可以对应多台主机,比如两个组件运行在一台主机,另外两个组件运行在另外一台主机,两台主机合起来才是mater。哪一种理解对? Q2:Pod与docker容器是什么关系? 一个pod就对应一个docker容器吗? 比如创建一个nginx容器,那么此容器就对应一个pod。 Q3:Pod是集中存储在master上,由master分发到各个node运行吗? Q4:启动k8s后台管理系统后,”node list”查询出的IP是固定的吗? 09课文章中,用“minikube node list”查询出来的结果中,IP是“192.168.49.2”。在我的笔记本上,查出来的也是“192.168.49.2”。 请问,这个IP是固定的吗? Q5:09课中,启动nginx后怎么验证启动成功? 09课的最后,用“kubectl run ngx --image=nginx:alpine”这个命令启动了nginx,此命令中没有指定端口映射。 请问,怎么验证启动成功? Localhost:80 吗?

    作者回复: 1.如果有多台master节点,那就构成了一个master集群,这些组件就可以在多个节点里随意运行,它们都是独立的服务,用api接口通信,不必限制在同一台主机上。 2.后面会再专门讲Pod概念。 3.master负责调度管理,Pod运行在Node上,不是存储的意思,master下发命令给kubelet,kubelet在node上启动Pod。 4.这个跟网络有关,只能说是凑巧一样。 5.用kubectl get pod,后面会再讲pod的详细操作。

    2022-07-13
    3
    8
  • dao
    课后思考: 1. kubernetes 算得上是一种操作系统,正如它定位的就是 cloud native 一样。它与传统意义上的操作系统不同的是管理、调度的都是虚拟化/池化的资源,与硬件之间隔了一层宿主操作系统(传统 OS)。 2. 哈哈,我觉得这里面的组件没有一个是多余的——都重要。没有 etcd 就没有持久化信息/配置;没有 apiserver 整个集群就失联、失控;没有 kubelet 该节点就失联了;没有节点里的 container runtime 就没有 Pod,也就是没有任何应用服务;没有 kube-proxy,节点的服务就是孤岛;没有 controller manager 就无法管理节点及 Pod ,也就无法对外提供应用服务;没有 scheduler 集群就处于失衡状态。这里 apiserver 、 kubelet 、 kube-proxy 充当不同的桥接作用。

    作者回复: awesome

    2022-07-16
    2
    6
  • 李一
    问一个小白问题,看架构图 ETCD是在Master节点上的,由于ETCD记录了节点信息、ConfigMap、Secret数据,如果Master 节点宕机或数据损坏,K8S 如何保证数据完整性?

    作者回复: 生产环境会有多个master节点,etcd会部署成高可用。

    2022-07-22
    2
    5
  • 自由
    2.2.3 Kube-proxy 负责本地集群网络,保障 Pod 间的网络路由与负载均衡

    作者回复: great

    2022-07-15
    2
    5
  • 笨蛋小孩
    老师,是不是minikube的作用就是提供了以上的基础组件?

    作者回复: 它是基于docker,用镜像启动了Kubernetes。

    2022-07-13
    5
  • 三溪
    罗老师画思维导图是真的强

    作者回复: thanks

    2022-07-26
    4
  • 朱雯
    1. 什么是操作系统?根据我所学到知识,操作系统是帮助人管理硬件的,具体来说就是管理内存,cpu,硬盘这些内容。文件是硬盘的抽象,内存是内存条的抽象,进程是运行程序的抽象。总的来说,操作系统就是硬件再软件层面如何被抽象和管理的工具。从这个角度来看,k8s不算操作系统,因为k8s并不直接控制硬件,而是控制更高级别的抽象软件。但从结果上来看,k8s可以管理,并且主要是为这个产生的,所以又算是操作系统。与传统的操作系统区别在于,传统操作系统管理可以更多是单机管理,无法跨机器跨集群管理,但k8s可以,因为k8s天然在云上。 2. 对于一个操作系统来说,管理的重点在于,网络,计算和存储,网络方面会使用到kube-proxy和apiserver,计算方面有contonller-manager,scheduler,apiserver和kubelet,存储方面主要是etcd,我觉得都挺重要,缺少一环都无法成就操作系统的管理了,但硬要说最重要,可能还是etcd,毕竟其他的一关机就没了,但存储还在。

    作者回复: great

    2022-07-13
    3
收起评论
显示
设置
留言
36
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部