DRF
DRFDRF(Django Rest Framework)是可以快速基于Restful开发的Django应用的插件,功能非常多。
安装pip install djangorestframework
Django需要2.2
注册settings.py中增加
INSTALLED_APPS = [
...
'rest_framework',
]
注册他,可以使用它提供的网页。也可以不注册,使用PostMan调试
序列化器采用前后端分离后,前端与后端交互实际上使用的只是JSON数据
序列化:后端查数据库获得模型类,发给前端的数据就是JSON字符串,核心就是如何把实例序列化成JSON发给浏览器
实例转换为字典,如何做,使用序列化器
字典转换为JSON字符串,使用json模块的dumps
反序列化:前端浏览器发请求报文到 后端,封装为request请求对象,提交的数据是JSON字符串,需要反序列化
JSON字符串转换为字典谁来做? json.loads
字典=>?
序列化器类DRF中序列化器的作用
将实例序列化为字典
反序列化后得到字典,交给序列化器进 ...
DRF视图
DRF视图请求参数利用HTTP请求报文传递参数有3种方式
查询字符串,GET方法,参数在URL中,http://127.0.0.1:8000/emp/?x=123x=abc
表单,前端网页中填写表单,一般使用POST方法,参数在body中
POST /xxx/yyy?id=5&name=magedu HTTP/1.1
HOST: 127.0.0.1:9999
content-length: 26
content-type: application/x-www-form-urlencoded
age=5&weight=80&height=170
也可以POST、PUT提交JSON格式数据3. URL本身就是数据的表达,http://127.0.0.1:8080/python/2010/u101
请求方法method表示CRUD
也可以使用查询字符串,例如分页?page=5
也可以提交数据
Django视图原理:Django的视图都从View类开始,View.as_view()方法本质:
URL映射当中需要路径映射到视图函数,在as_view()方 ...
分析ExitCode定位Pod异常退出原因
使用kubectl describe pod <pod name>查看异常 pod 的状态:
Containers :
kubedns :
Container ID :
docker ://5fb8adf9ee62afc6d3f6f3d9590041818750b392dff015d7091eaaf99cf1c945
Image: ccr.ccs.tencentyun.com/library/kubedns-amd64:1.14.4
Image ID: docker-pullable://ccr.ccs.tencentyun.com/library/kubedns- amd64@sha256:40790881bbe9ef4ae4ff7fe8b892498eecb7fe6dcc22661402f271e03f7de344
Ports: 10053/UDP, 10053/TCP, 10055/TCP
...
容器进程退出原因
容器进程如果是自己主动退出(不是被外界中断杀死), 退出状态码一般在 0-128 之间, 根据约定, 正 常退出时状态码为 0, 1-127 说明是程序发生异常, 主动退出了, 比如检测到启动的参数和条件不满 足要求, 或者运行过程中发生 panic 但没有捕获处理导致程序退出。 除了可能是业务程序 BUG, 还 有其它许多可能原因
DNS 无法解析可能程序依赖 集群 DNS 服务, 比如启动时连接数据库, 数据库使用 service 名称或外部域名都需 要 DNS 解析, 如果解析失败程序将报错并主动退出。 解析失败的可能原因:
集群网络有问题, Pod 连不上集群 DNS 服务
集群 DNS 服务挂了, 无法响应解析请求
Service 或域名地址配置有误, 本身是无法解析的地址
程序配置有误
配置文件格式错误, 程序启动解析配置失败报错退出
配置内容不符合规范, 比如配置中某个字段是必选但没有填写, 配置校验不通过, 程序报错主动退出
K8S权限管理及生产使用
K8S权限管理一、RBAC的架构与核心组件1.1 RBAC的授权流程当用户或服务账户发起API请求时,RBAC的授权流程如下:
身份认证(Authentication):通过证书、Token或外部IdP(如OIDC)验证请求者身份。
授权决策(Authorization):
API Server提取请求的操作(Verb)、资源类型(Resource)和命名空间(Namespace)
遍历所有与主题关联的RoleBinding和ClusterRoleBinding,检查是否存在匹配的权限规则。
准入控制(Admission Control):执行后续校验(如资源配额、Pod安全策略)
2.2 RBAC 的四层模型RBAC 通过四类 API 对象实现权限控制:
角色(Role 和 ClusterRole):
Role:定义命名空间内的资源操作权限(如 Pod 的读写)。
ClusterRole:定义集群级资源(如 Node、PersistentVolume)或跨命名空间的聚合权限。
绑定(RoleBinding 和 ClusterRoleBinding):
RoleBindi ...
K8S资源限制及服务保障
K8S资源限制一、ResourceQuota核心作用1.1 资源公平性保障在k8s集群中,多个团队或者项目可能共享同一个集群。如果没有资源限制,某个团队可能因误配置或恶意行为占用大量资源(如CPU、内存、存储)导致其他应用无法正常运行。ResourceQuota通过为每个命名空间设置资源上限,确保资源分配的公平性。
1.2 成本控制在云环境中,资源使用直接关联费用。ResourceQuota可限制命名空间的资源消耗,避免因资源滥用导致成本超支。
1.3 防止资源枯竭Kubernetes 节点资源有限,ResourceQuota 可防止以下问题:
节点资源耗尽:例如,某命名空间创建大量 Pod,占用所有节点的 CPU 或内存。
存储资源耗尽:例如,某应用创建过多持久卷(PVC),耗尽存储后端容量。
对象数量爆炸:例如,某服务生成大量 ConfigMap 或 Secret,影响 API Server 性能。
1.4 多租户支持在 SaaS 或 PaaS 平台中,ResourceQuota 可为不同租户分配独立资源池,实现逻辑隔离。
二、ResourceQuota支持的资源类型Resou ...
kubernetes 磁盘爆满故障处理
一、什么情况下磁盘可能会爆满 ?kubelet 有 gc 和驱逐机制,通过 --image-gc-high-threshold,--image-gc-low- threshold,--eviction-hard,--eviction-soft,--eviction-minimum-reclaim 等参数控制 kubelet 的 gc 和驱逐策略来释放磁盘空间,如果配置正确的情况下,磁盘一般不会爆满。
通常导致爆满的原因可能是配置不正确或者节点上有其它非 K8S 管理的进程在不断写数据到磁盘占用 大量空间导致磁盘爆满。
二、磁盘爆满会有什么影响 ?影响 K8S 运行我们主要关注 kubelet 和容器运行时这两个最关键的组件,它们所使用的目录通常不 一样,kubelet 一般不会单独挂盘,直接使用系统磁盘,因为通常占用空间不会很大,容器运行时单 独挂盘的场景比较多,当磁盘爆满的时候我们也要看 kubelet 和 容器运行时使用的目录是否在这个 磁盘,通过 df 命令可以查看磁盘挂载点。
容器运行时使用的目录所在磁盘爆满
如果容器运行时使用的目录所在磁盘空间爆满,可能会造成容 ...
Ingress使用及生产案例
ingress一、ingress架构Ingress Controller nginx,k8s官方维护的
生产级架构图
1. 外部接入层(Internet/DMZ)
功能:接收来自互联网的HTTP/HTTPS请求,提供安全隔离(DMZ区)。
关键组件:
企业级负载均衡设备:如F5、LVS、HAProxy等[1][2],用于SSL终止和请求分发。
端口暴露:开放80(HTTP)和443(HTTPS)端口,作为入口端口。
2. 负载均衡层(高可用设计)
高可用机制:
多实例负载均衡:部署多个Nginx或HAProxy实例,通过健康检查实现流量动态分配。
流量分发逻辑:
将请求均匀分发至后端的Ingress Controller实例(Gateway Node)。
3. Ingress控制层(Kubernetes节点)
部署方式:
HostNetwork模式:Ingress Controller Pod直接绑定宿主机网络,跳过Kubernetes Service(如NodePort),降低性能损耗。
多节点部署:通过Deployment部署多个Control ...
污点及容忍生产案例
污点、容忍
污点设计理念:Taint在一类服务器上打上污点,如果pod没有配置可以容忍这个污点,就不能部署在打了污点的服务器上面。Toleration是让Pod容忍节点上配置的污点,可以让一些需要特殊配置的Pod能够调用到具有污点和特殊配置的节点上。
https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
创建污点(一个节点可以有多个污点)
kubectl taint node k8s-node01 ssd=true:NoSchedule
污点类型有三种:
NoExecute:禁止调度到该节点,如果不符合这个污点,会立马将该节点的pod驱逐(或在一段时间后)
NoSchedule:禁止调度到该节点,不会驱逐已有pod
PerferNoSchedule:尽量避免将pod调度到该节点,如果没有更合适的节点,可以部署到该节点
查看一个节点的污点:
root@VM-26-198-ubuntu:~# kubectl describe nodes 10.122.26.198 |grep -A ...
节点、Pod亲和生产案例
节点亲和、pod亲和污点和容忍可以实现简单的调度,但有些问题还是无法处理
pod和节点之间的关系:
某些Pod优先选择有ssd=true标签的节点,如果没有在考虑部署到其它节点;
某些Pod需要部署在ssd=true和type=physical的节点上,但是优先部署在ssd=true的节点上;
pod和pod之间的关系:
同一个应用的Pod不同的副本或者同一个项目的应用尽量或必须不部署在同一个节点或者符合某个标签的一类节点上或者不同的域;
相互依赖的两个Pod尽量或必须部署在同一个节点上或者同一个域内。
Affinity 亲和力:
NodeAffinity:节点亲和力/反亲和力
PodAffinity:pod亲和力
PodAntiAffinity:Pod反亲和力
节点亲和配置apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: test
spec:
replicas: 2
selector:
mat ...