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

Kubernetes(K8s)重要知识点复习与记录

一、K8s 概述

Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它起源于 Google 的 Borg 系统,现由 CNCF(云原生计算基金会)管理。

核心特性:

  • 自动装箱、自我修复
  • 水平扩展、服务发现
  • 滚动更新与回滚
  • 密钥与配置管理
  • 存储编排
  • 批处理与 CI/CD 支持

二、集群架构

K8s 集群由控制平面(Control Plane)和工作节点(Worker Node)组成

1. 控制平面(Master 节点)

组件功能
kube-apiserver集群统一入口,提供 REST API,所有组件间通信都需经过它
etcd分布式键值存储,保存集群所有状态数据(唯一存储)
kube-scheduler负责 Pod 调度的决策,决定 Pod 跑在哪个 Node 上
kube-controller-manager运行各种控制器(Node、Replication、Endpoint 等)
cloud-controller-manager与云服务商对接(如负载均衡、存储卷)

2. 工作节点(Node)

组件功能
kubelet节点上的"管家",与 apiserver 通信,管理本机 Pod 生命周期
kube-proxy维护节点上的网络规则,实现 Service 负载均衡
容器运行时(Container Runtime)containerd、CRI-O,负责真正运行容器

三、核心对象(Workload Resources)

1. Pod

  • K8s最小调度单位,可包含 1~N 个紧密耦合的容器
  • 同 Pod 内容器共享:网络命名空间存储卷IP 地址
  • Pod 是临时性的,可能被重建,所以一般不直接创建

2. Deployment

  • 最常见的无状态应用控制器
  • 管理 ReplicaSet,支持滚动更新回滚扩缩容
  • 典型命令:
    kubectl rollout status deployment/web kubectl rollout undo deployment/web kubectl scale deployment/web --replicas=5

3. StatefulSet

  • 用于管理有状态应用(如 MySQL、Redis、ZooKeeper)
  • Pod 具有稳定的网络标识(hostname)、持久存储有序部署/删除
  • 每个 Pod 对应独立的 PVC 和 Headless Service

4. DaemonSet

  • 确保每个 Node 上都运行一个Pod 副本
  • 典型场景:日志收集(Filebeat)、节点监控(Node Exporter)、网络插件

5. Job / CronJob

  • Job:运行一次性任务(计算完成后退出)
  • CronJob:基于时间调度的 Job(类似 Linux crontab)

四、标签、选择器与命名空间

1. Label(标签)

  • 键值对形式(app=nginx),用于标识和分类资源
  • 灵活、动态,常与选择器配合使用

2. Selector(选择器)

  • 通过 Label 筛选资源,是 Service、Deployment 等关联 Pod 的桥梁

3. Namespace(命名空间)

  • 用于多租户资源隔离
  • 默认命名空间:defaultkube-systemkube-public
  • 删除命名空间会释放其下所有资源:kubectl delete ns xxx

五、Service(服务发现与负载均衡)

Service 是一组提供相同服务的 Pod 的统一访问入口,核心是解决 Pod IP 动态变化的问题。

类型说明
ClusterIP集群内部访问(默认类型)
NodePort在每个 Node 上开放固定端口(30000-32767)外部可访问
LoadBalancer调用云厂商 LB,对外暴露服务
ExternalName通过 CNAME 映射到外部服务

底层实现机制:kube-proxy 通过 iptables 或 IPVS 模式转发流量到后端 Pod。


六、网络模型

1. 三大网络

  • Node 网络:物理节点之间的通信
  • Pod 网络:所有 Pod 之间可直接通信(无需 NAT)
  • Service 网络:为 Service 分配的虚拟 IP(ClusterIP)

2.CNI 插件

  • Flannel:简单易用,VXLAN/host-gw 模式
  • Calico:支持网络策略,性能好,BGP 模式
  • Cilium:基于 eBPF,高性能、可观测性强

3.Ingress

  • 七层负载均衡,管理外部到集群内部服务的 HTTP/HTTPS 路由
  • 需配合 Ingress Controller(如 Nginx Ingress、Traefik)使用

七、存储管理

1. Volume 分类

  • 临时卷(emptyDir):Pod 删除时数据丢失
  • 节点本地卷(hostPath):挂载宿主机目录
  • 网络存储卷:NFS、Ceph、GlusterFS
  • 云存储卷:AWS EBS、阿里云盘、Azure Disk

2. PV / PVC / StorageClass

  • PV(PersistentVolume):集群级别的存储资源抽象
  • PVC(PersistentVolumeClaim):用户对存储的"申请"
  • StorageClass:动态供给存储的模板,定义 provisioner 与参数
  • 流程:Pod → PVC → 绑定 PV(静态/动态) → 挂载

3.ConfigMap 与 Secret

  • ConfigMap:明文配置(如配置文件、启动参数)
  • Secret:敏感信息(密码、Token、证书),base64 编码
  • 注入方式:环境变量volume 挂载

八、调度策略

1. 调度流程

  1. 过滤(Predicate):筛选满足条件的 Node
  2. 打分(Priority):根据策略为 Node 评分
  3. 绑定:选择最优 Node,绑定 Pod

2. 常见调度方式

  • nodeName:强制绑定指定节点
  • nodeSelector:简单标签选择
  • 亲和性(Affinity)
    • requiredDuringSchedulingIgnoredDuringExecution(硬亲和)
    • preferredDuringSchedulingIgnoredDuringExecution(软亲和)
  • 反亲和(anti-affinity):避免 Pod 调度到同一节点/区域
  • 污点与容忍(Taint & Toleration)
    • 节点打污点 → 普通 Pod 无法调度
    • Pod 配容忍 → 可调度到对应节点
  • 拓扑分布约束(Topology Spread Constraints):均匀打散 Pod

