Kubernetes(k8s)全面解析:从入门到实践

最近打算写一个流水线可视化平台,所以打算写一篇文章详细说说关于Kubernetes的原理和使用

一、Kubernetes 简介

1.1 什么是Kubernetes?

Kubernetes(简称k8s)是Google开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。其核心能力包括:

  • 服务发现与负载均衡

  • 存储编排

  • 自动扩缩容

  • 自我修复

  • 密钥与配置管理

1.2 核心概念

术语 说明
Pod 最小部署单元,包含1个或多个共享存储/网络的容器
Node 工作节点,运行容器的主机
Deployment 定义Pod的创建和更新策略
Service 抽象访问Pod的逻辑集合,提供稳定IP和DNS名称

二、Kubernetes 架构详解

2.1 集群架构图

复制代码
graph TD
    A[Control Plane] --> B[API Server]
    A --> C[Scheduler]
    A --> D[Controller Manager]
    A --> E[etcd]
    F[Worker Node] --> G[Kubelet]
    F --> H[Kube-Proxy]
    F --> I[Container Runtime]

2.2 核心组件

控制平面(Control Plane)
  1. API Server:集群操作的唯一入口

  2. etcd:分布式键值存储,保存集群状态

  3. Scheduler:将Pod分配到合适节点

  4. Controller Manager:执行节点管理、任务调度等控制循环

工作节点(Worker Node)
  1. Kubelet:与Control Plane通信,管理Pod生命周期

  2. Kube-Proxy:维护网络规则

  3. 容器运行时:Docker/containerd等

三、实战部署示例

3.1 创建Nginx Deployment

复制代码
yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

3.2 暴露Service

yaml

复制代码
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

四、网络模型解析

4.1 Pod网络通信

复制代码
sequenceDiagram
    Pod1->>Pod2: 直接通信(通过CNI插件)
    Pod1->>Service: 虚拟IP访问
    Service->>Pod2: 负载均衡转发

4.2 网络策略示例

yaml

复制代码
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-web
spec:
  podSelector:
    matchLabels:
      role: web
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: client
    ports:
    - protocol: TCP
      port: 80

五、存储管理

5.1 PersistentVolume(PV)配置

yaml

复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

5.2 StorageClass示例

yaml

复制代码
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-storage
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp3
  fsType: ext4

六、监控与日志

6.1 监控架构

复制代码
graph TD
    A[数据源] -->|指标/日志/事件| B[采集层]
    B -->|数据聚合| C[存储层]
    C -->|查询分析| D[可视化层]
    C -->|告警规则| E[告警层]
    D -->|仪表盘| F[用户]
    E -->|通知| F[用户]

    subgraph 数据源
        A1[Kubernetes API Server]
        A2[Node Exporter]
        A3[Kube-state-metrics]
        A4[应用自定义指标]
        A5[容器运行时]
    end

    subgraph 采集层
        B1[Prometheus]
        B2[Fluentd]
        B3[Metrics Server]
    end

    subgraph 存储层
        C1[Prometheus TSDB]
        C2[Elasticsearch]
        C3[Thanos]
    end

    subgraph 可视化层
        D1[Grafana]
        D2[Kibana]
    end

    subgraph 告警层
        E1[Alertmanager]
        E2[PrometheusRule]
    end

架构说明 2610

  1. 数据源层:包含 Kubernetes 核心组件(API Server、etcd)、节点资源(Node Exporter)、集群状态(Kube-state-metrics)及业务应用指标

  2. 采集层

    • Prometheus 负责指标抓取(支持服务发现机制)

    • Fluentd 实现日志收集

    • Metrics Server 提供基础资源监控

  3. 存储层

    • Prometheus TSDB 存储短期监控数据

    • Thanos 实现长期存储和多集群聚合

  4. 可视化层:通过 Grafana 自定义仪表盘展示多维数据

  5. 告警层:Alertmanager 实现分级告警路由,支持邮件/Slack 等通知方式

6.1 核心监控组件原理

1.Prometheus-Operator 架构

工作流程 210:

  1. CRD 管理:通过自定义资源(Prometheus、ServiceMonitor 等)声明监控配置

  2. 动态发现

    • ServiceMonitor 自动发现 Kubernetes Service

    • PodMonitor 直接监控 Pod 端点

  3. 配置热加载:Operator 监听 CRD 变更并实时更新 Prometheus 配置

  4. 高可用保障:支持多副本 Prometheus 实例 + Thanos 侧车模式

示例 ServiceMonitor 配置:

yaml

复制代码
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: api-server-monitor
spec:
  selector:
    matchLabels:
      component: apiserver
  endpoints:
  - port: https-metrics
    interval: 30s
    scheme: https
    tlsConfig:
      insecureSkipVerify: true

常用命令

kubectl top nodes # 查看节点资源使用

kubectl logs <pod-name> # 查看Pod日志

kubectl describe pod <pod-name> # 诊断Pod状态

七、实践

  1. 使用Declarative方式管理资源(YAML文件)

  2. 设置资源请求/限制(requests/limits)

  3. 采用RBAC进行权限控制

  4. 定期升级集群版本

  5. 使用Helm进行应用打包

下一期介绍Kubernetes原理

相关推荐
阿里云云原生15 小时前
你的 OpenClaw 真的在受控运行吗?
云原生
阿里云云原生16 小时前
5 分钟零代码改造,让 Go 应用自动获得全链路可观测能力
云原生·go
Shanyoufusu1216 小时前
RKE2 单节点集群安装 Rancher+ 私有镜像仓库搭建 完整教程
云原生
阿里云云原生17 小时前
Dify 官方上架 Higress 插件,轻松接入 AI 网关访问模型服务
云原生
AI攻城狮19 小时前
OpenClaw Session 管理完全指南:Context 压缩、重置与持久化
人工智能·云原生·aigc
蝎子莱莱爱打怪2 天前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
阿里云云原生5 天前
阿里云获评 Agentic AI 开发平台领导者,函数计算 AgentRun 赢下关键分!
云原生
蝎子莱莱爱打怪5 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
崔小汤呀5 天前
Docker部署Nacos
docker·容器
缓解AI焦虑5 天前
Docker + K8s 部署大模型推理服务:资源划分与多实例调度
docker·容器