k8s之工作机制

news2024/9/27 15:30:41

写在前面

本文一起看下k8s基本架构。

1:Kubernetes的基本架构

k8s本身也是一种分布式架构,也需要在多台机器(实体机或虚拟机无差别)部署,部署的机器我们叫做节点,其中节点分为Master node即主节点,worker node即工作节点,master node是k8s的大脑,worker node主要部署k8s的其他组件,以及执行业务功能的pod,如下图:

在这里插入图片描述

可以看到上图有一个Master Node和2个worker node,我们在k8s之搭建单机集群 文章中准备的单机环境中查看node信息如下:

dongyunqi@dongyunqi-virtual-machine:~$ kubectl get node
NAME       STATUS   ROLES                  AGE   VERSION
minikube   Ready    control-plane,master   22h   v1.23.3

可以看到只有一个节点,并且其角色是master,也就是我们说到的master node,并没有worker node,这是因为我们只有一台机器,此时master node也承担了worker node的功能,所以此节点既是master node也是worker node,但首先是master node。实际上这种架构方式就是典型的控制面/数据面(Control Plane/Data Plane)架构,集群里的计算机被称为“节点”(Node),可以是实机也可以是虚机,少量的节点用作控制面来执行集群的管理维护工作,其他的大部分节点都被划归数据面,用来跑业务应用。在k8s架构里控制面就是master node,数据面就是worker node。

1.1:master node的核心组件

master node核心组件如下图:

在这里插入图片描述

功能如下:

api server:k8s集群对外的唯一入口,暴露了一组restful api,不管是kubectl还是worker node想要和master node通信都必须通过api server
etcd:注册中心,集群信息存储于此,只有api server能够访问
kube scheduler:负责容器编排,根据各个worker node的资源情况分配pod,相当于是部署人员
controller manager:负责系统状态的监控,故障转移,动态伸缩等功能,相当于是系统运维人员

这四个组件都是必须有的,不然k8s集群将无法正常启动,另外这4个组件都以容器的形式来运行,如下图:

在这里插入图片描述

-n kube-system 参数,表示检查“kube-system”名字空间里的Pod,什么是命名空间我也还不知道。

既然运行的是容器,我们自然也是可以通过docker ps来看下的,不过注意不是在我们的宿主机,而是在k8s虚拟出来的机器里,所以我们需要先通过minikube ssh连接到虚机,如下:

dongyunqi@dongyunqi-virtual-machine:~$ minikube ssh
Last login: Wed Jan  4 03:05:54 2023 from 192.168.49.1
docker@minikube:~$ 

然后就可以通过docker ps查看四个组件对应的容器了:

# 以下是在k8s的虚拟机里操作
docker@minikube:~$ docker ps | egrep "etcd"
4e5413c6c68d   25f8c7f3da61                   "etcd --advertise-cl…"   23 hours ago   Up 23 hours             k8s_etcd_etcd-minikube_kube-system_9d3d310935e5fabe942511eec3e2cd0c_0
...
docker@minikube:~$ docker ps | egrep "controller"
0a5fd910b564   b07520cd7ab7                   "kube-controller-man…"   23 hours ago   Up 23 hours             k8s_kube-controller-manager_kube-controller-manager-minikube_kube-system_b965983ec05322d0973594a01d5e8245_0
...
docker@minikube:~$ docker ps | egrep "scheduler"
83eecf84c9b4   99a3486be4f2                   "kube-scheduler --au…"   23 hours ago   Up 23 hours             k8s_kube-scheduler_kube-scheduler-minikube_kube-system_be132fe5c6572cb34d93f5e05ce2a540_0
docker@minikube:~$ docker ps | egrep "apiserver"
0119a15c6fa2   f40be0088a83                   "kube-apiserver --ad…"   23 hours ago   Up 23 hours             k8s_kube-apiserver_kube-apiserver-minikube_kube-system_cd6e47233d36a9715b0ab9632f871843_0
...

1.2:worker node的核心组件

worker node核心组件如下图:

在这里插入图片描述
功能如下:

kubelet:负责上报节点状态到master node 的apiserver,以及接收来自master node的apiserver的各种指令
kube proxy:代理pod收发数据包
container runtime:就是实际使用镜像以及创建容器的“劳动者”,是”伟大的底层劳动人民“

container runtime使用的容器技术并不一定非得是docker,只要是符合容器标准的都可以在此使用,如containerd、CRI-O等,这点需要清楚。

接下来我们看下各个组件的部署情况,对于container runtime就是我们的业务镜像运行的容器,是与业务相关的,如下我们运行的NGINX容器就是其中可能的一个:

