K8S篇之K8S详解
一、K8S简介
k8s全称kubernetes,是为容器服务而生的一个可移植容器的编排管理工具。k8s目前已经主导了云业务流程,推动了微服务架构等热门技术的普及和落地。
k8s是自动化容器操作的开源平台。这些容器操作包括:部署、调度和节点集群间扩展。
具体功能:
1、自动化容器部署和复制
2、实时弹性收缩容器规模
3、容器编排成组,并提供容器间的负载均衡
调度:容器在哪个机器上运行。
二、k8s组成
1、kubectl:客户端命令行工具,作为整个系统的操作入口。
2、kube-apiserver:以REST API 服务形式提供接口,作为整个系统的控制入口。
3、kube-controller-manager:执行整个系统的后台任务,包括节点状况状态、Pod个数、Pods和Service的关联等
4、kube-scheduler:负责节点资源管理,接受来自kube-apiserver创建Pods任务,并分配到某个节点。
5、etcd:负责节点间的服务发现和配置共享。
6、kube-proxy:运行在每个计算节点上,负责Pod网络代理。定时从etcd获取到service信息来做相应的策略。
7、kubelet:运行在每个计算节点上,作为agent,接收分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver。
8、DNS:一个可选的DNS服务,用于为每个Service对象创建DNS记录,这样所有的Pod就可以通过DNS访问服务了。
三、两地三中心
两地三中心包括本地生产中心、本地灾备中心、异地灾备中心
两地三中心要解决的一个重要问题就是数据一致性问题。K8s使用etcd组件作为一个高可用、强一致性的服务发现存储仓库。用于配置共享和服务发现。
它作为一个受到Zookeeper和doozer启发而催生的项目。除了拥有他们的功能之外,还拥有以下4个特点:
1、简单:基于http+json的api让你用curl命令就可以轻松使用。
2、安全:可选SSL客户认证机制。
3、快速:每个实例每秒支持一千次写操作。
4、可信:使用Raft算法充分实现了分布式。
四、四层服务发现
k8s提供了两种方式进行服务发现:
环境变量:当创建一个Pod的时候,kubelet会在该Pod中注入集群内所有的Service的相关环境变量、要注意的是,要想一个Pod中注入某个Service的环境变量,则必须Service先要比该Pod创建。这一点,几乎使得这种方法进行服务发现不可用。
比如,一个ServiceName为redis-master的Service,对应的ClusterIP:Port为10.0.0.11:6379,则对应的环境变量为:
DNS:可以通过cluster add-on的方式轻松的创建KubeDNS来对集群内的Service进行服务发现。
以上两种方式,一个是基于tcp,众所周知,DNS是基于UDP的,它们都建立在四层协议之上。
五、五种Pod共享资源
Pod是K8s最基本的操作单元,包含一个或多个紧密相关的容器,一个POD可以被一个容器化的环境看作应用层的“逻辑宿主机”;一个POD中的多个容器应用通常是紧密耦合的,Pod在Node上被创建、启动或者销毁;每个Pod里运行着一个特殊的被称之为Volume挂载卷,因此他们之间通信和数据交换更为高效,在设计时我们可以利用这一特性将一组密切相关的服务放入同一个Pod中。
同一个Pod里的容器之间仅需通过localhost就能互相通信。
一个Pod里的应用容器共享五种资源:
PID命名空间:Pod中的不同应用程序可以看到其他应用程序的进程ID。
网络命名空间:Pod中的多个容器能够访问同一个IP和端口范围。
IPC命名空间:Pod中的多个容器能够使用SystemV IPC或POSIX消息队列进行通信。
UTS命名空间:Pod中的多个容器共享一个主机名。
Volumes(共享存储卷):Pod中的各个容器可以访问在Pod级别定义的Volumes。
Pod的生命周期通过Replication Controller来管理;通过模板进行定义,然后分配到一个Node上运行,在Pod所包含容器运行结束后,Pod结束。
Kubernetes为Pod设计了一套独特的网络配置,包括:为每个Pod分配一个IP地址,使用Pod名作为容器间通信的主机名等。
六、六个CNI常用插件
CNI(Container Network Interface)容器网络接口,是Linux容器网络配置的一组标准和库,用户需要根据这些标准和库来开发自己的容器网络插件。CNI只专注解决容器连接和容器销毁时的资源释放,提供一套框架,所以CNI可以支持大量不通的网络模式,并且容器实现。
下图表示六个CNI常用插件:
七、七层负载均衡
提负载均衡就不得不先提服务器之间的通信
IDC(Internet Data Center),也可称数据中心、机房,用来放置服务器。IDC网络是服务器间通信的桥梁。
具体作用:
路由器、交换机、MGW/NAT都是网络设备,按照性能、内外网划分不通的角色。
内网接入交换机:也称为TOR(top of rack),是服务器接入网络的设备。每台内网接入交换机下联40-48台服务器,使用一个掩码/24的网段作为服务器内网网段。
内网核心交换机:负责IDC内各内网接入交换机的流量转发及跨IDC流量转发。
MGW/NAT:MGW即LVS用来做负载均衡,NAT用于内网设置访问外网时做地址转换。
外网核心路由器:通过静态互联运营商或BGP互联美团统一外网平台。
先说说各层负载均衡:
二层负载均衡:基于MAC地址的二层负载均衡。
三层负载均衡:基于IP地址的负载均衡。
四层负载均衡:基于IP+端口的负载均衡。
七层负载均衡:基于URL等应用层信息的负载均衡。
上面四层服务发现讲的主要是k8s原生的kube-proxy方式。
K8s关于服务的暴露方式主要是通过NodePort方式,通过绑定minion主机的某个端口,然后进行pod的请求转发和负载均衡。
- Service可能有很多个,如果每个都绑定一个node主机端口的话,主机需要开放外围的端口进行服务调用,管理混乱。
- 无法应用很多公司要求的防火墙规则。
理想的方式是通过一个外部的负载均衡器,绑定固定的端口,比如80,然后根据域名或者服务名向后面的Service ip转发,Nginx很好的解决了这个需求,Nginx很好的解决了这个需求,但问题是如果有新的服务加入,如何去修改nginx的配置,并且加载这些配置呢?
Kubernetes给出的解决方案是Ingress。这是一个基于7层的方案。
八、九个网络模型原则
K8s网络模型要符合4个基础原则,3个网络要求原则,1个架构原则,1个IP原则。
每个Pod都拥有一个独立的IP地址,而且假定所有Pod都在一个可以直接连通的、扁平的网络空间中,不管是否运行在同一Node上都可以通过Pod的IP来访问。
K8s中的Pod的IP是最小粒度IP。同一个Pod内所有的容器共享一个网络堆栈,该模型成为IP-per-Pod模型。
- Pod由docker0实际分配的IP
- Pod内部看到IP地址和端口与外部保持一致
- 同一个Pod内的不同容器共享网络,可以通过localhost来访问对方的端口,类似同一个VM内不同的进程。
IP-per-Pod模型从端口分配、域名解析、服务发现、负载均衡、应用配置等角度看,Pod可以看作是一台独立的VM或物理机。 - 所有容器都可以不同NAT的方式与别的容器通信
- 所有节点都可以在不同NAT方式下同所有容器通信,反之亦然。
- 容器的地址和别人看到的地址是同一个地址
要符合下面的架构:
由上图架构引申出来IP概念从集群外部到集群内部
相关文章:

