【k8s】Kubernetes技术和相关命令简介
一、 Kubernetes简介
Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。
在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
二、 Kubernetes功能模块
2.1 Kubernetes Pod
Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上。Pod中包含了一个或多个容器,还包括了存储、网络等各个容器共享的资源。Pod支持多种容器环境,Docker则是最流行的容器环境。Pod内的容器会一起启动、停止,每个Pod会有自己独立的内部动态IP,在Pod新建或重启时会重新分配新的IP。Pod会有自己的Label用来标示Pod的服务内容。Service会根据服务的Label来绑定Service与Pod之间的管理。Pod自身不具有高可用等特性,Pod一般不会直接使用,而是通过RC等方式进行调度使用。如图2-1所示的Pod1中有2个容器,其IP地址为10.10.10.1,Pod2中有3个容器,其IP地址为10.10.10.2,Pod3中有3个容器,其IP地址为10.10.10.3,Pod4中有4个容器,其IP地址为10.10.10.4。
图 2-1 Pod
2.2 Kubernetes Label
Label是Kubernetes系统中另外一个核心概念,一个Label是一个key=value的键值对,其中key与value由用户自己指定。Label可以附加到各种资源对象上,例如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去,Label通常在资源对象定义时确定,也可以在对象创建后动态添加或者删除。如图2-2所示的Pod1的Label=service1,Pod2的Label=service2,Pod3的Label=service2,Pod4的Label=service3。
图 2-2 Label
2.3 Kubernetes Service
Kubernetes中一个应用服务会有一个或多个实例(Pod),每个实例(Pod)的IP地址由网络插件动态随机分配。为屏蔽这些后端实例的动态变化和对多实例的负载均衡,引入了Service这个资源对象,Service与其后端Pod副本集群之间则是通过Label Selector来实现"无缝对接"。用户访问Pod的服务均需要通过Service进行。每个Service会分配一个独立的ClusterIP,并通过Selector的Label标示来选择相应的Pod。如果有多个相同Label的Pod,Service服务会自动在Pod之间Round-Robin。(负载均衡算法),ClusterIP随着Service的生命周期产生销毁,期间不会发生变化。如图2-3所示,Service1对应的pod为pod1,其Cluster IP地址为10.1.0.10,端口号为1000,Service2对应的pod为pod2和pod3,其Cluster IP地址为10.1.0.11,端口号为4321,Service3对应的pod为pod4,其Cluster IP地址为10.1.0.12,端口号为1234。
图 2-3 Service
2.4 Kubernetes RC
Kubernetes RC是Pod的复制、管理、监控工具,Pod自身不具有高可用的特性,而RC则提供了一系列的高可用特性。例如设定RC的replication数量为2,那么相同的Pod会被创建2次,例如Label=Service2的Pod,如果Pod2出现问题而失效(例如物理机器down),那么RC会发现replication的数量变成了1,则会自动的再创建一个Label=Service2的Pod,保证服务的可用性。RC是Kubernetes使用POD推荐的方法,即使只建立一个Pod,也要使用RC来创建,从而保证服务的可用性。如图2-4所示,label=service2的pod有两个副本。
图 2-4 Replication Controller
2.5 etcd
etcd是一个分布式的Key/Value存储系统,数据写入节点中后会自动的同步到其他的节点之上。etcd通过raft算法自主进行master选举,当master失效时,会自动重新选择新的master节点,从而保证etcd集群的高可用,如图2-5所示,当一个节点的数据更新时数据会同步到其他节点上
图 2-5 etcd
三、 Kubernetes组件及架构
一个K8S系统,通常称为一个K8S集群,这个集群主要包括两个部分:一个Master节点(主节点):负责管理和控制,一群Node节点(计算节点):工作负载节点,里面是具体的容器,如图3-1所示是一个典型的K8S架构。
图 3-1 K8S架构
3.1 Master节点
Master节点包括API Server、Scheduler、Controller manager、etcd等服务。Scheduler负责对集群内部的Pod进行调度,相当于“调度室”。Controller manager负责集群的管理,相当于“大总管”。API Server是整个系统的对外接口,供客户端和其它组件互相通信,相当于“营业厅”。etcd负责集群的数据同步,相当于存放数据的“仓库”,如图3-2所示就是一个Master节点及其所包含的服务。
图 3-2 Master节点
3.1.1 Controller manager
Controller Manager是各种controller的管理者,是集群内部的管理控制中心,Controller Manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
3.1.2 Scheduler
Scheduler只负责Pod调度,通过算法来计算pod和Node节点的对应关系。在整个系统中起“承上启下”作用,承上:负责接收Controller Manager创建的新的Pod,为其选择一个合适的Node,启下:Node上的kubelet接管Pod的生命周期。如图3-3所示,Pod1、Pod2和Pod3对应在Node1上,Pod3和Pod4对应在Node2上。
图 3-3 Scheduler
3.1.3 API Server
API server作为集群的核心,负责各个功能模块之间的通信。集群中各个模块通过API server将信息存入etcd,当需要获取和操作这些数据时,则通过API server提供的REST接口来实现,从而实现各模块之间的信息交互。集群内部各个模块之间通信的枢纽:所有模块之前并不会之间互相调用,而是通过和 API Server 打交道来完成自己那部分的工作,集群之间各个组件的通信关系如图3-4所示。
图 3-4 API Server
3.2 Node节点
Node是工作负载节点,上面承载着容器,Node节点包括Pod、kubelet、kube-proxy。Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。Kubelet主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。Kube-proxy:对Node提供网络代理和LB功能,配合Service提供网络服务。如图3-5所示为两个Node节点,Node1上面有Pod1、Pod2和Pod3,Node2上面有Pod4。
图 3-5 Node节点
3.2.1 Kubelet
kubelet 是运行在每个节点上的主要的“节点代理”,每个节点都会启动 kubelet进程,用来处理 Master 节点下发到本节点的任务,管理Pod 和其中的容器。其功能主要为:1)Pod管理,获取Pod的状态,运行的容器数量,种类,副本数量,网络配置等。2)容器监控:定时汇报当前节点的资源使用情况给API Server,让Master节点知道整个集群所有节点的资源情况,以供调度时使用。3)容器健康状态检查:如果容器运行出错,就要根据设置的重启策略进行处理。4)镜像和容器的清理工作:保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多资源。如下图所示,Node1和Node2上的Kubelet获取了Pod状态后,通过API Server将Pod状态告知Master节点。如图3-6所示为Kubelet服务。
图 3-6 Kubelet
3.2.2 Kube-proxy
kube-proxy的这个组件运行在每个node节点上。kube-proxy进程其实就是一个智能的软件负载均衡器,它会负责把对Service的请求转发到后端的某个Pod实例上并在内部实现服务的负载均衡与会话保持机制。它监听API server中service和endpoint的变化情况,并通过iptables等来为服务配置负载均衡,是让我们的服务在集群外可以被访问到的重要方式。Kube-proxy与service在集群中的工作原理如图3-7所示。
图3-7 Kube-proxy工作原理
四、 实验
根据上述所介绍的Kubernetes架构,我们直接通过在H3Cloud OS 3.0的实际环境来帮助我们更好的理解。
4.1 获取集群节点信息
首先,我们搭建好了Kubernetes的集群环境,输入命令检查H3Cloud OS系统运行状态,查看各节点状态信息,命令为“/opt/bin/kubectl –s 127.0.0.1:8888 get node”,如图4-1所示各节点都处于Ready状态。
图 4-1 节点状态信息
4.2 获取集群Pod信息
H3Cloud OS采用容器化架构,Pod的运行状态反应了提供服务的容器的状态,Pod状态运行正常即表示相关服务正常。使用root用户登录Master节点,执行以下命令查看服务组件所在节点,通过输入命令:“/opt/bin/kubectl –s 127.0.0.1:8888 get pode -o wide”可以看到如图4-2所示的Pod信息。NAME列显示了各个Pod的名称,READY列显示了Pod的运行个数和设定的副本数,1/1中的前一个1表示当前运行了一个Pod,后一个1表示此Pod的设定副本数为1,STATUS列显示了Pod的运行状态,可以观察到pod都是处于running状态的,AGE列显示了Pod的运行时间,可以看到大部分的Pod的运行时长都在20小时以上,IP列显示了Pod的IP地址,NODE列显示了该服务组件所在节点的IP地址。
图4-2 Pod信息
4.3 获取集群Docker信息
查看H3Cloud OS云平台使用容器进程的运行状态:输入命令docker ps ,如图4-3所示,输出显示的第一列为容器的UUID信息,第二列为容器使用的镜像名称,第三列为启动容器时运行的命令,第四列为容器的创建时间,显示格式为**时间之前创建,第五列为容器的运行状态,第六列为容器的端口信息和使用的连接类型(tcp\udp)名称,第七列为容器的名称。
图 4-3 Docker信息
通过使用命令:pod | grep glance可以只查看包含glance名称的容器实例,如图4-4所示。
图 4-4 包含glance名称的容器实例
进入Glance容器实例中,使用命令:kubectl exec –it <pod名称> bash;H3Cloud OS业务均有不同的容器提供,容器内服务状态异常会导致相关的功能异常。容器内执行命令:systemctl status <服务名称>,结果如图4-5所示。
图 4-5 容器服务状态
五、 总结
K8S是谷歌公司发明的容器集群的管理工具,它具有Pod,Label,Service,RC,etcd等高级功能。一个K8S集群通常是由一个Master节点和一群Node节点构成,Master节点主要负责管理和控制整个集群,其组件主要包括Controller manager:是集群内部的管理控制中心;Scheduler:负责Pod调度,通过算法来计算pod和Node节点的对应关系;API Server:集群内各个功能组件不能直接通信,需要通过API Server来实现通信。Node节点是工作负载节点,上面承载着容器,主要包括Pod: Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,里面是具体的容器;Kubelet:是运行在每个节点上的主要的“节点代理”,每个节点都会启动 kubelet进程,用来处理 Master 节点下发到本节点的任务;Kube-proxy:运行在每个node节点上,是让我们的服务在集群外可以被访问到的重要方式。在H3Cloud OS 3.0中也运用了k8s这一重要技术来管理容器,在进入到H3Cloud OS 3.0后台时可以通过相关命令查看容器的信息和运行状态。
相关文章:

【k8s】Kubernetes技术和相关命令简介
一、 Kubernetes简介 Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。kubernetes,简称K8s࿰…...

清晰光谱空间:全自动可调波长系统的高光谱成像优势
高光谱成像技术 高光谱成像技术是一种捕获和分析宽波长信息的技术,能够对材料和特征进行详细的光谱分析和识别。高光谱成像技术的实现通过高光谱相机,其工作原理是使用多个光学传感器或光学滤波器分离不同波长的光,并捕获每个波段的图像&…...

23.实战演练--个人主页
<?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"><applicationandroid:allowBackup"true"an…...

[剪藏] - 任泽平年终演讲精华:点燃希望——2024中国经济十大预测
任泽平年终演讲精华:点燃希望——2024中国经济十大预测 泽平宏观 2023-12-23 08:01 发表于上海 12月22日22:30,任泽平年终秀“点燃希望乐观者前行——2024中国经济十大预测”圆满收官。 泽平宏观、北京广播电视台、上海高净值研究院、北京时间等携手打…...

基于LabVIEW的压力传感器测试系统
摘要 现在各类压力传感器已广泛应用于各种工业自控环境,对压力传感器的研究 及应用,既可以体现一个国家的科技发展水平,又可以提升国家的综合国力,还 可以在丰富、方便和智能化人们的生活方面做出重要的贡献。而针对不同仪器组 成…...
Vue 如何使用WebSocket与服务器建立链接 持续保持通信
WebSocket 浏览器通过JavaScript向服务器发出建立WebSocket链接的请求,链接建立后,客户端和服务器端就可以通过TCP链接直接交互数据。WebSocket链接后可以通过send()方法来向服务器发送数据,并通过onnessage事件来接受服务器返回的数据。 创…...
自动驾驶模拟器
目录 Carla 自动驾驶模拟器 Udacity自动驾驶模拟器 Carla 自动驾驶模拟器 pip install carla 需要下载地图 Udacity自动驾驶模拟器...

