自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

go|Python的个人博客

技术分享与学习笔记

  • 博客(309)
  • 收藏
  • 关注

原创 K8s deployment 进阶

默认情况下,deployment 的所有上线记录都保存在系统中,以便随时回滚。滚动更新 (RoILingupdate),一次仅更新一批Pod,当更新的Pod就绪后,在更新另一批,直到全部更新完成为止;重建 (Recreate),当更新策略设定为 Recreate,在更新镜像时,它会先杀死正在运行的Pod,等彻底杀死后,重新创建新的RS,然后启动对应的Pod,那么在这个更新过程中,会造成服务一段时问无法提供服务;使用灰度发布的模式,可以及时发现问题,调整问题,以减少影响的速度,保证整体系统的稳定运行。

2024-05-24 15:10:37 266

原创 K8s Pod 资源进阶

如果系统中没有BestEffort类别的容器,接下来就轮到BUrstable类别的容器,如果有多个Burstable类别的容器,就看谁的内存资源占用多,就优先干掉谁。DownwardAPI可以让容器获取Pod的相关元数据信息,比如Pod名称,Pod的IP,Pod的资源限制等,获取后通过env、volume的方式将相关的环境信息注入到容器中,从而让容器通 过这些信息,来设定容器的运行特性。k8s 不允许设置精度小于1m 的CPU 资源。容器的用量少,但与自身的Requests值相比,它的占比要大于B容器。

2024-05-23 20:04:59 581

原创 K8s 部署prometheus

可以通过添加storageClass 配置来实现 prometheus-prometheus.yaml 文件中的配置来实现持久化。kube-prometheus 是 github 上开源的整合了 prometheus alertmanager granfana 等监控工具的项目,除此之外,还可以选择修改 prometheus、alertmanager、grafana 中的 spec.type 为 NodePort 方便测试访问。默认的镜像基本上都是国外的源,国内访问不到,需要替换一下镜像id。

2024-05-21 19:47:59 421

原创 Helm 包管理器

注: helm 客户端需要下载到安装了 kubectl 并且能执行能正常通过 kubectl 操作 kubernetes 的服务器上, 否则 helm 将不可用。helm 是 Kubernetes 包管理器(类似于yum apt-get brew 这些工具)Helm 管理名为 chart 的 Kubernetes 包的工具。提供执行所有 Helm 操作的逻辑。Helm 是查找、分享和使用软件构件 Kubernetes 的最优方式。独立的 Helm 库封装了 Helm 逻辑以便不同的客户端可以使用它。

2024-05-21 10:15:54 496

原创 K8s 身份认证和权限

服务账号与用户账号不同,用户账号是集群中通过了身份认证的人类用户。Service Account Controller 在 namespaces 里管理ServiceAccount,并确保每个有效的 namespaces 中都存在一个名为 “default” 的 ServiceAccount。普通账户是假定被外部或独立服务管理的,由管理员分配 keys,用户像使用 Keystone 或 google 账号一样,被存储在包含 usernames 和 passwords 的 list 的文件里。

2024-05-17 14:10:47 766

原创 K8s 高级调度

默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的。但是在实际使用中,这并不满足的需求,我们想控制某些Pod到达某些节点上,就要求了解kubernetes对Pod的调度规则,kubernetes提供了四大类调度方式:**自动调度:**运行在哪个节点上完全由Scheduler经过一系列的算法计算得出**定向调度:**NodeName、NodeSelector。

2024-05-16 18:17:16 285

原创 k8s 存储管理

EmptyDir 主要用于一个 Pod 中不同的 Container 共享数据使用的,由于只是在 Pod 内部使用,因此与其他 volume 比较大的区别是,当 Pod 如果被删除了,那么 emptyDir 也会被删除。k8s 中提供了一套自动创建 PV 的机制,就是基于 StorageClass 进行的,通过 StorageClass 可以实现仅仅配置 PVC,然后交由 StorageClass 根据 PVC 的需求动态创建 PV。只有PV的存储空间完成回收,才能供新的PVC绑定和使用。

2024-05-15 17:20:01 932

原创 k8s 配置管理

