Skip to content

Kubernetes是什么

一、Kubernetes 是什么?

Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。它由 Google 设计并捐赠给 CNCF(云原生计算基金会),现已成为容器编排的事实标准。

二、核心架构与组件

1. 集群架构

Kubernetes 集群由两类节点组成:

  • Master 节点(控制平面):负责集群调度和决策。
  • Worker 节点(数据平面):运行容器化应用。

2. Master 节点组件

组件功能
API Server集群操作的唯一入口,处理 REST 请求(如 kubectl 命令)。
etcd分布式键值存储,保存集群状态(如 Pod、Service 配置)。
Controller Manager运行控制器(如 Deployment、Node 控制器),确保集群状态符合预期。
Scheduler根据资源需求将 Pod 调度到合适的 Worker 节点。

3. Worker 节点组件

组件功能
kubelet与 Master 通信,管理节点上的 Pod 生命周期(启动/停止容器)。
kube-proxy维护网络规则,实现 Service 的负载均衡和流量转发。
容器运行时执行容器(如 Docker、containerd)。

三、关键概念与资源对象

1. Pod

  • 最小调度单元:一个或多个共享网络/存储的容器(通常为单容器)。
  • 示例:运行 Node.js 应用的 Pod。
yaml
apiVersion: v1
kind: Pod
metadata:
  name: nodejs-pod
spec:
  containers:
  - name: nodejs
    image: node:18-alpine
    ports:
    - containerPort: 3000

2. Deployment

  • 管理 Pod 副本:声明式定义 Pod 的副本数、更新策略。
  • 支持滚动更新、回滚。
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodejs-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nodejs
  template:
    metadata:
      labels:
        app: nodejs
    spec:
      containers:
      - name: nodejs
        image: node:18-alpine

3. Service

  • 暴露服务:为一组 Pod 提供稳定的 IP 和 DNS 名称,支持负载均衡。
  • 类型:ClusterIP(内部)、NodePort(节点端口)、LoadBalancer(云厂商 LB)。
yaml
apiVersion: v1
kind: Service
metadata:
  name: nodejs-service
spec:
  selector:
    app: nodejs
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
  type: ClusterIP

4. Ingress

  • 七层路由管理:通过规则将外部流量路由到 Service(如基于域名或路径)。
  • 依赖 Ingress Controller(如 Nginx、Traefik)。
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nodejs-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: nodejs-service
            port:
              number: 80

四、核心功能特性

1. 自动化运维

  • 自愈能力:自动重启故障容器、重新调度宕机节点上的 Pod。
  • 滚动更新:逐步替换旧版本 Pod,确保零停机。
  • 回滚机制:通过 kubectl rollout undo 回退到历史版本。

2. 弹性伸缩

  • Horizontal Pod Autoscaler (HPA):根据 CPU/内存或自定义指标自动扩缩 Pod。
yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nodejs-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nodejs-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

3. 服务发现与负载均衡

  • DNS 机制:通过 <service-name>.<namespace>.svc.cluster.local 访问服务。
  • 流量分割:结合 Service 和 Ingress 实现金丝雀发布、A/B 测试。

4. 配置与存储管理

  • ConfigMap:存储非敏感配置(如环境变量)。
  • Secret:管理敏感数据(如数据库密码)。
  • PersistentVolume (PV):提供持久化存储(如数据库数据)。

五、存储与网络

1. 存储

  • Volume:Pod 级别的存储(临时或持久)。
  • PersistentVolumeClaim (PVC):用户对存储资源的申请(如申请 10Gi 空间)。
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

2. 网络

  • CNI 插件:实现 Pod 跨节点通信(如 Calico、Flannel)。
  • NetworkPolicy:控制 Pod 之间的网络流量(如允许前端 Pod 访问后端数据库)。

六、生态系统与工具

工具用途
Helm包管理器,简化应用部署(如 helm install)。
Prometheus监控集群和应用的性能指标。
Grafana可视化监控数据。
Argo CDGitOps 持续交付工具。
Kustomize管理环境差异化的 YAML 配置。

七、典型应用场景

  1. 微服务架构:管理数百个服务的部署、通信和监控。
  2. 批处理任务:运行定时任务(通过 CronJob)。
  3. 机器学习流水线:调度训练和推理任务。
  4. 高可用 Web 应用:通过多副本和 HPA 应对流量高峰。

八、最佳实践

  1. 资源限制:为容器设置 CPU/内存的 requestslimits
  2. 健康检查:配置 livenessProbereadinessProbe
  3. 不可变基础设施:避免直接修改运行中的容器,通过更新镜像重新部署。
  4. 命名空间隔离:用 namespace 分隔开发、测试和生产环境。

九、学习路径建议

  1. 入门:通过 minikubekind 搭建本地集群。
  2. 动手实践:部署一个简单的 Web 应用(如 Nginx + Node.js + MySQL)。
  3. 深入理解:研究 Service Mesh(如 Istio)、Operator 模式等高级主题。
    Kubernetes 的复杂性在于其丰富的功能模块,但掌握其核心逻辑(声明式 API + 控制器模式)后,可逐步构建高效的云原生架构。

前端知识体系 · wcrane