Kubernetes 的核心架构与组件

Kubernetes(K8s)采用主从分布式架构,由控制平面(Control Plane)和工作节点(Worker Node)组成。控制平面包括 API Server、etcd、Controller Manager 和 Scheduler,负责集群状态管理和决策。工作节点运行 kubelet、kube-proxy 和容器运行时(如 Containerd),负责执行实际工作负载。

API Server 是唯一与 etcd 通信的组件,提供 RESTful 接口。etcd 作为分布式键值存储,保存集群所有配置数据。Controller Manager 包含多个控制器,如 ReplicaSet 控制器和 Deployment 控制器,确保系统状态与期望一致。Scheduler 根据资源需求和策略将 Pod 分配到合适节点。

Pod 设计与生命周期管理

Pod 是 Kubernetes 最小调度单元,可包含一个或多个紧密关联的容器。每个 Pod 分配唯一 IP 地址,内部容器共享网络命名空间和存储卷。Pod 通过 yaml 或 json 文件定义,关键字段包括 spec.containersspec.volumesspec.nodeSelector

Pod 生命周期包含 Pending、Running、Succeeded/Failed 等阶段。存活探针(Liveness Probe)和就绪探针(Readiness Probe)控制容器健康状态。kubectl get pods 命令可查看 Pod 状态,kubectl describe pod 获取详细事件信息。

部署策略与滚动更新

Deployment 是最常用的工作负载资源,支持声明式更新和回滚。通过 spec.strategy 定义更新策略,RollingUpdate 逐步替换旧 Pod,Recreate 先终止所有旧 Pod 再创建新实例。

滚动更新通过 kubectl set image 或修改 yaml 文件触发。kubectl rollout status 监视更新进度,kubectl rollout undo 回退到上一版本。spec.revisionHistoryLimit 控制保留的修订版本数量。

apiVersion: apps/v1
kind: Deployment
  name: nginx-deployment
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    spec:
      containers:
      - name: nginx
        image: nginx:1.19.1

服务发现与网络策略

Service 提供稳定的 IP 地址和 DNS 名称,实现 Pod 访问抽象。ClusterIP 类型提供内部访问,NodePort 和 LoadBalancer 支持外部访问。Ingress 通过路径规则提供 L7 路由能力,需配合 Ingress Controller(如 Nginx 或 Traefik)使用。

NetworkPolicy 定义 Pod 间通信规则,基于标签选择器控制进出流量。spec.podSelector 指定目标 Pod,ingress/egress 规则定义允许的流量来源和端口。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend
spec:
  podSelector:
    matchLabels:
      role: frontend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: backend
    ports:
    - protocol: TCP
      port: 6379

存储管理与持久化卷

PersistentVolume(PV)是集群存储资源,PersistentVolumeClaim(PVC)是用户存储请求。动态供给通过 StorageClass 自动创建 PV,支持多种卷类型如 AWS EBS、Azure Disk 和 NFS。

StatefulSet 为有状态应用提供有序部署和稳定网络标识。每个 Pod 获得持久化存储和唯一主机名,适用于数据库等应用。volumeClaimTemplates 为每个 Pod 自动创建 PVC。

apiVersion: apps/v1
kind: StatefulSet
 name: web
spec:
  serviceName: "nginx"
  replicas: 2
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      storageClassName: "fast"
      resources:
        requests:
          storage: 1Gi

监控与日志收集

Prometheus 是主流监控方案,通过 ServiceMonitor 自动发现监控目标。Grafana 可视化指标数据,展示 CPU、内存等资源使用情况。kube-state-metrics 生成集群状态指标,如 Deployment 副本数。

Fluentd 或 Filebeat 采集容器日志,输出到 Elasticsearch 或 Loki。Sidecar 模式可将日志直接写入共享卷。kubectl logs 查看实时日志,--previous 参数获取已终止容器日志。

安全配置最佳实践

RBAC 控制用户和服务账户权限,通过 Role 和 RoleBinding 定义操作权限。Pod 安全策略(PSP)限制容器运行时权限,如禁止特权模式。NetworkPolicy 实现零信任网络模型,默认拒绝所有流量。

Secrets 存储敏感信息,如密码和 API 密钥。Vault 等外部系统可提供更高级密钥管理。镜像扫描工具(如 Trivy)检测基础镜像漏洞,确保部署安全性。

多集群管理与扩展

Karmada 或 Cluster API 实现多集群管理,支持跨云部署。自定义资源定义(CRD)扩展 API 能力,Operator 模式自动化复杂应用管理。Kubernetes Federation 提供跨集群服务发现,但需注意网络延迟问题。

Virtual Kubelet 将节点抽象为其他服务(如 AWS Fargate),实现混合部署。Kubernetes 生态工具如 Helm 简化应用打包,Kustomize 支持配置差异化管理。

更多推荐