Skip to content

参考:K8s 对象、kubectl 与生态速查

基于 Kubernetes 1.36 · 核于 2026-08

速查

  • 架构:控制面(apiserver/etcd/scheduler/controller-manager)+ 工作节点(kubelet/kube-proxy/containerd)。
  • 最小单位:Pod(1+ 容器共享网络/存储),日常用 Deployment/StatefulSet/DaemonSet 托管。
  • 网络抽象:Service(ClusterIP/NodePort/LoadBalancer)= 稳定 IP+DNS+LB;Ingress/Gateway API = 七层入口。
  • 配置存储:ConfigMap(明文)/Secret(base64,非加密);PV/PVC/StorageClass = 持久卷。
  • 权限:RBAC(Role/ClusterRole + Binding),ServiceAccount 是 Pod 身份。
  • 伸缩:HPA 水平(按 CPU/内存,需 Metrics Server)/ VPA 垂直 / KEDA 事件驱动(可缩到 0)。
  • 包管理:Helm(Chart + values)/ Kustomize(无模板 overlay)。
  • 元数据存储:etcd(K8s 自身用),与 Kafka「去 ZooKeeper(KRaft)」无关;K8s 生态里的 Kafka(Strimzi)跟随 KRaft 去 ZK。
  • 版本:2026 年 8 月标准维护 1.34/1.35/1.36,最新稳定 1.36.x;每年 3 个小版本。
  • 核心范式:声明式 + reconcile 控制循环 = 自愈。

一、工作负载对象速查

对象适用关键特性
Pod最小调度单位1+ 容器共享网络/存储,临时性
Deployment无状态应用(最常用)副本数 + 滚动更新 + 回滚
ReplicaSetDeployment 内部用保证副本数恒定
StatefulSet有状态应用(数据库主从)稳定网络名 + 稳定存储 + 有序启停
DaemonSet每节点一个(agent)新节点自动起、移除自动清
Job跑完即退成功完成不再重试
CronJob定时任务cron 表达式周期创建 Job

二、Service 与 Ingress 速查

类型作用何时用
ClusterIP(默认)集群内虚拟 IP + DNS内部服务互访
NodePort每节点开端口(30000-32767)无云 LB 时简单对外暴露
LoadBalancer云厂商分配外部 IP云上对外暴露
ExternalNameCNAME 到外部域名集群内引用外部服务
Headless(clusterIP: None)DNS 直接返回 Pod IPStatefulSet 给每个 Pod 稳定标识
Ingress七层按域名/路径路由省公网 IP,多 Service 共享入口
Gateway APIIngress 继任者金丝雀/流量切分等高级场景

三、kubectl 命令清单

bash
# —— 查看 ——
kubectl get pods,svc,deploy -n app [-o wide] [-w]
kubectl get pod -l app=web                  # Label 过滤
kubectl describe pod <name>                 # 看 Events 排查
kubectl logs <pod> [-c 容器] [--previous] [-f]
kubectl exec -it <pod> -- sh

# —— 声明式管理 ——
kubectl apply -f deploy.yaml                # 创建/更新(幂等)
kubectl delete -f deploy.yaml
kubectl diff -f deploy.yaml                 # apply 前看差异

# —— Context/Namespace ——
kubectl config get-contexts
kubectl config use-context prod-cluster
kubectl config set-context --current --namespace=app

# —— 发布 ——
kubectl scale deployment web --replicas=5
kubectl rollout status deployment/web
kubectl rollout undo deployment/web
kubectl rollout history deployment/web

# —— 快速起手 YAML ——
kubectl create deployment web --image=nginx --dry-run=client -o yaml > web.yaml

# —— 排查节点 ——
kubectl get nodes -o wide
kubectl describe node <name>                # 看资源/事件
kubectl cordon <node>                       # 标记不再调度
kubectl drain <node> --ignore-daemonsets    # 驱逐工作负载(维护前)
kubectl uncordon <node>                     # 恢复调度

四、Helm 速查

bash
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm search repo redis

helm install <release> <chart> -f values.yaml [--set key=val]
helm list                                  # 已装 Release
helm upgrade <release> <chart> -f values.yaml
helm rollback <release> <revision>
helm uninstall <release>
helm template <release> <chart> -f values.yaml  # 渲染成 YAML 不安装(审查用)

