Files
cs-note/hhs/MS/05-部署运维/02-Kubernetes.md
T

142 lines
5.8 KiB
Markdown
Raw Normal View History

2026-05-24 11:42:38 +08:00
---
tags: [microservice, kubernetes, k8s, container-orchestration]
create time: 2026-05-05 18:30
---
# Kubernetes — 参考手册
## 概述
Kubernetes (K8s) 是微服务架构的事实标准编排引擎。它将容器化的服务组织成声明式的资源对象,自动处理部署、扩展、故障恢复。
本文档是总入口:顶层概念、决策矩阵、速查表见本页;详细教程和实操指南在子文档中。
```mermaid
graph TB
subgraph CLUSTER["K8s Cluster"]
Master["控制面<br/>API Server / Scheduler / Controller Manager / etcd"]
subgraph NODES["工作节点"]
N1["Node A<br/>kubelet + kube-proxy"]
N2["Node B<br/>kubelet + kube-proxy"]
end
Master --> N1
Master --> N2
subgraph APPS["应用层"]
Order["Order Service Deployment"]
Pay["Payment Service Deployment"]
end
N1 --> Order
N2 --> Order
N1 --> Pay
N2 --> Pay
end
SVC["Service (ClusterIP)"] -->|Load Balance| Order
Ingress["Ingress (HTTP Routing)"] --> SVC
style Master fill:#e3f2fd
style N1 fill:#fff3e0
style N2 fill:#fff3e0
```
## 快速导航
| 主题 | 定位 | 文档 |
|------|------|------|
| 核心概念与 Deployment | **教程**:Pod/Deployment/Probe、滚动更新 | [[02-Kubernetes/01-核心概念与Deployment]] |
| 配置管理 | **操作手册**:ConfigMap/Secret 注入、热更新 | [[02-Kubernetes/02-配置管理]] |
| 网络与服务发现 | **教程**:Service 类型、Ingress、Headless | [[02-Kubernetes/03-网络与服务发现]] |
| 扩缩容与有状态应用 | **教程**:HPA / VPA / StatefulSet | [[02-Kubernetes/04-扩缩容与有状态应用]] |
| 调度控制 | **进阶**:Affinity/Taint/TopologySpread | [[02-Kubernetes/05-调度控制]] |
| 资源与安全管控 | **安全**:Quota/LimitRange/NetworkPolicy | [[02-Kubernetes/06-资源与安全管控]] |
| 运维排查 | **速查**:上线清单、诊断命令、FAQ | [[02-Kubernetes/07-运维排查]] |
## 核心概念速查
| K8s 对象 | 用途 | 类比 |
|---------|------|------|
| **Pod** | 最小部署单元,包含一个或多个容器 | 应用实例 |
| **Deployment** | 管理 Pod 的副本数和滚动更新 | 应用的"模板" |
| **Service** | 稳定的网络入口,负载均衡 | 内部 VIP → [[02-Kubernetes/03-网络与服务发现]] |
| **Ingress** | HTTP/HTTPS 路由规则 | 外部网关 → [[02-Kubernetes/03-网络与服务发现]] |
| **ConfigMap** | 配置注入(明文) → [[02-Kubernetes/02-配置管理]] |
| **Secret** | 敏感配置注入(base64)→ [[02-Kubernetes/02-配置管理]] |
| **HPA** | 根据指标自动扩缩容 → [[02-Kubernetes/04-扩缩容与有状态应用]] |
| **StatefulSet** | 有状态应用的有序管理 | DB、ZK → [[02-Kubernetes/04-扩缩容与有状态应用]] |
## 部署驱动模式对比
| 维度 | 传统 CI/CD (Push) | GitOps (Pull) |
|------|------------------|---------------|
| 部署驱动 | CI 服务器主动推送 | Git 仓库变动触发拉取 |
| 状态源 | CI pipeline 历史 | Git commit history |
| 漂移检测 | 通常无 | 持续比对,自动修复 |
| 安全边界 | CI 需直连 K8s | ArgoCD 集群内运行 |
| 回滚方式 | 回到上一次的 pipeline | `git revert` + 自动同步 |
| 代表工具 | Jenkins, GitHub Actions | ArgoCD, Flux |
> **选型建议**:团队规模 < 20 人时 Push 模式足够。≥ 50 人或多环境场景建议迁移到 GitOps → [[../03-CICD与GitOps]]
## Secret 管理方案对比
| 方案 | 适用场景 | 优点 | 缺点 |
|------|---------|------|------|
| K8s 原生 Secret | 小规模内部团队 | 零成本,开箱即用 | etcd 明文存储 |
| ESO (External Secrets) | 已有 Vault / AWS SSM | Git 中无密文 | 需维护额外组件 |
| SOPS + sealed-secrets | ArgoCD 用户 | 加密文件可提交到 Git | 需管理 PKI |
| 云厂商 Secret Manager | 深度绑定单一云平台 | 审计完善 | 平台锁定 |
> **渐进路径**:K8s Secret → 接入云厂商 Secret Manager → 引入 ESO 实现多云解耦。
## 编排工具选型
| 服务规模 | 推荐方案 | 理由 |
|----------|---------|------|
| < 10 个服务 | Kustomize / 裸 YAML | 复杂度高于收益 |
| 10~50 个服务 | Helm | 模板复用价值明显 |
| > 50 个服务 | Helm + Kustomize overlays | Helm 管模板,Kustomize 管环境差异 |
## 关键决策流程图
### 安全选型决策
```mermaid
flowchart TD
START["开始选型"] --> SIZE["团队 < 20人?"]
SIZE -- 是 --> K8SSECRET["✅ K8s 原生 Secret"]
SIZE -- 否 --> CLOUD["深度绑定云厂商?"]
CLOUD -- 是 --> SECRETMGR["✅ Cloud Secret Manager"]
CLOUD -- 否 --> GITOPS["使用 ArgoCD?"]
GITOPS -- 是 --> SOPS["✅ SOPS + sealed-secrets"]
GITOPS -- 否 --> ESO["✅ External Secrets Operator"]
style K8SSECRET fill:#e8f5e9
style SECRETMGR fill:#e3f2fd
style SOPS fill:#fff3e0
style ESO fill:#f3e5f5
```
## 附录:常用命令速查
### kubectl 基础
```bash
kubectl set image deployment/order-service \
order=registry.example.com/order-service:v1.2.3 -n production
kubectl rollout status deployment/order-service -n production --timeout=120s
kubectl rollout undo deployment/order-service -n production
```
### 关联笔记
- [[02-Kubernetes/01-核心概念与Deployment]] — Deployment 完整示例与 Probe 选择
- [[hhs/MS/05-部署运维/01-容器化]] — Docker 镜像是 K8s Pod 的基础单元
- [[hhs/MS/05-部署运维/03-CICD与GitOps]] — GitOps ArgoCD 操作 K8s manifest
- [[hhs/MS/05-部署运维/04-SRE实践]] — SLO/Error Budget 在 K8s 中的落地
- [[hhs/MS/02-服务治理/04-服务发现]] — K8s Service 是服务端发现模式的代表
- [[hhs/MS/02-服务治理/08-流量治理]] — Istio VirtualService 在 K8s 上的高级路由