当前位置: 首页 > news >正文

Kubernetes入门学习

kubernetes技术架构模型

一、kubernetes的Label标签

        1.标签是以key=value的格式通过用户自定义指定,目的是将其加入到各种资源对象上来实现多维度的资源分组管理使其更方便的进行资源分配、调度、配置和部署管理工作。

        2.标签可以结合Label Selector(标签选择器)查询和筛选拥有某些标签的资源对象。

           label 和 label selector两者结合使被管理的对象能更精细的分组管理实现集群的高可用。

        3.label selector 的使用场景:

                kube-controller进程通过资源对象RC上定义的label selector 来筛选要监控的Pod副本的数量,使Pod的数量始终符合预期设定的全自动控制流程。

                kube-proxy进程通过Service的label selector来选择对应的pod,自动建立每个Service到对应Pod的请求转发路由表

二、Replication Controller(RC)

             1. RC主要是定义了一个期望的场景声明某种pod的副本数量在任意时刻都符合预期值

             2.  RC包括:

                  pod期待的副本数

                  用于筛选目标pod的label selector

                  用于创建新pod的template模板

              3.RC中的replicas表示期望pod的副本数

                  rc中动态缩放命令: kubectl scale rc  pod名称 --replicas=x (x表示期望的pod副本数)

                  可以通过这个命令修改rc的副本数来实现pod的动态缩放功能

                  注:删除rc不会影响rc已经创建好的pod,可以通过上述操作命令设置replicas=0来删除已经存在的rc

                    RC的应用场景:在做应用的平滑升级时,设置rc中期待的副本数为x,表示系统中发始终运行10个pod,每次终止一个旧的版本就会自动生成一个新的版本。

三、Deployment

                  1.引入deployment的目的是更好的解决pod的编排问题,其内部使用的是replica set来实现前面所说的RC(它和RC的区别在于它支持集合的方式去声明label selector)。

                  2.deployment相对于RC的的亮点在于它可以随时知道pod的部署进度。

                  3.depolyment的使用场景:

  •           创建deployment对象来生成对对应的replica set完成pod副本的创建造
  •           通过deployment的状态来查看部署动作是否完成
  •           更新depolument来创建新的pod(版本升级),如果不稳定可以回滚到上一个版               本 
  •           可以挂起或者恢复

                  4.通过kubectl create -f xxx-deployment.yaml可以创建deployment

                      通过 kubectl get deployment 来查看已创建的deployment的信息

四、Horizontal Pod Autoscaler(HPA)

                 1.HPA的提出需求:因为google对于kubernetes的定位是自动化和智能化,即当前的分布式系统可以根据当前系统中不同主机的负载情况然后自动触发水平扩展或缩容行为,而目前的手动控制的方式明显不符合kubernetes的设计理念,所以HPA应运而生。

                 2.HPA的实现原理:通过追踪RC控制的所有pod的负载情况来确定是否要针对性的调整期望的pod数量。

                    依据pod的实现原理可以知道hpa的实现首先需要衡量pod的负载情况的指标

               第一种是 CPUUtilizationPercentage

                               

                        CPUUtil是一个算术平均值(目标POD所有副本自身CPU1分钟内利用率的平均值),如果超过了80%则意味当前的副本数目不足以支撑更多的请求需要进行动态扩容,当高峰期过去后pod的利用率降下来则pod的副本数自动减少到一个适当的值。

                        当前这个参数值需要通过Heapster扩展组件来获取这个值

               第二种是应用程序自定义的度量指标,如服务在每秒内的请求数

                        上图示例中该参考值超过90%会触发自动动态扩容行为

                 3.kubectl autoscale deployment xxx --cpu-percent=90 --min=1  --max=10,该命令可以创建上述图片的等价效果。

四、Service(微服务)

           