K8S篇之K8S详解
一、K8S简介 k8s全称kubernetes,是为容器服务而生的一个可移植容器的编排管理工具。k8s目前已经主导了云业务流程,推动了微服务架构等热门技术的普及和落地。 k8s是自动化容器操作的开源平台。这些容器操作包括:部署、调度和节点集群间扩展。…...

进博会再现上亿大单 EZZ携手HIC海橙嗨选签署2024年度合作备忘录
正在举行的第六届中国国际进口博览会上,再现上亿大单。11月6日,在澳大利亚新南威尔士州政府代表的见证下,澳交所基因组龙头上市公司EZZ生命科学和中国跨境社交电商龙头HIC海橙嗨选签署2024合作备忘录,在未来的一年,EZZ…...

深度学习基于python+TensorFlow+Django的花朵识别系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 花朵识别系统,基于Python实现,深度学习卷积神经网络,通过TensorFlow搭建卷积神经…...

Azure 机器学习 - 机器学习中的企业安全和治理
目录 限制对资源和操作的访问网络安全性和隔离数据加密数据渗透防护漏洞扫描审核和管理合规性 在本文中,你将了解可用于 Azure 机器学习的安全和治理功能。 如果管理员、DevOps 和 MLOps 想要创建符合公司策略的安全配置,那么这些功能对其十分有用。 通过…...

