浅析kubernetes的工作原理

wintersoft wintersoft     2022-11-30     777

关键词:

转至 https://www.cnblogs.com/163yun/p/9518901.html

 

先放一张Kubernetes的架构图:

 

技术图片

 

 

 

整体来看,是一个老大,多个干活的这种结构,基本上所有的分布式系统都是这样,但是里面的组件名称就纷繁复杂,下面将一一解析。

 

 

 

1、元数据存储与集群维护

 

作为一个集群系统,总要有一个统一的地方维护整个集群以及任务的元数据。而且作为集群系统的控制节点,为了高可用性,往往存在多个Master,在多个Master中间,总要有一个Leader。

 

在Kubernetes里面,统一的存储使用etcd来保存,Leader的选举也是通过etcd进行,因而有apiserver有参数--etcd-servers,controller和scheduler都有参数--master string指向apiserver,并且有参数--leader-elect选举出Leader,也会有熟悉的--address ip。

 

 

 

2、API层与命令行

 

作为一个分布式系统,每一层都会有自己的API,但是对外往往需要一个统一的API接口层,一般除了酷酷的界面之外,为了自动化,往往会有一个命令行可以执行操作,其实命令里面封装的也是对API的调用。

 

对于Kubernetes,API层是一个单独的进程apiserver提供,认证和鉴权也是在这一层实现的,所有对于kubernetes的管理平台的访问都是通过apiserver这一层进行的。

 

对于命令行,kubernetes是kubectl,通过向apiserver调用执行操作,例如pod,service,deployment等。Kubernetes也有自己的类似package的管理,Kubernetes Helm,但是命令就变成了helm了。

 

 

 

3、调度

 

当运行一个容器的时候,放在哪台节点上,这个过程是调度。对于Kubernetes,调度是由一个单独的进程scheduler负责的。

 

Kubernetes也支持通过对Node设置Label,从而将pod放在某些节点上。另外kubernetes还有NodeAffinity:

 

  • RequiredDuringSchedulingRequiredDuringExecution:在调度的时候必须部署到某些节点,运行期如果条件不满足则重新调度

  • RequiredDuringSchedulingIgnoredDuringExecution :在调度的时候必须部署到某些节点,运行期就算了。

  • PreferredDuringSchedulingIgnoredDuringExecution :在调度的时候最好部署到某些节点,运行期就算了。

 

 

 

4、副本与弹性伸缩

 

容器如果部署无状态服务,一个好处就是可以多副本,并且可以弹性伸缩。

 

在Kubernetes里面,副本数目是以pod为单位的,由controller进程控制,可以通过创建一个Deployment来控制副本数。

 

Kubernetes也可以实现autoscaling。有一个组件Horizontal Pod Autoscaling,可以通过监控CPU的使用情况动态调整Pod的数量。

 

 

 

5、编排

 

为了能够通过编排文件一键创建整个应用,需要有编排功能。Kubernetes的编排是基于yml文件。

 

 

 

6、服务发现与DNS

 

容器平台的一个重要的功能是服务发现,也即当容器的地址改变的时候,可以自动进行服务之间的关联。

 

一般的服务发现首先要通过DNS将服务名和应用关联起来,可以基于DNS对一个服务的多个应用进行内部负载均衡,也有直接加一个内部负载均衡器来做这件事情。

 

Kubernetes的DNS组件是通过skyDNS实现的,负载均衡是通过将DNS转化为VIP,有个内置的负载均衡器kube-proxy来完成这件事情。

 

 

 

7、容器

 

Kubernetes支持Docker、RKT等多种容器格式。

 

 

 

8、网络

 

容器的网络配置有Docker Libnetwork Container Network Model(CNM)和Container Network Interface(CNI)两个阵营。Docker Libnetwork的优势就是原生,而且和Docker容器生命周期结合紧密;缺点也可以理解为是原生,被Docker“绑架”。Kubernetes属于CNI阵营,CNI的优势是兼容其他容器技术(e.g. rkt)及上层编排系统(Kuberneres & Mesos),而且社区活跃势头迅猛,缺点是非Docker原生。

 

 

 

9、存储

 

Kubernetes可以创建Persistent Volumes,支持GCE,AWS,NFS,GlusterFS,Ceph等。

 

 

 

10、监控

 

容器的监控中Prometheus +cadvisor是主流的方案,而cadvisor来自Kubernetes的一个组件。

 

 

 

11、大数据与包管理

 

在kubernetes里面部署大数据可以参考https://github.com/kubernetes/examples

 

 

 

12、负载均衡

 

这里的负载均衡指的是外部负载均衡。在kubernetes中,外部负载均衡器是通过一个ingress controller根据请求进行创建,如果在云平台例如GCE,可创建云平台的负载均衡器,云平台的负载均衡器可通过NodePort连接到后端的Service。

 

 

 

13、节点

 

kubernetes的Node上跑的是kubelet。

 

 

 

14、升级与回滚

 

所有的容器平台对于容器多副本的升级全部都是要滚动升级,在Kubernetes里面,同样有对rolling update的支持。

虚拟化技术浅析第二弹之初识kubernetes

 作者:京东物流杨建民一、微服务架构起源单体架构:可以理解为主要业务逻辑模块(我们编写的代码模块,不包括独立的中间件)运行在一个进程中的应用,最典型的是运行在一个Tomcat容器中,位于一个进程里。单体架构... 查看详情

redis学习总结(23)——redis如何实现故障自动恢复?浅析哨兵的工作原理