上图为service的工作位置

        1.kubernetes中多个pod组成的集群被客户端访问过程:客户端通过负载均衡器(kube-proxy)将service接收到的请求转发到后端的某个pod实例并在内部实现服务的负载均衡和会话保持机制。

         2.kubernetes的服务发现

            机制:kubernetes中的Service都有唯一的cluster IP 和唯一的名字,名字由自己定义(固定在配置中)

              通过Service的名字找到cluster ip (通过 add-on增值包引入dns系统,将服务名作为dns域名),直接使用服务名来建立通信连接。

          3.外部系统访问service的问题

                node ip : node节点的ip地址(集群中每个节点的物理网卡的ip地址,真实存在的物理网络)

                pod ip :pod的ip地址(docker engine 根据docker 0网桥的ip地址段进行分配)

                cluster ip:service 的ip 地址(虚拟ip,需要结合service port组成具体的通信端口,集群外的节点不能直接访问)

                 通过nodePort实现从外部访问集群内部:

              上述通过nodeport的方法是在kubernetes集群里每个node上为需要外部访问的service开启一个对应的tcp监听端口。

                可以通过设置一个负载均衡器对上述通信方式进行优化,主要是通过访问设置的负载均衡的ip地址来对访问的流量进行调度,实现集群内部的负载均衡。

五、Volume(存储卷)

              1.Volume是pod中可以被多个容器访问的共享目录,其生命周期和pod的生命周期相同但与容器的生命周期不相关,即容器终止或者重启时其卷中的数据不会丢失

上图示例是数据卷相关的配置文件写法

                 2.kubernetes的数据卷类型:empthDir(pod分配到Node是创建,初始内容为空,无需指定宿主机对应的文件目录,pod移除之后会被永久删除)、hostPath(pod挂载宿主机的文件或目录)、gcePersistentDisk(谷歌公有云提供的永久磁盘)、awsElasticBlockStore(亚马逊公有云提供的)、NFS(NFS网络文件系统提供共享存储目录)

六、Persistent Volume(某个网络存储中对应的一块存储):简称PV(有状态的对象)

        1.pv和volume的区别:

        pv只能是网络存储,不属于任何node,可以在每个node上访问

        pv不是定义在pod上,独立于pod之外定义

        2.pv的accesModes属性:
             readWriteOnce:读写权限,只能被单个node 挂载

             readOnlyMany:只读权限,允许多个node挂载

             readWriteMany:读写权限,允许多个node挂载

七、namespace(命名空间)

        1.namespace是将集群内部的资源对象分配到不同的namespace中,形成逻辑上分组的不同项目,使不同的分组在共享使用集群内部整个资源同时还可以被分别管理。

         2.集群启动后会创建一个default的namespace,可以通过kubectl get namespaces来查看命名空间的信息,如果用户不指明,则其创建的pod和rc、service将会被系统创建到default的namespace的命名空间下

                

相关文章:

Kubernetes入门学习

kubernetes技术架构模型 一、kubernetes的Label标签 1.标签是以keyvalue的格式通过用户自定义指定,目的是将其加入到各种资源对象上来实现多维度的资源分组管理使其更方便的进行资源分配、调度、配置和部署管理工作。 2.标签可以结合Label Selector(标签选择器)查询…...

支持向量机SVM的应用案例

支持向量机(Support Vector Machine,SVM)是一种强大的监督学习算法,广泛应用于分类和回归任务。 基本原理 SVM的主要目标是周到一个最优的超平面,该超平面能够将不同类别的数据点尽可能分开,并且使离该超平面最近的数…...

Chrome 132 版本新特性

Chrome 132 版本新特性 一、Chrome 132 版本浏览器更新 1. 在 iOS 上使用 Google Lens 搜索 在 Chrome 132 版本中,开始在所有平台上推出这一功能。 1.1. 更新版本: Chrome 126 在 ChromeOS、Linux、Mac、Windows 上:在 1% 的稳定版用户…...

(5)STM32 USB设备开发-USB键盘

讲解视频:2、USB键盘-下_哔哩哔哩_bilibili 例程:STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为使用使用STM32模拟USB键盘的例程,没有知识,全是实操,按照步骤就能获得一个STM32的USB键盘。本例子是…...

Linux 系统服务开机自启动指导手册

一、引言 在 Linux 系统中,设置服务开机自启动是常见的系统配置任务。本文档详细介绍了多种实现服务开机自启动的方法,包括 systemctl 方式、通用脚本方式、crontab 方案等,并提供了生产环境下的方案建议和开机启动脚本示例。 二、systemct…...

分布式多卡训练(DDP)踩坑

多卡训练最近在跑yolov10版本的RT-DETR,用来进行目标检测。 单卡训练语句(正常运行): python main.py多卡训练语句: 需要通过torch.distributed.launch来启动,一般是单节点,其中CUDA_VISIBLE…...

