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,支持滚动更新回滚扩缩容

  • 典型命令:

    bash 复制代码
    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 管理

  • 常用命令:

    复制代码
bash 复制代码
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

十二、常用命令速查

bash 复制代码
# 集群信息
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 区别:网络标识、存储、部署顺序
相关推荐
IT策士2 小时前
第 47 篇 k8s之生产级考量:高可用、备份与升级
云原生·容器·kubernetes
小义_2 小时前
【Linux 1】
linux·运维·云原生·红帽
wu8587734573 小时前
OpenResty 源站被扫描的排查与防御实战:Cloudflare + DOCKER-USER + Fail2Ban 最全方案解析
docker·容器·openresty
微步_ym4 小时前
Docker:在Mac的docker.desktop中安装mongo
macos·docker·容器
IT策士4 小时前
第48篇 k8s之常见问题排查与排错指南
云原生·容器·kubernetes
IT策士4 小时前
第 46 篇 k8s之CI/CD 集成:GitOps 理念与 ArgoCD
前端·容器·kubernetes
豆瓣鸡5 小时前
Docker快速入门
运维·docker·容器
VX_185 小时前
Docker镜像直接部署JumpServer
运维·docker·容器
努力搬砖的咸鱼5 小时前
容器编排底层原理:Kubernetes 网络模型与 CNI 插件
网络·微服务·云原生·容器·架构·kubernetes