由于 configmap 我们创建通常都是基于文件创建,并不会编写 yaml 配置文件,因此修改时我们也是直接修改配置文件,而 replace 是没有 --from-file 参数的,因此无法实现基于源配置文件的替换,此时我们可以利用下方的命令实现。对于 subPath 的方式,我们可以取消 subPath 的使用,将配置文件挂载到一个不存在的目录,避免目录的覆盖,然后再利用软连接的形式,将该文件链接到目标位置。需要先创建 configmap 直接用上述命令创建或者通过yaml文件都行。

2024-05-13 15:52:50 487

原创 加密与CA证书

如此一来,解决了 动态对称秘钥 和 数据加密的问题,因为每个用户的对称秘钥都是随机生成且传输的过程中都使用公钥加密(公钥加密的数据只有私钥能解密),所有黑客无法截获对称秘钥。,这么干还是又bug:如果黑客在上图 【步骤2】劫持,黑客把自己的公钥返回给客客户端,那么客户端会使用黑客的公钥来加密对称秘钥,黑客在【步骤6】截获请求,使用自己的私钥获取对称秘钥,后面过程全都会完蛋…如此一来,就解决了黑客劫持的问题,因为即使黑客劫持后的给浏览器即使返回了证书也无法通过校验,同时浏览器也会提示错误信息。

2024-05-12 13:02:37 875

原创 Playwright