前言Redis是如何实现故障自动恢复的,它的实现正是要基于之前所讲的数据持久化和数据多副本而做的。Redis作为非常火热的内存数据库,其除了具有非常高的性能之外,还需要保证高可用,在故障发生时,尽可能地降低故障带... 查看详情

浅谈k8s:k8s部署架构以及工作原理(代码片段)

对于每个想落地kubernetes应用的工程师来说,熟悉kubernetes的架构和工作原理是必经之路,也是必须知道的知识,只有了解kubernetes的架构和工作原理才能更好的应用kubernetes。kubernetes架构Kubernetes最初源于谷歌内部的Borg,提供了面... 查看详情

sparkcoretaskscheduler源代码与任务提交原理浅析2

引言上一节《TaskScheduler源代码与任务提交原理浅析1》介绍了TaskScheduler的创建过程,在这一节中,我将承接《Stage生成和Stage源代码浅析》中的submitMissingTasks函数继续介绍task的创建和分发工作。DAGScheduler中的submitMissingTasks函数假... 查看详情

kubernetes01_部署方式的变迁为什么用kubernetes工作原理组件交互原理动画演示

文章目录①.部署方式的变迁②.为什么用Kubernetes③.Kubernetes概述及不是什么④.Kubernetes工作原理⑤.部署组件交互原理⑥.主、从节点原理分解⑦.Kubernetes架构-动画演示①.部署方式的变迁①.传统部署时代在物理服务器上运行应用程... 查看详情

云原生|kubernetes篇kubernetes原理与安装(代码片段)

...://bbs.csdn.net/forums/lansonhttps://bbs.csdn.net/forums/lanson文章目录Kubernetes原理与安装一、集群原理1、master-node架构2、工作原理3、原理分解二、组件交互原理三、安装1、理解2、执行Kubernetes原理与安装一、集群原理1、master-node架构master和... 查看详情

浅析countdownlatch闭锁底层实现原理

🍀CountDownLatch是基于AQS同步器的一种同步工具,它可以让一个或多个线程等待,一直等到其他线程完成一组工作,它是AQS共享模式的实现。它的使用方式如下:查看它的内部实现,它的设计模型和ReentrantLoc... 查看详情

浅析countdownlatch闭锁底层实现原理

🍀CountDownLatch是基于AQS同步器的一种同步工具,它可以让一个或多个线程等待,一直等到其他线程完成一组工作,它是AQS共享模式的实现。它的使用方式如下:查看它的内部实现,它的设计模型和ReentrantLoc... 查看详情

缓冲池工作原理浅析(代码片段)

Ⅰ、缓冲池介绍innodb存储引擎缓冲池(bufferpool),类似于oracle的sga,里面放着数据页、索引页、changebuffer、自适应哈希、锁(5.5之前)等内容综上所示:每次读写数据都是通过BufferPool当BufferPool中没有用户所需要的数据时才去硬盘中... 查看详情

tun/tap设备浅析(一)--原理浅析

参考技术ATUN设备是一种虚拟网络设备,通过此设备,程序可以方便地模拟网络行为。TUN模拟的是一个三层设备,也就是说,通过它可以处理来自网络层的数据,更通俗一点的说,通过它,我们可以处理IP数据包。先来看看物理设备... 查看详情

浅析java虚拟机结构与机制

本文旨在给所有希望了解JVM(JavaVirtualMachine)的同学一个概念性的入门,主要介绍了JVM的组成部分以及它们内部工作的机制和原理。当然本文只是一个简单的入门,不会涉及过多繁杂的参数和配置,感兴趣的同学可以做更深入的... 查看详情

docker与虚拟化技术浅析第一弹之docker与kubernetes

1前言Docker是一个开源的引擎,可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本电脑上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、baremetal、OpenStack集群和其他基础... 查看详情

kubeadm工作原理-kubeadminit原理分析-kubeadmjoin原理分析(代码片段)

...kubeadminit原理分析-kubeadmjoin原理分析。kubeadm是社区维护的Kubernetes集群一键部署利器,使用两条命令即可完成k8s集群中master节点以及node节点的部署,其底层原理是利用了k8sTLSbootstrap特性。kubeadm概述kubeadm是社区维护的Kubernetes集群... 查看详情

技术原理:mysql数据库事务浅析(代码片段)

在SQL编程中,事务编程已然成为必不可少的一个组成部分。本文将基于MySQL对数据库事务进行简单的介绍和分析。一、事务概述事务可以由一条非常简单的SQL语句组成,也可以由一组复杂的SQL语句组成。事务是访问并更新... 查看详情

浅析typescriptcompiler原理

等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。 查看详情

pm2源码浅析

PM2工作原理  最近在玩一个游戏,《地平线:黎明时分》,最终Boss是一名叫黑底斯的人,所谓为人,也许不对,黑底斯是一段强大的毁灭进程,破坏了盖娅主进程,从而引发的整个大陆机械兽劣化故事。为什么要讲这么... 查看详情

javascript自执行匿名函数(function(){})()的原理浅析

...章主要介绍了Javascript自执行匿名函数(function(){})()的原理浅析的相关资料,需要的朋友可以参考下函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途。匿名函数指没有指定函数名或指针的函数,自执行匿名函数... 查看详情

kubelet工作原理

在调度这一步完成后,Kubernetes就需要负责将这个调度成功的Pod,在宿主机上创建出来,并把它所定义的各个容器启动起来。这些,都是kubelet这个核心组件的主要功能。kubelet本身,也是按照“控制器”模式来工作的。它实... 查看详情