Jmeter的文件参数化:CSV数据文件设置和_CSVRead函数
一、CSV数据文件设置 1、简介 CSV数据文件配置(CSV Data Set Config)可以将CSV文件中数据读入自定义变量中 Jmeter中CSV数据文件配置的界面如下图所示: 其中: (1)文件编码 文件的编码格式,与所…...

windows编译TensorFlowServing
概述 整个编译打包过程的总体思路,是参照在linux下的编译流程,配置环境,执行编译命令,根据编译器/链接器反馈的错误,修改相应的源码或者相关库文件的存放路径,编译出windows平台下静态库和二进制执行文件。…...
debian 12 安装 浏览器 Epiphany
Epiphany 什么epiphany-browser epiphany-browser 是: Epiphany 是一款简单而强大的 GNOME 网络浏览器,针对 非技术用户。它的原则是简单和标准 合规。 简单性是通过精心设计的用户界面和依赖来实现的 在用于执行外部任务(如阅读 电子邮件…...

Kafka-消费者-KafkaConsumer分析
与KafkaProducer不同的是,KafkaConsumer不是一个线程安全的类。 为了便于分析,我们认为下面介绍的所有操作都是在同一线程中完成的,所以不需要考虑锁的问题。 这种设计将实现多线程处理消息的逻辑转移到了调用KafkaConsumer的代码中&#x…...

Spring | Spring中的Bean--下
Spring中的Bean: 4.Bean的生命周期5.Bean的配装配式 ( 添加Bean到IOC容器的方式 依赖注入的方式 )5.1 基于XML的配置5.2 基于Annotation (注解) 的装配 (更常用)5.3 自动装配 4.Bean的生命周期 Spring容器可以管理 singleton作用域的Bean的生命周期,在此…...

本周五上海见 第二届证券基金行业先进计算技术大会暨2024低时延技术创新实践论坛(上海站)即将召开
低时延技术是证券基金期货领域业务系统的核心技术,是打造极速交易系统领先优势的关键,也是证券基金行业关注的前沿技术热点。 1月19日下午,第二届证券基金行业先进计算技术大会暨2024低时延技术创新实践论坛(上海站)即…...

怎么安装IK分词器
.安装IK分词器 1.在线安装ik插件(较慢) # 进入容器内部 docker exec -it elasticsearch /bin/bash # 在线下载并安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elastics…...

【踩坑】flask_uploads报错cannot import name ‘secure_filename‘
转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 背景说明 截至目前,用新版的flask实现文件上传(用到flask_uploads库),会出现这个问题。 问题原因 版本问题,新的werkzeug已经把secure_filename的位置改了。 解决方法 手动修改…...

AI编程可视化Java项目拆解第一弹,解析本地Java项目
之前分享过一篇使用 AI 可视化 Java 项目的文章,同步在 AI 破局星球、知乎、掘金等地方都分享了。 原文在这里AI 编程:可视化 Java 项目 有很多人感兴趣,我打算写一个系列文章拆解这个项目,大家多多点赞支持~ 今天分享的是第一…...

使用arcgis pro是类似的控件样式 WPF
1.资源加载 <controls:ProWindow.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><extensions:DesignOnlyResourceDictionary Source"pack://application:,,,/ArcGIS.Desktop.Framework;component\Themes\Default.xaml&quo…...
C语言所有字符串函数举例如何使用
strcpy: 将一个字符串复制到另一个字符串中 char source[] "Hello"; char destination[10]; strcpy(destination, source);strcat: 将一个字符串连接到另一个字符串的末尾 char str1[20] "Hello"; char str2[] "World"; strcat(str1, str2)…...

ArcGIS Pro 如何新建布局
你是否已经习惯了在ArcGIS中数据视图和布局视图之间来回切换,到了ArcGIS Pro中却找不到二者之间切换的按钮,即使新建布局后却发现地图怎么却是一片空白。 这一切的一切都是因为ArcGIS Pro的功能框架完全不同,这里为大家介绍一下在ArcGIS Pro…...
如何解决态势感知中的“时隐时现”问题
解决态势感知中的“时隐时现”问题有以下几个方法: 1、确保所有关键的监控设备和传感器正常运行,能够及时和准确地检测到各种异常情况。 2、引入先进的技术手段。例如使用人工智能和机器学习算法来识别和分析大量的数据,快速发现异常和威胁&a…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...