Playwright 是一个用于自动化浏览器操作的开源工具,由 Microsoft 开发和维护。它支持多种浏览器(包括 Chromium、Firefox 和 WebKit)和多种编程语言(如 Python、JavaScript 和 C#),可以用于测试、爬虫、自动化任务等场景。多浏览器支持:支持所有主流浏览器。这使得开发人员可以根据需求选择最适合的浏览器进行自动化操作。(Playwright不支持旧版Microsoft Edge或IE11)

2024-05-08 20:10:26 882

原创 Service 和 Ingress

Yaml 文件案例metadata:labels:app: nginx-svc # service 自己的标签spec:ports:- name: http # service 端口配置的名称protocol: TCP # 端口绑定的协议,支持 TCP、UDP、SCTP,默认为 TCPport: 1080 # service 自己的端口targetPort: 80 # 目标 pod 的端口type: NodePort # 默认是ClusterIP 类型,只能在集群内部使用。

2024-05-08 19:47:50 1359

原创 k8s-pod 控制器

如果实际 Pod 数量比指定的多那就结束掉多余的,如果实际数量比指定的少就新启动一些Pod,当 Pod 失败、被删除或者挂掉后,RC 都会去自动创建新的 Pod 来保证副本数量,所以即使只有一个 Pod,我们也应该使用 RC 来管理我们的 Pod。label 与 selector 配合,可以实现对象的“关联”,“Pod 控制器” 与 Pod 是相关联的 —— “Pod 控制器”依赖于 Pod,可以给 Pod 设置 label,然后给“控制器”设置对应的 selector,这就实现了对象的关联。

2024-04-24 14:02:06 847 2

原创 k8s-Pod

但是需要注意,由于 k8s 默认给 pod 的停止宽限时间为 30s,如果我们停止操作会超过 30s 时,不要光设置 sleep 50,还要将 terminationGracePeriodSeconds: 30 也更新成更长的时间,否则 k8s 最多只会在这个时间的基础上再宽限几秒,不会真正等待 50s。探针是容器内应用的监测机制,根据不同的探针来判断容器应用当前的状态,根据生命周期图可以看出探针目前存在三种类型。可以在根容器上设置Ip地址,其它容器都此Ip(Pod IP),以实现Pod内部的网路通信。

2024-04-11 14:19:35 1088

原创 K8s 命令行工具

默认,是只能在master 节点上使用kubectl 工具,如果想要在 slave 节点上使用,在master 节点上执行下述命令即可。在搭建集群的时候,我们通过yum 下载了kubeadm kubelet kubectl 三个命令行工具,三个工具有着不同的分工。上述介绍,可以看出,三个工具不同的分工,而我们在日常中,需要接触到最多的就是 kubectl 工具。kubectl 工具能够操作资源细分如下, 这里只介绍常用命令,全部命令参考。

2024-04-10 15:30:20 1021

原创 Kubernetes 入门

等功能,相比于其他容器编排工具,如 swarm 、 mesos ,优势在于,能够基于 Google 庞大的生态圈及社区产生的产品。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。Master节点主要负责集群的管理和控制功能,如调度、API服务、存储集群状态等。kubelet:运行在每运行在每个节点上的主要的“节点代理”个节点上的主要的“节点代理”

2024-04-08 10:58:18 918

原创 linux 一些命令[下]

若指定⽤户名称,便会以⾪属该⽤户的第⼀个程序当作基层,然后显示该⽤户的所有程序。ps命令是最基本同时也是⾮常强⼤的进程查看命令,使⽤该命令可以确定有哪些进程正在运⾏和运⾏的状态、进程是否结束、进程有没有僵死、哪些进程占⽤了过多的资源等等,总之⼤部分信息都是可以通过执⾏该命令得到的。init是Linux的进程初始化⼯具,是所有Linux进程的⽗进程,进程ID号是1。pkill命令可以通过进程名终⽌指定的进程,对⽐killall杀死进程可能要执⾏多次,pkill可以杀死进程以及⼦进程。

2024-04-02 14:40:56 460

原创 linux 一些命令[上]

raid 技术,能够提供硬盘的读写效率,已经数据的安全性,但当配置好后,容量的大小,都被限制住了,如果存储的业务非常多,磁盘容量不够用就会出问题,并且raid 的磁盘扩容非常麻烦,并且只能冷扩容。优点:lvm 的文件系统可以跨多个磁盘,分区大小不受磁盘容量限制 可以在系统运行中,直接动态扩容文件系统大小 可以直接增加新的硬盘,到lvm的vg卷组中。硬盘的多个分区,由lvm统一进行管理为卷组,可以弹性的调整卷组的大小,加入新硬盘,可以充分的利用磁盘容量。不同的磁盘分区,相对都是独立的。

2024-03-31 17:59:08 1315

原创 asyncio和 aiohttp

爬虫最重要的模块requests,但它是阻塞式的发起请求,每次请求发起后需阻塞等待其返回响应,不能做其他的事情。本文要介绍的aiohttp可以理解成是和requests对应Python异步网络请求库,它是基于 asyncio 的异步模块,可用于实现异步爬虫,有点就是更快于 requests 的同步爬虫。通过这个案例,可以看到一个问题,那就是 aiohttp的使用,每次都需要写一堆重复代码,并且整个代码结构看起来复杂,作为一个高级开发,必须要会做的就是减少代码重复编写,要将其模块化,封装起来。

2024-03-28 22:48:17 539

原创 Mysql 表设计范式

第一范式(1NF):确保表的每一列都是不可分割的原子项。这通常意味着需要将包含多个数据项的字段拆分为单独的表,并通过关系连接这些表。第二范式(2NF):在第一范式的基础上,确保表中的非主键列完全依赖于主键。如果存在部分依赖,则需要进一步拆分表。第三范式(3NF):在第二范式的基础上,消除表中的传递依赖。这意味着非主键列之间不应该存在依赖关系,而是应该通过主键与其他表关联。通过遵循这些范式,我们可以创建结构清晰、冗余少的数据库表,从而提高数据库的性能和可维护性。

2024-03-17 17:20:03 948

原创 如何优化查询ORM

N+1查询问题是指当你查询一个对象集合时,对于集合中的每个对象,又单独发起了一个数据库查询来获取其关联对象。具体优化策略取决于你的应用、数据库结构和查询模式。如果查询的数据不经常变动,并且查询很频繁,可以考虑使用查询缓存来存储结果。使用数据库的性能监控工具来跟踪和分析查询的性能,找出性能瓶颈并进行优化。确保数据库中用于查询的字段都有适当的索引。使用ORM提供的关联查询方法来减少查询的复杂度。,避免在遍历用户时单独查询每个用户的帖子。来选择所有字段,只选择你真正需要的字段。使用子查询来优化关联查询。

2024-03-17 10:44:22 338

原创 MVC、MVP、MVVM区别

并不是简单的把Controller 替换成了 Presenter, 而是将View 完全独立处理,仅负责视图相关操作,处理请求进来的数据已经返回处理好的数据, 避免在View 有过多的逻辑处理,而Presenter 则专心复杂和 Model 进行数据获取相关逻辑。相对于传统的MVC架构模式,MVVM更加强调View和Model之间的松散耦合,通过ViewModel进行数据绑定和业务逻辑处理,使得开发人员可以更加专注于业务逻辑和数据的开发,而设计人员可以更加专注于页面设计。数据与模型的双向绑定。

2023-11-06 15:09:03 434

原创 python walrus操作符

walrus操作符 作为一个新特性,目前看来,个人感觉用处不算多,虽然能少量减少代码量,但是不建议过度使用,用来尝鲜还不错。它可以在表达式中同时进行赋值和比较操作,可以使代码更加简洁和易读。需要注意的是,Walrus 操作符虽然方便,但是过度使用会导致代码难以理解和维护,因此需要谨慎使用。在 while 循环中,可以使用 Walrus 操作符来避免重复计算。在列表推导式中,可以使用 Walrus 操作符来避免重复计算。在条件表达式中,可以使用 Walrus 操作符来避免重复计算。变量,并在同一行中检查。

2023-10-30 11:35:34 179

原创 dataclasses 包

使用@dataclass装饰器可以将一个普通的类定义为一个数据类。@dataclassname: strage: intcity: str = "New York" # 默认值为 "New York"nameage和city。其中,city属性的默认值为 “New York”。@dataclassname: strage: intorder: int = field(default=0) # 添加一个用于排序的字段# 创建一些实例# 使用自定义排序规则进行排序。

2023-08-31 15:27:49 266

原创 flask-smorest 库

flask-smorest: 基于Flask/Marshmallow的REST API框架flask-smorest 是一个用于创建于数据库无关的REST API的架库。它使用Flask作为Web服务器,并使用marsmallow对数据进行序列化和反序列化。(类似于drf)

2023-08-30 18:00:29 1423

原创 docker swarm 部署服务网络问题

docker swarm 部署服务时可能会出现,启动服务特别慢的情况,甚至一个service 启动后,容器会长时间处于 preparing 状态,直到 状态切换成 running 状态后,才会启动下一个service。然后查询资料发现如果您发现容器在一段时间后仍然停留在Preparing状态,可能是由于多种因素导致的。

2023-08-23 10:21:18 1452

原创 WSL 2 环境配置

安装在 C 盘安装比较简单,直接在 Windows 应用商店 下载 Ubuntu 20.04 安装即可。或者在powershell 里面执行命令下载。会比较慢(下面命令可以选择在D盘安装时使用)

2023-07-26 14:30:01 376

原创 python 属性访问器 (property)

在上面的代码中,我们使用了装饰器的方式来创建属性访问器。@property装饰器实际上是getter方法的快捷方式,在类定义中定义一个属性方法,并将其装饰为@property,这样就可以像访问普通属性一样访问该方法,相当于使用了属性访问器,可读性更好。装饰器实际上是setter方法的快捷方式,用于为属性方法添加一个 setter 方法,并返回属性本身。装饰器实际上是deleter方法的快捷方式,用于为属性方法添加一个 deleter 方法,并返回属性本身。使用property()

2023-06-09 22:03:11 672 1

原创 PyMuPDF 库使用

能够用来对PDF文档进行操作的Python包有好几个,如用于提取内容的PdfPlumber、PDFMiner,可以用来对PDF文件进行修改操作的PyPDF2等等,如果只是需要简单地对PDF文件实现合并、拆分、书签操作,使用PyPDF2就足以满足。但如果想对PDF文件进行一些底层操作,基本上只有PyMuPDF了。

2023-05-24 18:13:09 679

原创 docker 常用命令

1. Docker Compose YML文件:用于定义和运行多个Docker容器的配置文件,支持通过docker-compose命令一键启动、停止、重启、删除应用,可以通过多种方式定义容器之间的关系和依赖,例如:link、volumes、ports、environment等。\2. Docker Swarm YML文件:用于定义和管理Docker集群中的服务、任务和网络的配置文件,支持通过docker stack命令部署、更新、扩容和缩容服务,可以指定服务副本数量、资源限制、镜像地址、环境变量等。

2023-05-21 11:43:26 1208

原创 docker swarm 命令与参数解析

命令用于部署 Docker Stack,该命令需要在 Swarm mode 下运行。它允许用户使用 Compose 文件定义多个服务,以便在 Swarm 集群中进行分布式部署。命令将这些服务一次性部署到 Swarm 集群中,Docker 引擎会自动创建并管理相应的服务和任务。

2023-04-06 15:57:00 612

原创 Docker Swarm介绍及使用入门

Docker Swarm是管理跨节点容器的编排工具,相较于Docker Compose而言,Compose只能编排单节点上的容器,Swarm将一群Docker节点虚拟化为一个主机,使得用户只要在单一主机上操作就能完成对整个容器集群的管理工作。如果下载的1.12.x版本之后Docker,那么Swarm就已经被包含在内了,无需再安装。

2023-03-26 12:58:19 460

原创 Docker网络互联原理及自定义网络的使用

Docker默认在安装好的时候就会自动创建三个网络,我们可以使用看到如下的三个网络信息。none,指没有网络,如果容器启动的时候指定使用这个网络,那么就代表这是一个隔离的容器,不与外界进行交互。host,指公用宿主机host的网络资源,容器的网络配置将和宿主机host一模一样,优点就是传输效率高,缺点就是容易和host造成端口冲突。

2023-03-26 12:40:55 296

原创 使用 flask-migrate 遇到问题

相比之下我们修改之后的代码,app.py根本不知道有 model.py 的存在,更不知道里面有 db.Model 类。在实际项目中,app.py不会再生命db 之后就结束,而是会register各种blueprint,而在import blueprint 的过程中都会间接执行 import model (实际上是 model class 的初始化), 所以不会遇到这种问题。所有如果下次遇到model的创建或变更没有被flask db migrate 感知到,检查一下那个model 的 import 路径。

2023-03-12 21:03:35 383

原创 Flask框架的请求生命周期

这也是一般公司常用的flask 框架架构,会在视图层和模型层中间抽离出来一层业务逻辑层,专门用来处理业务逻辑。Flask restful 请求生命周期图。Flask 框架请求生命周期图。

2023-03-12 16:29:22 867

原创 python 魔法方法

str函数或者print函数调用的是obj.__ str__ ()repr函数或者交互式解释器调用的是obj.__ repr__()注意:如果__ str__ 没有被定义,那么就会使用 __ repr__ 来代替输出。__ str__ 和 __ repr__ 方法的返回值都必须是字符串。

2023-03-02 09:53:01 152

原创 Pycharm和跳板机 连接内网服务器

本地配置.ssh 文件夹下配置 config 文件配置跳板机.ssh 文件夹下配置 config 文件测试​ 上述配置好了,可以通过 ssh server(上面服务器配置的 Host 参数) 命令测试,能连接进去就成功了。

2023-02-28 14:03:58 1146 3

原创 Marshmallow 库

marshmallow是一个用来将复杂的orm对象与python原生数据类型之间相互转换的库,简而言之,就是实现object -> dict, objects -> list, string -> dict 和 string -> list。序列化:序列化的意思是将数据对象转化为可存储或可传输的数据类型 反序列化:将可存储或可传输的数据类型转化为数据对象demo"name" , "age" }) 参数可以 在实例化 sechema 对象时配置,也可以在使用序列化 / 反序列化时 传入参数名。