九、安全机制

1. RBAC(基于角色的访问控制)

  • Role / ClusterRole:定义权限集合
  • RoleBinding / ClusterRoleBinding:将权限绑定到 Subject
  • Subject:User、Group、ServiceAccount

2. ServiceAccount

  • Pod 使用的身份,用于调用 apiserver
  • 默认挂载到/var/run/secrets/kubernetes.io/serviceaccount

3. NetworkPolicy

  • 定义 Pod 间的网络访问规则(白名单机制)
  • 需要网络插件支持(Calico、Cilium)

4. SecurityContext

  • 控制 Pod/容器的安全属性:用户 ID、特权模式、只读根文件系统、Capabilities 等

十、Helm 与 Kustomize

1. Helm(包管理工具)

  • Chart:K8s 资源的模板化打包
  • Release:Chart 在集群中的一次部署实例
  • 核心概念:values.yaml+ 模板 + release 管理
  • 常用命令:
helm install my-redis bitnami/redis helm upgrade my-redis bitnami/redis helm rollback my-redis 1

2. Kustomize

  • 无模板的配置管理工具
  • 通过base + overlay方式实现环境差异化
  • K8s 1.14+ 内置:kubectl apply -k ./overlay

十一、可观测性

1. 健康检查(Probe)

类型作用
livenessProbe探测容器是否存活,失败则重启
readinessProbe探测是否就绪,未就绪则从 Service 摘除
startupProbe启动慢的应用,成功后才执行 liveness

实现方式:httpGettcpSocketexec

2. 监控体系

  • metrics-server:采集 CPU/内存指标(kubectl top、HPA)
  • Prometheus + Grafana:主流监控方案
  • EFK / Loki:日志收集与展示

3. HPA(Horizontal Pod Autoscaler)

  • 基于 CPU、内存或自定义指标自动扩缩容
  • 需配合 metrics-server 或 KEDA

十二、常用命令速查

# 集群信息 kubectl cluster-info kubectl get nodes -o wide # 资源查看 kubectl get pods,svc,deploy -A kubectl describe pod <pod-name> kubectl logs -f <pod-name> -c <container> # 调试 kubectl exec -it <pod> -- /bin/sh kubectl port-forward <pod> 8080:80 kubectl cp <file> <pod>:/path # 部署与伸缩 kubectl apply -f deployment.yaml kubectl scale deploy/web --replicas=3 kubectl set image deploy/web web=nginx:1.25 # 上下文与配置 kubectl config use-context <context> kubectl config get-contexts

十三、面试常考要点 ⚡

  1. Pod 创建流程:用户 → apiserver → etcd → scheduler → kubelet → CRI 运行时启动容器
  2. Deployment 滚动更新原理:新建 RS、逐步替换旧 Pod
  3. Service 负载均衡原理:iptables/IPVS 规则
  4. K8s 网络模型要求:Pod-IP 可直达、Node-IP 可直达、Pod 间跨节点直接通信
  5. etcd 一致性保证:基于 Raft 协议
  6. HPA 扩容算法desiredReplicas = ceil(currentReplicas * currentMetric / targetMetric)
  7. StatefulSet 与 Deployment区别:网络标识、存储、部署顺序
http://www.cnnetsun.cn/news/2788887.html

相关文章:

  • 视频去水印软件推荐:2026免费安全工具盘点|电脑手机端怎么选?
  • 落地蓉城蓄力飞天:星际开发落户成都
  • 用 myKG 构建 LLM Wiki
  • Markn:重新定义你的Markdown创作工作流,让预览与编辑无缝融合
  • xss-labs-master通关记录(1-10)
  • PCB元件库与封装库规范设计:从原理到实践
  • 第58篇|AI 失败态:网络失败、Key 缺失、模型失败如何提示
  • 实战应用:基于快马平台构建智能桌面助手宠物,集成提醒与信息展示
  • 萤石 ERTC 如何灵活支撑摄像头接入多人视频会议?
  • 物联网操作系统技术讲座深度解析:从理论到实战的竞赛赋能
  • iOS越狱终极指南:从iOS 17到iOS 26.5全面解锁iPhone隐藏功能
  • 基于GPS同步的分布式逆变器谐波电压补偿技术解析
  • 无线通信基础:频率、波长与天线设计的核心关系
  • 免费文案提取神器2026推荐:视频字幕+图片文字提取保姆级教程
  • CSDN AI数字营销不是万能药,但不用它=自动淘汰(20年招生顾问的3条铁律)
  • FPGA高级设计实战:从时序收敛到系统级优化的工程进阶指南
  • VisualCppRedist AIO:企业级运行时依赖管理系统的5大技术创新
  • 2026年PDF压缩到最小全方案:保姆级教程+免费工具+Adobe专业设置
  • 2026年AI编程工具全方位推荐:权威评测与选型指南
  • UltraEdit自定义VHDL语法高亮:提升硬件描述语言开发效率
  • 终极指南:如何用Carrot插件实时预测Codeforces评级变化
  • 硬件厂商如何用CSDN AI引擎实现线索成本下降63%?——基于27家头部厂商的A/B测试实证报告
  • ABB 工业机器人激光切割工作站离线编程仿真研究
  • OpenClaw保姆级配置教程(适用于Windows)
  • Miniforge 完全入门指南:从零撸到环境自由
  • 安规电容X与Y:定义、选型与EMC设计实战指南
  • Altium Designer ERC警告“Compiler Net has no driving source”的根源与解决指南
  • AI Agent友好型工具设计的5大底层原则
  • 当记忆密码成为数字枷锁:用自动化工具找回被遗忘的压缩包密码
  • 思源宋体CN终极指南:7种字重开源字体高效应用