Codeforces Round 1000 (Div. 2)-C题(树上两个节点不同边数最大值)

https://codeforces.com/contest/2063/problem/C 牢记一棵树上两个节点如果相邻,它们有一条边会重叠,两个节点延伸出去的所有不同边是两个节点入度之和-1而不是入度之和,那么如果这棵树上有三个节点它们的入度都相同,那么优先选择非相邻的两个节点才能使所有不同边的数量最大!!…...

C++17 新特性解析:Lambda 捕获 this

C17 引入了许多改进和新特性,其中之一是对 lambda 表达式的增强。在这篇文章中,我们将深入探讨 lambda 表达式中的一个特别有用的新特性:通过 *this 捕获当前对象的副本。这个特性不仅提高了代码的安全性,还极大地简化了某些场景下…...

Spring Boot 使用 Micrometer 集成 Prometheus 监控 Java 应用性能

在Spring Boot中使用Micrometer集成Prometheus来监控Java应用性能是一种常见的做法。 一、Micrometer简介 Micrometer是一个开源的Java项目,主要用于为JVM应用程序提供监控和度量功能。以下是对Micrometer的详细介绍: 定义与功能 Micrometer是一个针…...

Spring Boot 事件驱动:构建灵活可扩展的应用

在 Spring Boot 应用中,事件发布和监听机制是一种强大的工具,它允许不同的组件之间以松耦合的方式进行通信。这种机制不仅可以提高代码的可维护性和可扩展性,还能帮助我们构建更加灵活、响应式的应用。本文将深入探讨 Spring Boot 的事件发布…...

IM系统设计

读多写少,一般采用写扩散成timeline来做 写扩散模式 利用last message id作为这个作为最后一个消息体 timeline和批量未读和ack 利用ZSET来维护连接的定时心跳,来续约运营商的连接不断开...

华为EC6110T-海思Hi3798MV310_安卓9.0_通刷-强刷固件包

