ArcLibrary

Kubernetes 核心概念

Pod / Deployment / Service / Namespace —— 从零理解 K8s 的最小心智模型。

K8s编排容器
核心 · Key Idea

一句话:Kubernetes 是集群级的容器编排系统。你写「期望状态」(YAML),它通过控制循环不断让现实逼近期望。看不懂没关系,先把 5 个对象记住:Pod / Deployment / Service / Ingress / Namespace。

是什么#

# Deployment:3 副本的 web
apiVersion: apps/v1
kind: Deployment
metadata: { name: web }
spec:
  replicas: 3
  selector: { matchLabels: { app: web } }
  template:
    metadata: { labels: { app: web } }
    spec:
      containers:
        - name: app
          image: ghcr.io/me/web:1.2.0
          ports: [{ containerPort: 8080 }]
          resources:
            limits: { cpu: 500m, memory: 512Mi }
            requests: { cpu: 100m, memory: 128Mi }
---
# Service:让外部按 DNS 名访问
apiVersion: v1
kind: Service
metadata: { name: web }
spec:
  selector: { app: web }
  ports: [{ port: 80, targetPort: 8080 }]

打个比方#

打个比方 · Analogy

你不是直接命令工人「砌这块砖」(imperative),你是把蓝图(YAML)交给项目经理(控制器),他带一群人不停巡检:少了砖就补、错位了就纠正、塌了就重砌 —— 这就是声明式 + 控制循环。

五个最常用对象#

Pod豆荚
一个或多个紧耦合容器组成的最小调度单元。共享网络命名空间和卷。
Deployment部署
管理一组无状态 Pod 的生命周期,提供滚动升级 / 回滚。
Service服务
给一组 Pod 套一个稳定 DNS 名 + 虚拟 IP。
Ingress入口
L7 路由:把外部域名 / 路径映射到不同 Service(nginx / Traefik 实现)。
Namespace命名空间
集群内逻辑分区。dev / prod / kube-system 各自独立。

怎么工作#

整个 K8s 就是一堆控制器在 watch API server 然后调和状态

关键命令#

kubectl get pods -A                            # 全集群
kubectl describe pod web-xxxxx
kubectl logs -f web-xxxxx
kubectl exec -it web-xxxxx -- sh
kubectl apply -f manifest.yaml
kubectl rollout status deploy/web
kubectl rollout undo deploy/web
kubectl top pod
kubectl explain deployment.spec.template.spec.containers   # 查字段

实操要点#

  • 总写 resources requests/limits:调度器靠 requests 决定塞哪个节点;limits 防止单 Pod 把节点打爆。
  • 不要直接 kubectl exec 改东西:改 YAML → apply。否则下次 rollout 全丢。
  • 健康检查三件套livenessProbe(活着没)/ readinessProbe(能接流量没)/ startupProbe(启动期宽容)。
  • Pod 是短命的:可能随时被驱逐 / 重建,应用必须无状态或把状态放 PVC / 外部 DB。
  • 滚动发布:默认 RollingUpdatemaxUnavailable / maxSurge 控制速度。
  • HPAkubectl autoscale deploy/web --cpu-percent=70 --min=2 --max=10
  • 学习曲线建议:先 minikube / k3s 跑通 → 部署一个真应用 → 学 Helm 模板 → 再碰 ServiceMesh / Operator。

易混点#

Pod
K8s 调度单元,**可包含 1 ~ N 个紧耦合容器**。
共享网络 + 卷。
容器
Pod 内部的运行实例。
`containers:` 数组里的一个元素。

延伸阅读#