docker@minikube:~$ docker ps | grep nginx 
69a398fd5dd0   nginx                          "/docker-entrypoint.…"   22 hours ago   Up 22 hours             k8s_ngx_ngx_default_e8b78e57-cea0-4ef1-9616-249680d39368_0

主要看下kubeletkube proxy

docker@minikube:~$ docker ps | grep kube-proxy
\5340eab00da5   9b7cc9982109                   "/usr/local/bin/kube…"   23 hours ago   Up 23 hours             k8s_kube-proxy_kube-proxy-4pqb8_kube-system_b0e109a8-4e48-440d-b85f-8793fa9b1bf5_0
docker@minikube:~$ docker ps | grep kubelet   
docker@minikube:~$ 

很奇怪的是,kubelet并没有对应的运行中的容器,这是因为kubelet并没有以容器的形式运行(容器运行不方便管理pod),而是以独立进程方式运行,所以我们需要使用ps命令来查看,如下:

docker@minikube:~$ ps -ef | grep kubelet
...
root        1721       1  1 Jan03 ?        00:24:26 /var/lib/minikube/binaries/v1.23.3/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --config=/var/lib/kubelet/config.yaml --container-runtime=docker --hostname-override=minikube --kubeconfig=/etc/kubernetes/kubelet.conf --node-ip=192.168.49.2
...

1.3:核心组件基本工作流程

1:worker node的kubelet上报node状态到apiserver,apiserver将数据状态存储到etcd
2:controller manager从apiserver获取各个worker node的状态,进行监控,故障转移,动态伸缩等操作
3:kube proxy代理外部访问,使得容器能够对外提供服务
4:scheduler从apiserver获取节点状态,调度pod,通过apiserver下发指令给worker node,kubelet调用container runtime启动容器

1.4:插件

k8s还提供了插件(addons)的功能,不同于组件出现问题或者是缺失时k8s集群将无法正常启动,插件并非必不可少,插件的作用是在k8s集群能用的基础上,使之变得更好用,如下可以查看支持的插件列表:

在这里插入图片描述

其中比较常用的有DNS和dashboard,其中DNS允许通过域名的方式来访问服务,这是负载均衡和服务发现的基础,dashboard可以认为kubectl的界面版,可通过UI来管理k8s集群,有时候看信息更加直观,通过minikube dashboard就可以启动,界面如下:

在这里插入图片描述

写在后面

小结

本文我们一起学习了k8s的工作机制,其中节点类型分为master node和worker node,master node的组件包括apiserver,etcd,scheduler,controller manager,worker node的组件包括kubelet,kube-proxy,container runtime,并了解了插件相关的内容。详细如下图:

在这里插入图片描述

多知道一点

devops

devops是相对于常规的开发流程来说的,常规的开发流程是开发人员进行开发,我们可以叫做是dev,而运维人员部署运维的过程我们可以叫做ops,而对于基于k8s的开发就没有这么明显的划分了,开发和运维可以是一拨人,所以就叫做是devops,该词的中文意思也正是开发运维,即是开发,也是运维。所以devops的意思就是基于k8s进行开发部署运维的模式。

参考文章列表

k8s之搭建单机集群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/139884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java使用反射给对象属性赋值

📢📢📢📣📣📣哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝一位上进心十足的【Java ToB端大厂领…

高频js手写题之实现数组扁平化、深拷贝、总线模式

前言 古人学问无遗力,少壮工夫老始成。纸上得来终觉浅,绝知此事要躬行。看懂一道算法题很快,但我们必须将这道题的思路理清、手写出来。 三道js手写题的思路和代码实现 数组扁平化 演示效果 将[1, [1, 2], [1, [2]]] 变成 [1, 1, 2, 1, 2] 第一种&…

抽象类与抽象方法

文章目录一、abstract关键字使用修饰类:抽象类修饰方法:抽象方法注意点抽象类的匿名子类一、abstract关键字使用 abstract:抽象的 可以修饰:类、方法 修饰类:抽象类 1、此类不可进行实例化 2、抽象类中一定有构造器…

报错 cannot import name ‘int‘ from ‘numpy‘

报错详情: 原因是因为np.int在numpy1.20已经被废弃掉了,可以通过 pip show numpy在命令行里查看。 现在使用的是np.int_ 或者 np.int32 或者 np.int64 猜测原因 但这个报错是在我自己的site-packages里的numpy的报错,我怀疑可能是numpy本身…

【linux】crontab

文章目录crontab简介crontab安装语法实例脚本无法执行问题常用的命令展示crontab的注意事项来源crontab简介 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中&a…

linux系统中CAN驱动的通信方法与原理

