Kubernetes速成课程:掌握容器编排的精髓
微服务演进方向
• 面向分布式设计(Distribution):容器、微服务、API 驱动的开发;
• 面向配置设计(Configuration):⼀个镜像,多个环境配置;
• 面向韧性设计(Resistancy):故障容忍和自愈;
• 面向弹性设计(Elasticity):弹性扩展和对环境变化(负载)做出响应;
• 面向交付设计(Delivery):⾃动拉起,缩短交付时间;
• 面向性能设计(Performance):响应式,并发和资源高效利用;
• 面向自动化设计(Automation):⾃动化的 DevOps;
• 面向诊断性设计(Diagnosability):集群级别的日志、metric 和追踪;
• 面向安全性设计(Security):安全端点、API Gateway、端到端加密;
满足微服务架构模式要求
• 容器化
• 服务发现
• 可编排
• 动态调度
• 支持标准cicd
• 分布式配置架构
• 声明式配置
Kubernetes就是为了满足上述微服务的各种演进和特点诞生的,在K8S的设计哲学里充满了对微服务编排的各种模式的定制化支持。
K8S的特性
• Predictable Demands
○ 资源使⽤
○ 服务配置
○ 流量控制
○ 依赖管理
• Declarative Deployment
○ 滚动升级
○ 固定方式升级
○ 蓝绿升级
○ 金丝雀发布
• HealthProbe
○ 健康检查:health check
○ 存活检查: lineness probes (HTTP,TCP,EXEC)
○ 可用性检查:readiness probe
• Managed Lifecycle
○ Signal
○ sigkill
○ Restart
○ Prestop hook
○ Poststart hook
• Automated Placement
○ 面向最合适的资源进行调度
K8S各个组件的联动
Pod介绍
将多个容器打通共享隔离机制,每个pod都会包含一个paused的容器用于初始化环境,其他容器继承该容器的隔离配置
Pod基础
Pod的本质是多个共享资源的容器的组合。
Pod调度的筛选策略
Pod申请资源的优先级控制机制与模型
如上图所示,三种资源分配模型各自具备一定的特点,基于模型的特点可以整合资源混合部署的优先级控制机制,增强整体集群资源的利用率
• BestEffort
• Bustable
• Guaranteed
Service
在K8集群中,客户端需要访问的服务就是Service对象。每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问⼀个服务。
• label:用于过滤筛选pod,label在k8s内部会进行索引,因此检索效率非常高效,业务模型设计的时候用于过滤检索的字段可以用label表示,尽量写的所有label都是有效检索字段。
• annotations:用于注解一些label不易说清楚的事项,注意annotation不会被索引,因此不要使用annotation用来做筛选字段。
• configmap:当开发控制器或者定义容器的时候需要额外的配置,这些配置信息又无法通过label和annotation来传递,此时最好的方案就是用configmap。
流量接入
通过proxy方式
负载均衡器直接接入到service
通过ingress组件暴露接口
ETCD说明
etcd是k8s的分布式存储中心,etcd集群管理,raft协议保证一致性。
关于etcd的详细说明有一个开源电子书:https://csunny.gitbook.io/etcd/introduce
Controller控制器模型
K8S在etcd基础之上提供了一个基于事件驱动的编程模型,基于该模型可以控制资源的生命周期以及响应事件的变化做出动态调整;
控制原理示意图
Obeserve--->Analyze--->Act 事件循环,k8s提供的控制器编程模型提供了可靠的基于资源的扩展协议和通用的编程模型,在该模型下可以扩展更多的通用定制化逻辑。
用shell脚本模拟控制器模式如下:
K8S Watch的事件类型补充说明一下:
Operator
operator本质上是定制化的控制器,只不过控制器层面额外做了很多封装操作,这些操作使得我们做定制化资源控制和服务管理时更得心应手。
CRD(CustomResourceDefinition)非常有用,CRD对于我们扩展K8S的接口非常有帮助,有CRD我们就可以基于K8S做更多的定制化场景的服务管控。CRD将K8S的能力和特定领域的软件的能力进行了整合,这个整合使得K8S具备了非常好的扩展空间。
一个标准的crd定义举例:
1. Name
2. API归属组
3. 确定资源类型,用于识别该资源
4. 名称的复数形式,用于 URL:/apis/<组>/<版本>/<名称的复数形式>
5. 作用域,名字空间维度或者集群维度等
6. 版本
7. 具体支持的版本号
8. 只有一个版本会标记为存档版本,设置为true表示当前版本需要存储
9. 每个版本都可以通过served表示启用与否
10. openapi的版本schema定义模式
Volume
Volume是Pod中能够被多个容器访问的共享目录,Kubernetes中的Volume与Pod⽣生命周期相同,但与容器的⽣命周期不相关,Kubernetes⽀持多种类型的Volume,并且一个Pod可以同时使用任意多个Volume。
• EmptyDir:Pod分配时创建,K8S⾃自动分配,当Pod被移除数据被清空。⽤用于临时空间 等。
• hostPath: 为Pod上挂载宿主机⽬目录。⽤用于持久化数据。
○ gcePersistentDisk、awsElasticBlockStore:挂载公有云盘。
○ nfs、iscsi、glusterfs、rbd、gitRepo:挂载相应磁盘资源。
K8S声明式配置标准
• apiVersion
• kind
• metadata
• spec
示例:
Resource资源
K8S几乎所有对象都被抽象为了资源(Resource),包括 K8s Core Resources(Pod, Service, Namespace 等)、CRD、APIService 扩展的资源类型。同时 K8s 底层将这些资源统一抽象为了 RESTful 的存储(Storage),一方面服务端按目录形式(/registry/xxx) 存放在 ETCD 中,另一方面也为客户端提供了 RESTful API 接口,便于对资源的操作(get/post/put/patch/delete 等)。
K8s Watch API 就是为资源提供的一种持续监听其变化的机制,当资源有任何变化的时候,都可以实时、顺序、可靠的传递给客户端,使得用户可以针对目标资源进行灵活应用与操作。
容器内和K8S配置联动方式
容器内进程能获取到的外部编排的上下文信息有两个来源,环境变量和挂载项。
第一为环境变量
环境变量需要在编排期设置
第二为挂载的文件
挂载文件以及生成规则也需要在编排期设置,对于配置是否只读也可以在编排期设置选项
• 示例,比如容器想在运行时了解容器编排的一些注解信息和标签信息,基于该注解内容来控制流量策略和业务模型,那么实现可以如下方式:
K8S集群编排服务的模式梳理
DaemonSet模式
类似于守护进程一样,每个节点部署一个pod。
SideCar模式
⽣产环境中经常需要有一些通⽤的配置初始化策略,比如权限统⼀设置,类似的活⼉交由sidecar 模式的容器器进行管理,这样的容器可以只处理通用性的需求,比如统⼀将⽇志⽬录的挂载采集策略进⾏编排,将日志挂载路路径规范化,采集统⼀化;所谓的sidecar就是有一个容器器和其他容器进行了某种的共享策略,然后基于共享的内容各自负责各自的事情。
Init Container
服务的启动依赖其他容器进⾏一些初始化工作,⽐如动态生成配置⽂件,静态文件独立编译生成
后交由服务容器器使⽤。
Singleton Service
全局只能有一个Pod实例,有些特定场景的服务只能全局保证只有一个容器在干活,其他的同时处理会有资源竞争或者分布式锁的问题,因此该场景下可以考虑singleton的部署方式。
Stateful Service
有状态服务比如mysql,其数据层关系到该POD不能跟无状态图服务一样故障后重新寻找资源然后启动就OK了,有状态服务需要保证带状态的层和服务的捆绑。因此一个服务一旦对某个特定状态有依赖务必需要重点考虑其部署编排模式。
Ambassador
ambassador模式类似于代理模式,将服务基础能力通过封装的方式独立出去,然后业务逻辑通过容器内去访问,降低容器接入外部服务的成本。
动态扩缩容
扩容,缩容涉及到的维度不同工作原理与方案就不同,比如集群维度,pod维度等差异。
K8S内置了很多可以面向动态扩缩容的机制,比如基于metirc指标动态生成扩容计划
• POD的动态调整模型
• 集群的动态调整模型
其他
• K8S常用的各种命令:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#create
• k8s的watchapi整理:https://mp.weixin.qq.com/s/swmMoegiNgNHUwc67NN6AA
• kubebuilder:将多个crd整合到一起开发的项目
○ https://github.com/kubernetes-sigs/kubebuilder
• Metacontroller:提供一个定制化的crd,但是该crd提供了各种能力的通用型扩展语义
○ https://github.com/metacontroller/metacontroller
• jsonnet数据模板语言:https://github.com/google/jsonnet
• operatorhub:https://operatorhub.io/
• operator sdk:https://github.com/operator-framework/operator-sdk
相关文章:
Kubernetes速成课程:掌握容器编排的精髓
微服务演进方向 • 面向分布式设计(Distribution):容器、微服务、API 驱动的开发; • 面向配置设计(Configuration):⼀个镜像,多个环境配置; • 面向韧性设计(Resistancy):故障容忍和自愈; • 面向弹性设计(Elasticity):弹性扩展和对环境变化(负载)做出响应; •…...
【数据库】分组数据 GROUP BY、HAVING
分组数据 创建分组过滤分组SQL 子句顺序 创建分组 s q l sql sql 中,使用 GROUP BY 子句对数据进行分组。分组通常与聚合函数一起使用,以对每个组内的数据执行聚合操作; e . g . e.g. e.g. 按照客户分组,计算每个客户的订单总金额…...
“唯品会VIP商品API:一键获取奢侈品详情,尊享品质生活!“
要获取唯品会VIP商品的详细信息,您可以通过唯品会的API接口进行调用。 唯品会提供了多种商品选择,包括服装、美容护肤、鞋子、箱包、家居、母婴等等。在这些商品中,VIP奢侈品专区是唯品会的重要特色之一。 要获取VIP商品的详细信息…...
uniapp解决iOS切换语言——原生导航栏buttons文字不生效
uniapp 切换语言原生导航栏buttons文字不生效? 文章目录 uniapp 切换语言原生导航栏buttons文字不生效?效果图page.json配置解决方式 效果图 场景:在 tabbar 页面中,配置 原生导航栏 buttons ,切换语言时,不…...
idea 基础设置
1、设置 IDEA 主题 2、自动导包和优化多余的包 3、同一个包下的类,超过指定个数的时候,导包合并为* 4、显示行号 , 方法和方法间的分隔符: 5、忽略大小写,进行提示 6、多个类不隐藏,多行显示 7、设置默认的…...
Rockchip Uboot CmdLine 作用 来源 常用参数
Rockchip Uboot CmdLine cmdline 是 U-Boot 向 kernel 传递参数的一个重要手段,诸如传递启动存储,设备状态等。cmdline 参数有多个来源,由 U-Boot 进行拼接、过滤重复数据之后再传给 kernel。U-Boot 阶段的 cmdline 被保存在 bootargs 环境变…...
MySQL表导出
# 导出表和数据 mysqldump --skip-extended-insert -hHost -uUser -pPassword -PPost database table > table.sql# 如: mysqldump --skip-extended-insert -h172.1.0.1 -uroot -pabc123 -P3306 data_support city_code > city_code.sql# 导入表和数据 mysql …...
HTML页面获取URL传递的参数值
如: // 查询url上链接的参数与参数值 function getQueryString(name) {var url window.location.search; // 获取URLvar pattern new RegExp("[\?\&]" name "([^\&])", "i"); // 正则匹配URLvar matcher pattern.exec(…...
mac安装jenkins
1、安装jenkins之前确认是否安装了homebrew 2、开始安装jenkins 安装完如下图则安装完成 3、改一下ip和端口 4、启动jenkins brew services restart jenkins 使用自己修改后的ip:port http://0.0.0.0:8088 根据提示信息,拿到管理员密码,并解锁 5、安装…...
asp.net网球馆计费管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
一、源码特点 asp.net网球馆计费管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语 言开发 aspnet网球馆计费管理系统1 二、…...
动手学深度学习——第五次学
权重衰减是最广泛使用的正则化的技术之一 今天学的很头疼,好多都是公式 12权重衰退(解决过拟合) 13丢弃法(解决过拟合) 14数值稳定(梯度爆炸和梯度消失问题) 15竞赛题讲解 层和块 多层感知机…...
python实验16_网络爬虫
实验16:网络爬虫 1.实验目标及要求 (1)掌握简单爬虫方法。 2. 实验主要内容 爬取中国票房网 ① 爬取中国票房网(www.cbooo.cn)2019年票房排行榜前20名的电影相关数据 代码部分: import time from selenium.webdriver impor…...
家长扫码查成绩
亲爱的老师,你是否曾为了如何让家长更方便地查询学生的成绩而烦恼?现在,我们为你介绍一款简单易用的成绩查询系统,让家长只需轻轻一扫,即可查看孩子的成绩。 一、什么是成绩查询系统? 成绩查询系统是一款专…...
【转】多台服务器共享session问题
多台服务器共享 session 问题 现在的大型网站中,如何实现多台服务器中的 session 数据共享呢? 当使用多台服务器架设成集群之后,我们通过负载均衡的方式,同一个用户(或者 ip)访问时被分配到不同的服务器上…...
页面置换算法的模拟实现及命中率对比
页面置换算法是用于管理计算机内存中页面(或页面框)的一种策略。常见的页面置换算法包括FIFO(先进先出)、LRU(最近最少使用)、LFU(最少使用)等。以下是一个简单的页面置换算法模拟实…...
说一说ajax的请求过程?
AJAX(Asynchronous JavaScript and XML)是一种通过在后台与服务器进行异步通信的技术,用于实现页面的局部更新和动态加载数据。下面是 AJAX 请求的一般过程: 1:创建 XMLHttpRequest 对象:在 JavaScript 中…...
leetcode 84. 柱状图中最大的矩形
84. 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights [2,1,5,6,2,3] 输出:10 解释&…...
ubuntu 安装 gnome 安装 xrdp
先安装xrdp 更新 apt-get sudo apt-get update && apt-get upgrade安装图形包 apt-get install xubuntu-desktop安装 xrdp apt-get install xrdp安装 xfce4 apt-get install xfce4配置 xfce4 Add xfce to the xfce desktop window manager autorun by fixing the …...
微信小程序——后台交互
目录 后台准备 pom.xml 配置数据源 整合mtbatis 前后端交互 method1 method2 后台准备 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org…...
3D模型如何添加表面贴图?
1、模型表面贴图介绍 模型表面贴图(Texture Mapping)是一种将纹理映射到三维模型表面的技术,用于增加模型的细节和真实感。它通过在模型的每个表面点上应用纹理坐标,并将纹理像素与模型的对应点进行匹配,使得模型表面…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
【系统架构设计师-2025上半年真题】综合知识-参考答案及部分详解(回忆版)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20~21题】【第…...
视觉slam--框架
视觉里程计的框架 传感器 VO--front end VO的缺点 后端--back end 后端对什么数据进行优化 利用什么数据进行优化的 后端是怎么进行优化的 回环检测 建图 建图是指构建地图的过程。 构建的地图是点云地图还是什么信息的地图? 建图并没有一个固定的形式和算法…...
【动态规划】B4336 [中山市赛 2023] 永别|普及+
B4336 [中山市赛 2023] 永别 题目描述 你做了一个梦,梦里有一个字符串,这个字符串无论正着读还是倒着读都是一样的,例如: a b c b a \tt abcba abcba 就符合这个条件。 但是你醒来时不记得梦中的字符串是什么,只记得…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术点解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术点解析 第一轮:基础概念问题 请解释Spring框架的核心容器是什么?它的作用是什么? 程序员JY回答:Spring框架的核心容器是IoC容器(控制反转…...
