运营和管理→执行策略和运行时限制
执行策略和运行时限制
1)任命
Runtime策略使服务行为可预测,安全且经济:限制"嘈杂的邻居",防止泄漏和过热,在负载增加时提供SLO的合规性和保留性。
关键目标:隔离,公平分配资源,受控退化,可重复性,审计。
2)覆盖范围
计算和内存:CPU,RAM,GC暂停,线程限制。
驱动器/存储:IOPS/throughput,配额,fs策略(只读)。
Сеть: egress/ingress, bandwidth shaping, network policies.
进程/系统调用: seccomp, capabilities, ulimit.
编排:Kubernetes QoS,requests/limits,优先级,taints/affinity。
API/网关: rate-limits,配额,taymouts/retrais,电路断路器。
数据/ETL/流: batch/stream concurrency, consumer lag budgets。
安全性:AppArmor/SELinux, rootless,秘密/咖啡机。
Policy-as-Code: OPA/Gatekeeper, Kyverno, Conftest.
3)基本原则
缺省失败安全:丢弃多余的请求比丢弃请求更好。
Budget-driven: taymouts/retrai符合请求时间预算和SLO错误预算。
Small blast radius:隔离在namespace/pool/notle/shard上。
Declarative&auditable:所有限制都在代码/存储库+更改日志中。
Multi-tenant fairness:没有租户/团队可以"吸入"整个集群。
4)计算和内存
4.1 Kubernetes и cgroup v2
要求/限制:要求保证CPU/内存份额;极限包括throttling/OOM杀手。
QoS类:Guaranteed/Burstable/BestEffort-关键的worcloads保持在Guaranteed/Burstable中。
CPU: `cpu.shares`, `cpu.max' (throttle), CPuset用于固定。
内存:"内存。max`, `memory.swap.max'(通常是掉期),oom_score_adj优先级。
4.2种模式
Headroom在节点上为20-30%,用于复制。
GC限制: JVM '-Xmx' <8s内存限制;Go: `GOMEMLIMIT`;Node: `--max-old-space-size`.
ulimit: "nofile"、"nproc"、"fsize"-在服务配置文件中。
5)磁盘和存储
IOPS/Throughput PVC/群集存储配额;日志/数据分离。
仅读取根FS,tmpfs用于临时文件,大小限制"/tmp"。
FS-watchdog:填充卷和inode生长的差异。
6)网络和流量
NetworkPolicy (ingress/egress) — zero-trust east-west.
Bandwidth极限:tc/egress-policies,QoS/DSCP用于关键线程。
Egress控制器:允许的域/子网列表,DNS审核。
mTLS+TLS政策:加密和协议强制版本。
7)流程安全
Seccomp (allowlist syscalls)、AppArmor/SELinux配置文件。
Drop Linux capabilities(保留最低限度),"runAsNonRoot","readOnlyRootFilesystem"。
Rootless容器,签名的图像和态度。
仅通过Vault/KMS进行秘密,tmp-tokens具有短TTL。
8)时间政策: taymauts,retrai,预算
时间预算:所有流行歌曲的总和≤ SLA和tu-end。
带有backoff+Jitter的转发,按错误类别最多尝试一次。
电路断路器:在高于阈值的error%/timeout p95上打开→快速故障。
Bulkheads:关键路径的单独连接池/队列。
Backpressure:通过大量消费者限制生产者。
9)限额、配额和优先级
算法:token/leaky bucket,GCRA;本地+分布式(Redis/Envoy/global)。
粒度:API键/用户/组织/区域/端点。
优先级梯度:"支付/授权"流-黄金,分析-青铜。
每天/月配额,"burst"和"sustained"限制;429 + Retry-After.
10)编排和规划师
PriorityClass:保护P1脚踏板免于置换。
PodDisruptionBudget:更新时的市区边界。
Taints/Tolerations, (anti) Affinity-工作负载隔离。
RuntimeClass: gVisor/Firecracker/Wasm用于沙盒。
Horizontal/垂直自动缓解,带有gward阈值和max-replicas。
11) 数据策略/ETL/流
Concurrency per job/topic, max batch size, checkpoint间隔。
Consumer lag budgets: warning/critical;DLQ和转发限制。
Freshness SLA用于店面,在散装交通高峰时暂停沉重的乔布斯。
12) Policy-as-Code和管理控制
OPA Gatekeeper/Kyverno:禁止在没有"readOnlyRootFilesystem"的情况下使用"hostNetwork",":最新"。
用于预发布Helm/K8s/Terraform检查的Conftest。
Mutation policies:自动收取sidecar (mTLS)、注释、seccompProfile。
yaml apiVersion: kyverno. io/v1 kind: ClusterPolicy metadata:
name: require-resources spec:
validationFailureAction: Enforce rules:
- name: check-limits match:
resources:
kinds: ["Pod"]
validate:
message: "We need resources. requests/limits for CPU and memory"
pattern:
spec:
containers:
- resources:
requests:
cpu: "?"
memory: "?"
limits:
cpu: "?"
memory: "?"
OPA示例(Rego)-800毫秒≤时间表:
rego package policy. timeout
deny[msg] {
input. kind == "ServiceConfig"
input. timeout_ms> 800 msg: = sprintf ("timeout% dms exceeds budget 800ms," [input. timeout_ms])
}
13)可观察性和合规性指标
Compliance%:具有正确请求/限制/标签的pod的比例。
Security Posture: seccomp/AppArmor/rootless的份额。
Rate-limit hit%, shed%, throttle%, 429 share.
p95 taymauts/retrais,巡回开放时间。
OOM kills/evictions, CPU throttle seconds.
Network egress denied events, egress allowlist misses.
14)支票单
在发布服务之前
- requests/limits;QoS ≥ Burstable
- Taymauts和retrai适合端到端SLA
- Circuit-breaker/bulkhead包含在外部依赖项中
[] NetworkPolicy (ingress/egress) и mTLS
[] Seccomp/AppArmor, drop capabilities, non-root, read-only FS
- Rate-limits和API网关/服务配额
- PDB/priority/affinity设置;autoscaling配置为
每月一次
- 策略异常审计(TTL)
- 修订时间/错误预算
- 退化测试(fire-drill): shed/backpressure/circuit-breaker
- 保密/证书轮换
15)反模式
没有requests/limits:"burst"吃邻居→级联故障。
没有挤压的全球撤退:成瘾的风暴。
无限的taymauts:"悬挂"的连接和池的耗尽。
':latest'和mutable标签:不可预测的运行时构建。
Open egress:泄漏和无管理的依赖。
缺少PDB:更新将"淘汰"整个池。
16)迷你花花公子
A. payments-Service的CPU throttle%激增
1.检查limits/requests并分析热路。
2.暂时提出要求,在p95 latency上打开自动标记。
3.启用限制/课程的缓存后退,降低查询的复杂性。
4.后小说:非规范化/索引,极限修订。
B.增长429和API投诉
1.按键/组织报告→谁在配额中落后。
2.引入hierarchical quotas(per- org→per -key),提高金色的burst。
3.背靠背的沟通和指导;启用自适应限制。
V.大规模OOM杀手
1.减少串联,启用重播限制和分析。
2.将Xmx/GOMEMLIMIT重新计算为真实的峰值。
3.重新培训GC/池,添加交换和软限位。
17)配置示例
K8s具有安全设置的容器(片段):yaml securityContext:
runAsNonRoot: true allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities:
drop: ["ALL"]
Envoy rate-limit(概念上的片段):
yaml rate_limit_policy:
actions:
- request_headers:
header_name: "x-api-key"
descriptor_key: "api_key"
Nginx ingress-定时和限制:
yaml nginx. ingress. kubernetes. io/proxy-connect-timeout: "2s"
nginx. ingress. kubernetes. io/proxy-read-timeout: "1s"
nginx. ingress. kubernetes. io/limit-rps: "50"
18)与变更和事件管理集成
任何放松政策-通过RFC/CAB和TTL暂时排除。
违反政策的事件→防暴警察和规则更新。
合规行列(compliance)已连接到发布日历。
19)结果
执行政策是平台的"栏杆":它们不会干扰快速行驶,不会让跌倒。声明性限制,自动胁迫,良好的指标和例外纪律将混乱的剥削转变为可管理和可预测的系统-具有可控的成本和可持续的SLO。