大家好,今天主要和大家分享一下,如何使用linux系统下的CAN驱动实验。 目录 第一:CAN通信基本简介 第二:CAN通信的主要特点 第三:CAN通信协议 第四:程序代码的具体实现 第五:使能Linux内核自…

MATLAB-ezplot绘图函数

ezplot 函数与fplot 函数类似,该函数可以绘制显函数图形、隐函数图形和参数方程图形。ezplot函数的调用格式如下。 ezplot(f) ezplot(f, [ min , max ]) ezplot(f.[ xmin , xmax , ymin , ymax]) ezplot(x,y) ezplot(x,y , [tmin , tmax]) ezplot(.. . ,f…

jvm内存管理

参考链接 参考链接 Garbage Collection Concepts garbage collector的作用包括: 分配内存确定活着的对象不被清理回收死了的对象占用的内存 寻找和释放垃圾占用的内存空间的过程称为garbage collection一般情况下,整个堆或堆的一部分被填满时或者达到…

C++11 多线程

线程(thread)是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运作单位,一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发多个线程,每条线程执行不同的任务。…

FreeRTOS教程——定时器(二)

Free RTOS定时器 一、概念 一、概论 软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器 调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期, 简而言之,当定时…

switch分支结构

一. 简介switch结合case,能够判断一个变量或表达式与一系列值中的某个值是否相等,这里的每个值都被称为一个分支。switch语句在执行时,会先进行值的匹配,匹配成功时会进入到对应case语句。再根据是否有 break语句,判断…

手把手教你正确地创建并配置一个SpringBoot项目

文章目录1. 安装Spring Boot Helper插件2. 创建SpringBoot项目3. 配置SpringBoot项目4. 选择修改配置(选做)4.1 修改端口号4.2 其他自定义配置5. SpringBoot热部署本文主要是针对IDEA社区版用户的,如果你是专业版的用户,那么是可以…

RHCE第三天之ssh远程连接服务

文章目录一、连接加密技术简介二、SSH的工作过程三、 SSH远程连接服务配置四、SSH实验SSH(Secure Shell Protocol,安全的壳程序协议: 它可以通过数据包加密技术将等待传输的数据包加密后再传输到网络上。ssh协议本身提供两个服务器功能&#…

爬虫学习-验证码识别

反爬机制:验证码,识别验证码图片中的数据,用于模拟登陆识别验证码的操作人工肉眼识别(不推荐)第三方自动识别(推荐)python第三方库:tesseract、ddddocr(7条消息) 小白都能轻松掌握,python最稳定的图片识别库…

探索用于NLP的Gensim库

Gensim的名字源自于"Generate Similar," 这个词是指Gensim可以用于生成类似的文本。这个词也可以被解释为"Generative Similarity," 表示Gensim可以用于生成相似的文本。Gensim是一个用于文本处理的库,可以用于计算文本之间的相似度,以及生成类似的文本。…

实验四:ESP8266WIFI通讯实验

本实验开发板基于:GD32F103我们首先需要看一下原理图 根据原理图可以看到,ESP8266是通过PA2 PA3这个串口进行通讯,PA13是控制它的复位,从芯片手册中可以看到PA2PA3是串口1,PA2是串口1的发送,PA3是串口1的接…

时间序列分析之ARIMA预测

预备知识 时间序列分析原理 时间序列分析之auto_arima自动调参 一、定义 ARIMA模型(Autoregressive Integrated Moving Average model),差分整合移动平均自回归模型,又称整合移动平均自回归模型,时间序列预测分析方法之一。 ARIMA(p,d,q){A…

Go语言设计与实现 -- Channel

稍微需要注意一点的用法 类型断言 type dog struct {Name stringColor string }func main() {allChan : make(chan any, 10)allChan <- dog{Name: "lxy", Color: "yellow"}// 如果你这么写代码的话&#xff0c;你虽然拿到了一条狗&#xff0c;但是你…

Map遍历方法及效率

在大学的时候记得学过通过迭代器进行Map的遍历&#xff0c;但是从参加工作后&#xff0c;基本都是通过for循环遍历&#xff0c;没用过迭代器&#xff0c;于是去了解了Map的几种遍历方法并通过运行测试各自的速度。 注意&#xff1a;这里只讲通过遍历同时能过获取key和value的遍…

Imaging组件格式转换,Imaging图像转换

Imaging组件格式转换,Imaging图像转换 Imaging是一个.NET组件&#xff0c;它提供了一种加载、编辑和保存图片的简单方法。图像处理允许文件格式转换和图像转换(调整大小、裁剪或旋转以及翻转)。 使用GemBox.Imageing&#xff0c;您将获得一个快速可靠的组件&#xff0c;它易于使…