2023-02-27 15:43:52 459

原创 SQLAlchemy

SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。Engine,框架的引擎Connection Pooling ,数据库连接池Dialect,选择连接数据库的DB API种类Schema / Types,架构和类型SQL Exprression Language,SQL表达式语言。

2023-02-26 18:46:08 669

原创 typing库

在日常代码编写中,由于python语言特性,不用像go等编译性语言一样,在定义函数时就规范参数和放回值的类型。但是,有时候函数接受的参数是列表,里面数据需要全是float类型,这个时候该咋办呢?因此官方推出了typing库,typing 库是python 提供用来类型标注支持的工具库。可以用来规范开发过程中的规范,可被用于第三方工具,比如类型检查器、集成开发环境、静态检查器等。Python 在运行时并不强制标注函数和变量类型。

2023-02-25 16:21:50 1536 1

原创 python 魔法方法之 __ slots __

当你事先知道class的attributes的时候,建议使用slots来节省memory以及获得更快的attribute access。是python class的一个特殊attribute,能够节省内存空间。正常情况下,一个类的属性是以字典的形式来管理, 每个类都会有。来将类的属性构造成一个静态的数据结构来管理,里面存储的是 value references。的原因,可以使用装饰器以及反射的方式来实现属性控制。节约内存,又实现新属性的定义。的一个属性,实现既能通过定义。之外的新属性作为使用。

2023-02-24 20:20:43 560

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除