五、RBAC 速查

对象范围作用
Role单 Namespace定义权限
ClusterRole集群级(含 Node/PV 等 + 可复用)定义权限
RoleBinding单 Namespace把 Role/ClusterRole 绑给主体
ClusterRoleBinding集群级把 ClusterRole 绑给主体
ServiceAccountNamespace 内Pod 的机器身份
yaml
rules:
  - apiGroups: ["", "apps"]               # ""=core, "apps"=Deployment 等
    resources: ["pods", "deployments"]
    verbs: ["get", "list", "watch"]       # 读权限

六、HPA 速查

yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
  scaleTargetRef: { kind: Deployment, name: web }
  minReplicas: 3
  maxReplicas: 20
  metrics:
    - type: Resource
      resource: { name: cpu, target: { type: Utilization, averageUtilization: 70 } }
  • 前置:Metrics Server(CPU/内存)或 KEDA(自定义/事件指标,可缩到 0)。

七、ConfigMap/Secret 挂载方式

yaml
spec:
  containers:
    - name: app
      # 方式一:作为环境变量(更新需重启 Pod)
      envFrom:
        - configMapRef: { name: app-config }
        - secretRef: { name: app-secret }
      # 方式二:作为文件挂载(CM 更新自动同步,约 1 分钟)
      volumeMounts:
        - name: cfg
          mountPath: /etc/app
  volumes:
    - name: cfg
      configMap: { name: app-config }
  • Secret 默认 base64 编码非加密——要加密用 KMS 插件 / Sealed Secrets / External Secrets Operator。

八、易错点清单

  • "Pod 就是容器":错。Pod 是 1+ 容器的组合(共享网络/存储),是 K8s 最小调度单位。
  • "直接用 Pod IP 访问":错。Pod IP 随重启/重调度变化,要用 Service 名(DNS 稳定)。
  • "Deployment 适合所有应用":错。有状态应用(数据库主从)Pod 名/IP/存储会变,要用 StatefulSet
  • "Secret 是加密的":错。Secret 默认只是 base64 编码base64 -d 即可还原。要加密须配 KMS/Sealed Secrets。
  • "ConfigMap 改了应用立刻生效":作为环境变量注入的要重启 Pod;作为文件挂载的会自动同步,但应用要 watch 才能热加载。
  • "HPA 装上就能用":需要先装 Metrics Server,否则 HPA 拿不到 CPU/内存指标。自定义指标要用 KEDA/Prometheus Adapter。
  • "requests 没用":错。requests 是调度依据(scheduler 据此选节点),不设会被随机调度、可能挤垮节点。生产 requests/limits 都要设。
  • "用 cluster-admin 给应用最省事":极大风险。应用一旦被攻破,整个集群沦陷。要最小权限,为每个应用单独建 SA + 精确 RBAC。
  • "K8s 要去 etcd(去 ZooKeeper 趋势)":误解。「去 ZooKeeper(KRaft)」是 Kafka 的事,与 K8s 无关。K8s 自身用 etcd,生产主流仍是 etcd;只有 k3s 等轻量发行版用 Kine 适配到 SQLite/MySQL。
  • "Ingress 自己能转发":错。Ingress 只是规则,需要 Ingress Controller(nginx-ingress/Traefik)真正转发。
  • "etcd 单点也行":生产绝不可。etcd 要**奇数节点(3/5)**Raft 高可用 + 定期快照备份 + 独占 SSD。

九、与 Docker Compose / Podman 对比

维度Docker ComposePodmanKubernetes
规模单机多容器单机/小集群(pod 概念)跨多机的集群
定位开发/小部署daemonless 运行时容器编排平台
架构单进程无 daemon(fork-exec)控制面 + 工作节点
自愈无(容器挂要手动起)无(靠 systemd 单元重启)有(控制器 reconcile)
服务发现服务名解析(compose DNS)pod 内共享网络Service DNS + ClusterIP
自动伸缩HPA/KEDA
包管理Compose 文件Compose / QuadletHelm Chart
学习成本中(CLI 兼容 Docker)
适用本地开发、小工具单机生产、rootless 安全微服务集群、需高可用

权威链接