文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一篇文章学会什么是Kubernetes

2024-12-01 17:45

关注

为什么谷歌要推出Kubernetes开源版本呢?我个人的理解是:

Kubernetes具有以下特点:

使用 Kubernetes, 您可以快速高效地响应客户需求:

Kubernetes是一个声明式系统,声明式系统和命令式系统​是有本质的区别。所谓声明式系统​关注点是做什么,即告诉你将要达成什么样的期望,至于怎么达到是你系统的事情。而命令式系统则是必须按照相应的规定或者步骤达到某个目标或者完成某个任务,其关注点是在怎么做。

命令式强调的是How,它需要你通过step-by-step的方式告诉计算机如何完成一个任务,在这种场景下,计算机是不具备“智能”,智能很机械的完成任务,至于完成的结果如何,需要看编程者的水平了。

而声明式强调的是What,你只需要告诉计算机你想要什么,然后由计算机自己去执行,这时候的计算机是具备一定的“智能”。当然,声明式不一定会满足你所有的需要。

在日常工作中,命令式编程比较普遍,这种编程实现比较方便,只需要按照一定的步骤开发即可,但是在一些特定的场合,声明式要比命令式方便,其实大多数声明式语言都是针对特定任务的领域专用语言,即DSL。

最常见的声明式语言就是SQL,只需要告诉计算机你想要的结果集,数据库就会帮你设计获取这个结果集的执行路径,并返回结果。

Kubernetes就是一个声明式系统,在使用Kubernetes的时候,用户不需要去定义A->B->C这种Workflow,而是直接去描述一个期望状态,然后Kubernetes就会帮助用户达到这个状态,至于如何达到这个状态,用户不需要关心。这种设计使得Kubernetes更加易用和健壮,也更具弹性和扩展性。

Kubernetes的架构

Kubernetes整体是Master-Slave架构,如下:

其中:

上面的架构是逻辑架构,在实际的生产运用中,为了达到高可用,会对架构做对应的调整,调整对象就是主节点,如下:

主要做了以下改变:

(1)将Master节点从单节点变成了多节点,在kube-apiserver前增加了load balancer用来负载,其他组件通信都是通过LB进行

(2)将etcd和master节点独立开,避免由于某个master节点故障导致ectd受影响

Kubernetes架构的设计原则是:

Kubernetes的重要组件

上面介绍了Kubernetes的整体架构以及简单介绍了各个组件的作用,但是它们之间的关系具体如何并没有做过多的介绍,我们现在来看看各个组件以及它们之间是怎么协作的。

(1)kubectl 客户端首先将CLI命令转化为RESTful的API调用,然后发送到kube-apiserver。

(2)kube-apiserver 在认证、授权、准入验证过后,将任务元信息并存储到etcd,然后kube-scheduler会对任务进行调度,并将调度结果返回给kube-apiserver。

(3)一旦 kube-scheduler 返回一个适合调度的目标节点后,kube-apiserver 就把任务的节点信息存入etcd,并创建任务。

(4)此时目标节点中的 kubelet正监听apiserver,当监听到有新任务需要调度到本节点后,kubelet通过本地runtime创建任务容器,执行作业。

(5)接着kubelet将任务状态等信息返回给apiserver存储到etcd。

(6)kube-proxy也会监听apiserver,如果有网络策略相关的操作,就会在本机上创建对应的iptables或者ipvs规则。

(7)这样我们的任务已经在运行了,此时control-manager发挥作用保证任务一直是我们期望的状态。

其主要组件如下:

Etcd

Etcd 是兼具一致性和高可用性的键值存储,可用于服务发现、共享配置以及一致性保障,在Kubernetes中,Etcd是作为唯一的存储,保存Kubernetes的所有API对象。

在生产级Kubernetes中etcd通常会以集群的方式存在,安全原因,它只能从 API 服务器访问。

API Server

API Server是Kubernetes最重要的核心组件之一,主要提供以下功能:

Controller Manager

Kubernetes在后台运行许多不同的控制器进程,当服务配置发生更改时(例如,替换运行 pod 的镜像,或更改配置 yaml 文件中的参数),控制器会发现更改并开始朝着新的期望状态工作。

从逻辑上讲,每个控制器都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。控制器包括:

下面就是Deployment Controller和ReplicaSet Controller两个控制器的工作流程。

Scheduler

kube-scheduler 负责监视新创建、未指定运行Node的 Pods,决策出一个让pod运行的节点。例如,如果应用程序需要 1GB 内存和 2 个 CPU 内核,那么该应用程序的 pod 将被安排在至少具有这些资源的节点上。每次需要调度 pod 时,调度程序都会运行。调度程序必须知道可用的总资源以及分配给每个节点上现有工作负载的资源。调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。

调度总共分为三个阶段:

Kubelet

Kubelet是每个节点上的核心组件之一,负责管理节点的资源对象。

Pod清单可以来自本地文件目录、给定的Http Server、API Server等

Kubelet将Container Runtime、Network、Stroage抽象成CRI、CNI、CSI

Kube-proxy

kube-proxy 是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。用于处理单个主机子网划分并向外部世界公开服务。它跨集群中的各种隔离网络将请求转发到正确的 pod/容器。kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。如果操作系统提供了数据包过滤层并可用的话,kube-proxy 会通过它来实现网络规则。否则, kube-proxy 仅转发流量本身。

其他组件

上面介绍的这些组件是集群的架子,光有架子还不够,还需要第三方的组件让其更强大:

来源:运维开发故事内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