k8s的整体架构及其内部工作原理,以及创建一个pod的原理

一、k8s整体架构

二、k8s的作用,为什么要用k8s,以及服务器的发展历程

1、服务器:缺点容易浪费资源,且每个服务器都要装系统,且扩展迁移成本高
2、虚拟机很好地解决了服务器浪费资源的缺点,且部署快,成本低但每台虚拟机需要安装系统,从而对内存等资源造成了一定的浪费

3、容器恰好解决了虚拟机装系统浪费资源的缺点,也能很好地实现隔离,且一台机器上可以部署好多容器,但当机器出现宕机时,一台机器上的所有容器都会停止运行,不能自我修复

因此需要一个资源管理,资源编排的工具即k8s应用而生

三、k8s基本概念

1、pod

Pod本身是豌豆荚,为k8s的最小调度单元,里面会包含一个或多个容器(Container),Pod内的容器共享存储及网络,可通过localhost通信。

2、Deployment


pod 上层的一个抽象,它可以定义一组 Pod 的副本数目、以及这个 Pod 的版本。一般用 Deployment 来做应用的真正的管理,而 Pod 是组成 Deployment 最小的单元

  • 定义一组Pod的副本数量,版本等;
  • 通过控制器维护Pod的数目;
  • 自动恢复失败的Pod;
  • 通过控制器以指定的策略控制版本

3、Service


Pod是不稳定的,IP会发生变化,因此需要一层抽象来屏蔽这种变化,Service可以实现,其主要功能为:

  • 提供访问一个或者多个Pod实例稳定的访问地址;
  • 支持多种访问方式ClusterIP(对集群内部访问)NodePort(对集群外部访问)LoadBalancer(集群外部负载均衡)。

4、Volume


Volume表示存储卷,Pod访问文件系统的抽象层,具体的后端存储可以是本地存储、NFS网络存储、云存储以及分布式存储等。

  • 声明在Pod中容器可以访问的文件系统;
  • 可以被挂载在Pod中一个或多个容器的指定路径下;
  • 支持多种后端储存

5、NameSpace


用以资源的逻辑隔离,上述小节均属于资源,不同ns下可以同名,相同ns下需唯一。

  • 一个集群内部的逻辑隔离机制(鉴权、资源等);
  • 每个资源都属于一个Namespace;
  • 同一个Namespace中资源命名唯一;
  • 不同Namespace中资源可重名;

6、Master组件

kube-apiserver:Kubernetes API,集群统一入口,各组件协调者,以RESTful API提供接口服务,所有对象的资源的增删改查和监听操作都交给APIServer处理后在提交给Etcd存储。

1)提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更);
2)提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd);
3)是资源配额控制的入口;

controller-manager:是 Kubernetes 的大脑,它通过 apiserver 监控整个集群的状态,并确保集群处于预期的工作状态。

scheduler:scheduler 负责分配调度 Pod 到集群内的节点上,它监听 kube-apiserver,查询还未分配 Node 的 Pod,然后根据调度策略为这些 Pod 分配节点(更新 Pod 的 NodeName 字段)

工作原理:

kube-scheduler 调度分为两个阶段,predicate 和 priority
1)predicate:过滤不符合条件的节点
2)priority:优先级排序,选择优先级最高的节点

etcd:Etcd 是 CoreOS 基于 Raft 开发的分布式 key-value 存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)。etcd作为一个受到ZooKeeper与doozer启发而催生的项目,除了拥有与之类似的功能外,更专注于以下四点:

1)简单:基于HTTP+JSON的API让你用curl就可以轻松使用。

2)安全:可选SSL客户认证机制。

3)快速:每个实例每秒支持一千次写操作。

4)可信:使用Raft算法充分实现了分布式。

主要功能:

1)基本的 key-value 存储
2)监听机制
3)key 的过期及续约机制,用于监控和服务发现
4)原子性操作(CAS 和 CAD),用于分布式锁和 leader 选举

7、Node组件

kubelet:kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载Secret、获取容器节点状态工作。kubelet将每个Pod转换成一组容器。

每个节点上都运行一个 kubelet 服务进程,默认监听 10250 端口,接收并执行 master 发来的指令,管理 Pod 及 Pod 中的容器。每个 kubelet 进程会在 API Server 上注册节点自身信息,定期向 master 节点汇报节点的资源使用情况,并通过 cAdvisor 监控节点和容器的资源。

kube-proxy:在node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。

每台机器上都运行一个 kube-proxy 服务,它监听 API server 中 service 和 endpoint 的变化情况,并通过 iptables 等来为服务配置负载均衡(仅支持 TCP 和 UDP)。

kube-proxy 可以直接运行在物理机上,也可以以 static pod 或者 daemonset 的方式运行。

docker或rocket:容器引擎,运行容器。

8、K8S创建一个Pod的流程

1、用户通过kubectl向api-server发起创建pod请求。

2、apiserver通过对应的kubeconfig进行认证,认证通过后将yaml中的po信息存到etcd。

3、Controller-Manager通过apiserver的watch接口发现了pod信息的更新,执行该资源所依赖的拓扑结构整合,整合后将对应的信息交给apiserver,apiserver写到etcd,此时pod已经可以被调度。4、Scheduler同样通过apiserver的watch接口更新到pod可以被调度,通过算法给pod分配节点,并将pod和对应节点绑定的信息交给apiserver,apiserver写到etcd,然后将pod交给kubelet。

5、kubelet收到pod后,调用CNI接口给pod创建pod网络,调用CRI接口去启动容器,调用CSI进行存储卷的挂载。

6、网络,容器,存储创建完成后pod创建完成,等业务进程启动后,pod运行成功。

流程图如下:

  • 36
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Kubernetes中,Pod是一个逻辑概念,它是通过声明式定义的一个YAML文件来创建的。最终,Pod会被调度到Kubernetes节点上的kubelet服务调用Linux操作系统的namespace、cgroup、docker等底层原理来实现。\[1\] Pod是Kubernetes中最小的可调度和管理的单位,它可以包含一个或多个容器Pod中的容器共享相同的网络命名空间、存储卷和IP地址,它们可以通过localhost进行通信。Pod还提供了一种共享资源的机制,使得容器之间可以共享文件和环境变量。 Pod的创建原理是通过Kubernetes的调度器将Pod调度到可用的节点上。调度器会根据节点的资源情况、调度策略和Pod的需求来选择最合适的节点。一旦Pod被调度到节点上,kubelet服务会负责创建和管理Pod中的容器。 总结来说,Kubernetes中的Pod是通过声明式定义的YAML文件创建的,它通过调度器将Pod调度到节点上,并由kubelet服务负责创建和管理Pod中的容器。\[1\]\[2\] #### 引用[.reference_title] - *1* [kubernetes中Pod网络的创建原理](https://blog.csdn.net/buppt/article/details/123288339)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [2、k8s pod原理详解](https://blog.csdn.net/scjava/article/details/123292545)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [k8s篇-理解POD本质(实现原理与设计模式)](https://blog.csdn.net/qq_19676401/article/details/119996434)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值