当前位置: 首页 > news >正文

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 TDA[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

yamlapiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.21ports:- containerPort: 80

3.2 暴露Service

yaml

apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80type: LoadBalancer

四、网络模型解析

4.1 Pod网络通信

sequenceDiagramPod1->>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: webingress:- from:- podSelector:matchLabels:role: clientports:- protocol: TCPport: 80

五、存储管理

5.1 PersistentVolume(PV)配置

yaml

apiVersion: v1
kind: PersistentVolume
metadata:name: pv-vol1
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncehostPath: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: gp3fsType: ext4

六、监控与日志

6.1 监控架构

graph TDA[数据源] -->|指标/日志/事件| 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[容器运行时]endsubgraph 采集层B1[Prometheus]B2[Fluentd]B3[Metrics Server]endsubgraph 存储层C1[Prometheus TSDB]C2[Elasticsearch]C3[Thanos]endsubgraph 可视化层D1[Grafana]D2[Kibana]endsubgraph 告警层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: apiserverendpoints:- port: https-metricsinterval: 30sscheme: httpstlsConfig: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原理 

http://www.xdnf.cn/news/633187.html

相关文章:

  • how to do unit test for golang within vscode
  • CentOS 7.6 + Docker:搭建后端常用的开发环境
  • 使用CentOS部署本地DeekSeek
  • PDF 编辑批量拆分合并OCR 识别
  • 非常适合初学者的Golang教程
  • TDengine 对接微软 SSRS 报表系统
  • Go 语言学习 Protobuf 连接 gRPC 实现 AI 接口
  • Linux 的编辑器--vim
  • 初识消息队列
  • C++单例模式与线程安全
  • webpack面试问题
  • 理解HTTP基本认证与表单登录认证
  • 自动化安全脚本学习
  • 9:OpenCV—模板匹配
  • React声明式编程(手动控制,大型项目,深度定制)与Vue响应式系统(自动优化,中小型项目,快速开发)区别
  • openjdk底层(hotspot)汇编指令的内存分布
  • 掌阅iReader新形态墨水屏Tango发布:科技与美学共舞,开启灵动阅读新体验
  • C++星际密码破译全国信息素养大赛复赛决赛 C++小学/初中组 算法创意实践挑战赛 内部集训模拟题详细解析
  • SAR ADC的功耗设计
  • 图解BERT
  • 免费开源 PDF 阅读器 自带虚拟打印机功能 多格式兼容
  • 【计算机网络】基于UDP进行socket编程——实现服务端与客户端业务
  • threejs模型对象、材质
  • 健身网l;l;j
  • Java21 并发处理说明
  • Python数据可视化实战:让数据从「数字堆」变成「故事书」
  • git push出现 “HTTP 400 curl 22 The requested URL returned error: 400...“错误
  • 计网5:HTTP/TCP的长连接和短连接的区别以及各自的应用场景
  • JavaSE核心知识点03高级特性
  • Linux系统之----磁盘硬件