Unity - 各向异性 - 丝绸材质
文章目录 目的环境主观美术效果的[假]丝绸基于物理的方式ProjectPBR filament web captureReferences 目的 拾遗,备份 环境 Unity : 2020.3.37f1 Pipeline : Builtin Rendering Pipeline 主观美术效果的[假]丝绸 非常简单 : half specualr pow(1 - NdotV, _Edg…...

MySQL中UUID主键的优化
UUID(Universally Unique IDentifier 通用唯一标识符),是一种常用的唯一标识符,在MySQL中,可以利用函数uuid()来生产UUID。因为UUID可以唯一标识记录,因此有些场景可能会用来作为表的主键,但直接…...

Python实现WOA智能鲸鱼优化算法优化BP神经网络分类模型(BP神经网络分类算法)项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…...

Rust语言代码示例
安装Rust语言,然后创建一个新的Rust项目。接下来,你需要安装一个名为"requests"的Rust包,这个包可以帮助你发送请求。然后,你需要安装一个名为"rust-crawler"的Rust包,这个包可以帮助你编写爬虫程…...

【SpringBoot3+Vue3】一【基础篇】
目录 一、Spring Boot概述 1、Spring Boot 特性 1.1 起步依赖 1.2 自动配置 1.3 其他特性 1.3.1 内嵌的Tomcat、Jetty (无需部署WAR文件) 1.3.2 外部化配置 1.3.3 不需要XML配置(properties/yml) 二、Spring Boot入门 1、一个入门程序需求 2、步骤 2.1 创建Maven工…...

麒麟信安登录央视,深度展现为中国信息安全铸“魂”之路
麒麟信安登录央视,深度展现为中国信息安全铸“魂”之路 近日,麒麟信安登录央视频道,《麒麟信安——为中国信息安全铸“魂”》在CCTV-4中文国际频道、CCTV-7国防军事频道、CCTV-10 科教频道、CCTV-12社会与法频道、CCTV-17农业农村频道&#x…...

Flutter的专属Skia引擎解析+用法原理
Skia是一款跨平台的2D图形库,是Google公司开发的,可以用于开发各种应用程序,如浏览器、游戏、移动应用程序等。Skia引擎的主要特点是速度快、可移植性强、占用的内存少、稳定性佳,适用于多种硬件平台。 Skia的目标是提供快速、高…...

python poetry的教程
Poetry Python世界中,Poetry是一个近年来备受瞩目的工具,它为开发者提供了一个灵活且强大的依赖管理解决方案。Poetry可以帮助开发者管理项目的依赖关系,同时提供了一系列的工具和功能,使开发者能够更轻松地创建和管理复杂的项目。…...
jq里的ajax超详细参数讲解
目录 1、url:要发送请求的URL地址。 2、type:请求的类型,可选参数,包括GET、POST、PUT、DELETE等,默认为GET。 3、data:要发送到服务器的数据,可以是一个字符串、数组或对象。默认为null。 4…...

郑州大学2020级信息安全专业——保研小结
最终上岸 夏令营: 夏令营开始的时间一般比较早,在期末考试之前就已经开始了,需要提前联系导师,有的学校是弱com,导师愿意要你入营的概率和优营的概率就会比较大,因此要提前联系导师,复习好项目…...
【系统架构设计】架构核心知识: 3.6 负载均衡和Session
目录 一 负载均衡 1 应用层负载均衡 2 传输层负载均衡 二 Session 1 Session共享机制...
python pip安装特定包,网络慢的问题
文件requirements.txt httpx0.24.0 Pillow9.5.0 playwright1.33.0 tenacity8.2.2 tornado6.3.2 PyExecJS1.5.1 opencv-python4.7.0.72 tortoise-orm[asyncmy]0.19.3 aerich0.7.2 numpy~1.24.4 redis~4.6.0 Pydantic1.7将文件放入任意一个目录下 cd 到该目录下执行 while read…...

CMT2300A超低功耗127-1020MHz Sub-1GHz全频段SUB-1G 射频收发芯片
CMT2300A超低功耗127-1020MHz Sub-1GHz全频段SUB-1G 射频收发芯片 Sub-1GHz,是指小于1GHz频率的统称。Sub-1GHz无线电频段应用的主要特点:(1)频率较低波长较长,传输距离远,穿透性强;࿰…...

设计模式之工厂模式 ( Factory Pattern )(1)
其他设计模式也会后续更新… 设计模式其实需要有一定开发经验才好理解,对代码有一定的设计要求,工作中融入才是最好的 工厂模式 ( Factory Pattern ) 工厂模式(Factory Pattern)提供了一种创建对象的最佳方式 工厂模式在创建对…...
OpenCV入门11:轮廓提取和形状识别
轮廓分析主要用于轮廓提取和形状识别等任务。在OpenCV中,轮廓提取和形状识别是图像处理和计算机视觉中常见的任务。下面是关于这两个知识点的一些基本内容: 轮廓提取: 轮廓提取是指从图像中提取出物体轮廓的过程。在OpenCV中,可…...

竞赛选题 深度学习疲劳检测 驾驶行为检测 - python opencv cnn
文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习加…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...

CTF show 数学不及格
拿到题目先查一下壳,看一下信息 发现是一个ELF文件,64位的 用IDA Pro 64 打开这个文件 然后点击F5进行伪代码转换 可以看到有五个if判断,第一个argc ! 5这个判断并没有起太大作用,主要是下面四个if判断 根据题目…...

动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...