华为EC6110T-海思Hi3798MV310_安卓9.0_通刷-强刷固件包 刷机教程说明: 适用机型:华为EC6110-T、华为EC6110-U、华为EC6110-M 破解总分为两个部分:拆机短接破解(保留IPTV)和OTT卡刷(不保留IPTV&#xff09…...

ASP.NET Blazor托管模型有哪些?

今天我们来说说Blazor的三种部署方式,如果大家还不了解Blazor,那么我先简单介绍下Blazor Blazor 是一种 .NET 前端 Web 框架,在单个编程模型中同时支持服务器端呈现和客户端交互性: ● 使用 C# 创建丰富的交互式 UI。 ● 共享使用…...

PyTorch广告点击率预测(CTR)利用深度学习提升广告效果

目录 广告点击率预测问题数据集结构广告点击率预测模型的构建1. 数据集准备2. 构建数据加载器3. 构建深度学习模型4. 训练与评估 总结 广告点击率预测(CTR,Click-Through Rate Prediction)是在线广告领域中的重要任务,它帮助广告平…...

PAT甲级-1017 Queueing at Bank

题目 题目大意 银行有k个窗口,每个窗口只能服务1个人。如果3个窗口已满,就需要等待。给出n个人到达银行的时间和服务时间,要求计算每个人的平均等待时间。如果某个人的到达时间超过17:00:00,则不被服务,等待时间也不计…...

OneData体系架构详解

阿里巴巴的 OneData 体系架构方法论,主要分为三个阶段:业务板块、规范定义 和 模型设计。每个阶段的核心目标是确保数据的高效管理、共享与分析能力。 一. 业务板块(Business Segment) 业务板块是OneData体系架构中的第一步&…...

Gin 框架入门实战系列教程

一,Gin介绍 Gin是一个 Go (Golang) 编写的轻量级 http web 框架,运行速度非常快,如果你是性能和高效的追求者,我们推荐你使用Gin框架。 Gin最擅长的就是Api接口的高并发,如果项目的规模不大,业务相对简单…...

鸿蒙harmony json转对象(2)

在ArkTS(Ark TypeScript)中,接口(interface)是用来定义一个对象的结构,它可以包含属性、方法签名,以及嵌套的类型(包括其他接口或对象类型)。因此,接口里面可…...

M-LAG与E-trunk

M-LAG和E-trunk都是用来实现跨设备链路聚合,解决单点故障的,其大部分特性相同,工作模式M-LAG更胜一筹,支持双活,而且其原理感觉像是vrrpmstp的升级版,是往增加网络可靠性去发展的;而E-trunk是基于LACP扩展实现&#xf…...

【面试常见问题】

如何自我介绍 自我介绍是面试关键部分,是面试官了解求职者的首要途径,清晰自信的介绍能提升面试官印象,对求职成功至关重要。 糟糕的自我介绍示例 求职者朱晓明虽表明自己善于交际、积极,23 年毕业且从事 java 开发&#xff0c…...

Spring Boot Starter介绍

前言 大概10来年以前,当时springboot刚刚出现并没有流行,当时的Java开发者们开发Web应用主要是使用spring整合springmvc或者struts、iBatis、hibernate等开发框架来进行开发。项目里一般有许多xml文件配置,其中配置了很多项目中需要用到的Be…...

vue和reacts数据响应式的差异

Vue 的数据响应式: 原理: Vue 使用 Object.defineProperty 或 Proxy(在 Vue 3 中)来实现数据的响应式。当创建 Vue 实例时,会对 data 对象中的属性进行遍历,将其转换为响应式属性。对于 Object.definePro…...

OpenEuler学习笔记(九):安装 OpenEuler后配置和优化

安装OpenEuler后,可以从系统基础设置、网络配置、性能优化等方面进行配置和优化,以下是具体内容: 系统基础设置 更新系统:以root用户登录系统后,在终端中执行sudo yum update命令,对系统进行更新&#xf…...

npm命令与yarn命令的区别

npm与Yarn的区别详解 在软件开发中,npm和Yarn都是流行的包管理工具,它们各自拥有独特的特性和优势。以下是它们的主要区别: 1. 安装速度 npm:安装速度相对较慢,尤其是在依赖项较多的情况下。Yarn:采用并…...

python如何导出数据到excel文件

python导出数据到excel文件的方法: 1、调用Workbook()对象中的add_sheet()方法 wb xlwt.Workbook() ws wb.add_sheet(A Test Sheet) 2、通过add_sheet()方法中的write()函数将数据写入到excel中,然后使用save()函数保存excel文件 ws.write(0, 0, 1234…...

MYSQL学习笔记(五):单行函数(字符串、数学、日期时间、条件判断、信息、加密、进制转换函数)讲解

前言: 学习和使用数据库可以说是程序员必须具备能力,这里将更新关于MYSQL的使用讲解,大概应该会更新30篇,涵盖入门、进阶、高级(一些原理分析);这一篇是讲解单行函数,当然mysql函数很多哈,只有多用才能记得…...

Grafana系列之Dashboard:新增仪表板、新增变量、过滤变量、变量查询、导入仪表板、变量联动、Grafana Alert

概述 关于Prometheus和Grafana的安装,略过。 写在前面 Dashboard:仪表板,可包含多个PanelPanel:面板,Dashboard中的组件 如有写得不对的地方,烦请指出。 新增仪表板 点击右上角的 选择New dashboard…...

(java版本)基于Misty1算法的加密软件的实现-毕业设计

一、基于Misty1算法的加密软件(Java)的实现 随着计算机网络及通信技术的飞速发展,信息安全成了信息社会急需解决的最重要的问题之一,密码技术是保证信息安全的核心技术。本文用JAVA语言开发了一个基于Misty1算法的加密软件&#x…...

Spring注解篇:@RestController详解

全文目录: 开篇语前言摘要概述源码解析使用案例分享代码分析使用场景优缺点分析测试用例 应用场景案例优缺点分析核心类方法介绍测试用例测试用例分析使用场景优缺点分析测试用例 小结总结文末 开篇语 哈喽,各位小伙伴们,你们好呀&#xff0c…...

C++:将字符数组rkpryyrag,每个字母转换为其前面第13个字母后输出,如果超过a则从z再继续接着数。例如:b前面第1个字母是a。a前面第3个字母是x。

代码如下&#xff1a; #include <iostream> #include <string> using namespace std;int main(){string str "rkpryyrag";for (int i 0; i < str.length(); i){if (str[i] > a && str[i] < z){if (str[i] - a < 13){cout <<…...