운영 및 → 실행 정책 및 런타임 제한
실행 정책 및 런타임 제한
1) 목적
런타임 정책은 서비스 행동을 예측 가능하고 안전하며 경제적으로 만듭니다. "잡음 이웃" 을 제한하고 누출 및 과열을 방지하며 부하가 증가 할 때 SLO의 준수 및 유지를 보장합니다.
주요 목표: 격리, 공정한 자원 할당, 통제 된 저하, 재현성, 감사.
2) 범위
컴퓨팅 및 메모리: CPU, RAM, GC 일시 정지, 스레드 제한.
디스크/스토리지: IOPS/처리량, 할당량, f- 정책 (읽기 전용).
확인: 탈출/진입, 대역폭 성형, 네트워크 정책.
프로세스/시스템 호출: seccomp, 기능, ulimited.
오케스트레이션: Kubernetes QoS, 요청/제한, 우선 순위, 인수/친화력.
API/게이트웨이: 속도 제한, 할당량, 타임 아웃/배상, 회로 차단기.
데이터/ETL/스트림: 배치/스트림 동시성, 소비자 지연 예산.
보안: AppArmor/SELinux, 뿌리가없는 비밀/kofigi.
코드 정책: OPA/게이트 키퍼, Kyverno, Conftest.
3) 기본 원칙
기본적으로 실패: 드롭보다 불필요한 요청을 삭제하는 것이 좋습니다.
예산 중심: 타임 아웃/배상은 요청 시간 예산 및 SLO 오류 예산에 적합합니다.
작은 폭발 반경: 네임 스페이스/풀/호스트/샤드 격리.
선언 및 감사 가능: 코드/저장소 + 변경 로그의 모든 제한 사항.
다중 임차인의 공정성: 임차인/팀은 전체 클러스터를 "빨리" 낼 수 없습니다.
4) 컴퓨팅 및 메모리
4. 1 Kubernetes 술집 v2
요청/제한: 요청은 CPU/메모리의 공유를 보장합니다. 한계에는 스로틀 링/OOM 킬러가 포함됩니다.
QoS 클래스: Guaranteed/Burstable/BestEffort-보장/Burstable에서 중요한 워크 플로우를 유지하십시오.
CPU: 'cpu. 주식 ',' cpu. 최대 '(스로틀), 피닝 용 CPuset.
메모리: '메모리. 최대 ',' 메모리. 교환. (PHP 3 = 3.0.6, PHP 4)
4. 2 개의 패턴
노드의 헤드 룸 20-30%, 중복에 대한 친 화성 방지.
GC 한계: JVM '-Xmx' <k8s 메모리 한계; 이동: 'GOMEMLIMIT'; 노드: '-최대 공간 크기'.
ulimite: 서비스 프로파일별로 'nofile', 'nproc', 'fsize'
5) 디스크 및 스토리지
PVC/클러스터 스토리지의 IOPS/처리량 할당량; 로그/데이터 분리.
읽기 전용 루트 FS, 임시 파일의 경우 tmpfs, 크기 제한 '/tmp '.
FS 워치 독: 볼륨 충전 및 이노드 성장 경고.
6) 네트워크 및 트래픽
NetworkPolicy (intress/egress) -동서 신뢰 없음.
대역폭 제한: 중요한 흐름을위한 tc/출구 정책, QoS/DSCP.
탈출 컨트롤러: 허용되는 도메인/서브 넷 목록, 감사 DNS.
mSL + SL 정책-암호화 및 강제 프로토콜 버전.
7) 프로세스 안전
Seccomp (허용리스트 자체 호출), AppArmor/SELinux 프로필.
Linux 기능을 드롭 (최소로 남김), 'runAsNonRoot', 'readOnlyRootFilesystem'.
뿌리가없는 용기, 서명 된 이미지 및 증명.
Vault/KMS를 통한 비밀 전용, 짧은 TTL이있는 tmp 토큰.
8) 시간 정책: 타임 아웃, 휴식, 예산
시간 초과 예산: 모든 홉의 합계 SLA 엔드 투 엔드.
백오프 + 지터가있는 Retrai, 오류 클래스의 최대 시도.
회로 차단기: 임계 값보다 높은 오류 %/타임 아웃 p95로 열립니다. → 빠른 실패.
벌크 헤드: 중요한 경로를위한 별도의 연결 풀/대기열.
역압: 생산자가 소비자를 늦추도록 제한합니다.
9) 요율 제한, 할당량 및 우선 순위
알고리즘: 토큰/누출 버킷, GCRA; 로컬 + 배포 (Redis/Envoy/global).
세분성: API 키/사용자/조직/지역/엔드 포인트.
우선 순위 그라디언트: "지불/승인" 흐름-금, 분석-청동.
하루/월 쿼타, "버스트" 및 "지속적인" 한계; 429 + 시작 후.
10) 오케스트레이션 및 플래너
PriorityClass: P1 포드를 변위로부터 보호합니다.
PodDisruptionBudget: 업데이트시 다운 타임 제한.
Tains/Tolerations, (anti) Affinity-격리 작업량.
런타임 클래스: 샌드 박스 용 gVisor/Firecracker/Wasm.
가드 임계 값 및 최대 복제본으로 수평/수직 오토 스케일.
11) 데이터/ETL/스트림 정책
작업/주제 당 동시성, 최대 배치 크기, 체크 포인트 간격.
소비자 지연 예산: 경고/중요; DLQ 및 리트레이 제한.
상점을위한 신선도 SLA, 교통량이 많은 봉우리에서 무거운 일자리가 멈춤.
12) 코드 정책 및 입학 통제
OPA 게이트 키퍼/Kyverno: 요청/제한이없는 포드, 'readOnlyRootFilesystem', 'hostNetwork', ': latest'.
사전 커밋 Helm/K8/Terraform 검사에 대해 확인하십시오.
돌연변이 정책: 자동 추가 사이드카 (mSL), 주석, 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) 의 예-타임 아웃
rego package policy. timeout
deny[msg] {
input. kind == "ServiceConfig"
input. timeout_ms> 800 msg: = sprintf ("timeout% dms exceeds budget 800ms," [input. timeout_ms])
}
13) 관찰 가능성 및 규정 준수 지표
준수%: 올바른 요청/제한/라벨이있는 포드 백분율.
보안 자세: seccomp/AppArmor/rootless와 포드 공유.
금리 제한 히트%,% 하락, 스로틀%, 429 점유.
p95 타임 아웃/복귀, 회로 개방 지속 시간.
OOM은/퇴거, CPU 스로틀 초를 죽입니다.
네트워크 탈출 거부 이벤트, 탈퇴 허가자 누락.
14) 점검표
서비스를 배치하기 전에
- 요청/제한이 작성됩니다. QoS 소 버스 테이블
- 엔드 투 엔드 SLA에 적합한 타임 아웃 및 리트레이
- 외부 종속성에 활성화 된 회로 차단기/격벽
- NetworkPolicy (intress/egress) mTLS
- Seccomp/AppArmor, 드롭 기능, 비 루트, 읽기 전용 FS
- API 게이트웨이/서비스의 요율 제한 및 할당량
- PDB/우선 순위/친화력이 지정되었습니다. 오토 스케일링이 구성됩니다
월간
- 감사 정책 예외 (TTL)
- 검토 시간/오류 예산
- 소방 테스트: 창고/역압/회로 차단기
- 회전 비밀/인증서
15) 반 패턴
요청/제한없이: "버스트" 는 이웃 → 계단식 충돌을 먹습니다.
지터없이 글로벌 퇴각: 중독의 폭풍.
무한한 타임 아웃: "매달린" 연결 및 수영장 고갈.
': 최신' 및 변경 가능한 태그: 예측할 수없는 런타임 빌드.
열린 탈출: 누출 및 관리되지 않는 종속성.
PDB 없음: 업데이트로 전체 풀이 녹아웃됩니다.
16) 미니 플레이 북
결제 서비스에서 A. CPU 스로틀%
1. 한계/요청을 확인하고 뜨거운 경로를 프로파일
2. 일시적으로 요청을 제기하고 p95 대기 시간으로 자동 스케일을 켜십시오.
3. 현금 환급을 활성화하고 쿼리의 복잡성을 줄입니다.
4. 수정 후: 비정규화/지수, 제한 수정.
B. 429 성장 및 API 불만
1. 키/조직에 대한보고 → 할당량에 도달했습니다.
2. 계층 적 할당량 (키당 per- org →) 을 입력하고 금에 대한 버스트를 올립니다.
3. 백오프에 대한 커뮤니케이션 및 지침; 적응 제한을 가능하게합니다.
B. Mass OOM 사망
1. 동시성을 줄이고 더미 제한과 프로파일 링을 활성화하십시오.
2. 실제 피크 사용을 위해 Xmx/GOMEMLIMIT를 다시 계산하십시오.
3. GC/풀을 재교육하고 교체 및 소프트 제한 경고를 추가하십시오.
17) 설정 예
보안 설정 (조각) 이있는 K8 컨테이너:yaml securityContext:
runAsNonRoot: true allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities:
drop: ["ALL"]
특허 속도 제한 (개념적으로 조각):
yaml rate_limit_policy:
actions:
- request_headers:
header_name: "x-api-key"
descriptor_key: "api_key"
Nginx 수입-타임 아웃 및 제한 사항:
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을 제외한 임시 예외입니다.
정책 위반 사건 → 사후 및 규칙 업데이트.
준수 대시 보드는 릴리스 캘린더에 연결됩니다.
19) 결론
실행 정책은 플랫폼의 "난간" 입니다. 빠른 운전을 방해하지 않고 낙상을 허용하지 않습니다. 선언적인 제약, 자동 시행, 우수한 지표 및 예외 규율은 혼란스러운 착취를 통제 된 비용과 지속 가능한 SLO를 통해 관리 가능하고 예측 가능한 시스템으로 바꿉니다.