Skip to main content

k8s

📅 2026-03-19 ✏️ 2026-03-23 CS INFRA
No related notes

1 · k8s#

S 什么场景 写代码,在一台机器上运行 -> Docker 打包(解决环境一致性问题)-> Docker Compose (管理多个容器,但单机) C 什么冲突 多机器?自动扩容缩容?故障自动恢复? Q 什么问题 需要一个”跨多机器的容器编排系统” A 回答问题 Node(节点,运行容器的机器),Pod(调度最小单位,包含1或多个容器),Cluster(集群,一堆节点+一个控制系统),ControlPlane(控制平面,按spec自动管理)

minikube管理node,kubectl管理pod

https://medium.com/@keshiha/k8s-architecture-bb6964767c12

1.1 · 基础概念

1.1.1 · Node#

定义:Node 是 K8s 集群中的工作节点,本质上就是一台机器,可以是物理机也可以是虚拟机,负责真正运行 Pod。

场景:一个集群通常由多个 Node 组成,调度器会把 Pod 分配到某个 Node 上运行。

1.2 · 架构

k8s架构:控制面/数据面,集群内少数节点用作控制面(管理)、其他大部份节点用作数据面(业务) 控制面节点称作master node、数据面节点称作worker node

master 内组件:

  1. apiserver: k8s系统入口,提供了一系列的RESTful api
  2. etcd: kv储存各种资源对象和状态
  3. scheduler: 容器编排
  4. controller-manager: 维护容器和节点

node 内组件:

  1. kubelet: 代理node,负责绝大多操作,只有这个可以和apiserver通信
  2. kube-proxy: node的网络代理,负责网络通信,转发TCP/UDP(已被容器化)
  3. container-runtime: 管理pod的生命周期,可以是docker/podman/containerd等

1.3 · kubectl 常用命令#

# 列出所有资源对象
kubectl api-resources
# 解释对应对象
kubectl explain $RESOURCE

# 获取对象实例
kubectl get $RESOURCE
# 详细信息
kubectl describe $RESOURCE
# 按命令生成资源
kubectl create deployment my-nginx --image=nginx --dry-run=client -o yaml
# 或从清单创建/更新资源
kubectl apply -f manifest.yaml

1.4 · 工作负载

1.4.1 · Pod#

定义:K8s 中最小的调度单位,里面运行一个或多个容器。所有的 Kubernetes 资源都直接或者间接地依附在 Pod 之上。

场景:部署一个 Nginx 容器,或者让业务容器和日志采集容器放在同一个 Pod 中一起运行。

Pod 可以”挂载(mount)“多个 Volume,可以以 Volume 的方式使用 ConfigMap/Secret。

Pod 分配了域名:IP地址.名字空间.pod.cluster.local(需要把IP地址里的 . 改成 -)

1.4.2 · Deployment#

定义:用于管理无状态应用,负责 Pod 的副本数、滚动更新和回滚。

场景:部署 Web 服务、API 服务、前端页面这类可以随时横向扩容的应用。

template 嵌入 pod 定义,replicas 字段明确应用部署的”期望状态”。

1.4.3 · StatefulSet#

定义:用于管理有状态应用,Pod 有固定名称、稳定网络标识和持久化存储。

场景:部署 MySQL、Redis、Kafka 这类需要稳定身份和存储的服务。

1.4.4 · DaemonSet#

定义:保证每个节点上都运行且仅运行一个 Pod。

场景:部署日志采集、监控 Agent、节点安全组件。

污点(taint)容忍度(toleration):前者节点,后者容器,两者关联的部署策略。

1.4.5 · Job#

定义:用于执行一次性任务,任务成功完成后就结束。template 嵌入 Pod,从模板创建 pod。

场景:执行数据库迁移、批处理脚本、离线数据计算。

1.4.6 · CronJob#

定义:用于按时间周期创建 Job,相当于 K8s 里的定时任务。template 创建 Job,再 template 创建 Pod。

场景:每天凌晨备份数据库、每小时清理日志、定时生成报表。

1.5 · 配置中心

1.5.1 · ConfigMap#

定义:用于保存普通配置数据,比如配置文件、环境变量、启动参数。

场景:把服务地址、端口、功能开关等配置从镜像中分离出来。

1.5.2 · Secret#

定义:用于保存敏感信息,比如密码、Token、证书。

场景:给应用注入数据库密码、API Key、TLS 证书。

1.6 · 网络

1.6.1 · Service#

Service 是对 Pod IP 地址的抽象,四层负载均衡 https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/

Kubernetes 会给它分配一个静态 IP 地址,自动管理、维护后面动态变化的 Pod。 本质上就是一个由 kube-proxy 控制的四层负载均衡,使用 iptables 技术在 TCP/IP 协议栈上转发流量。

本身不关联、管理 pod,和 Deployment 组合使用。

Service 对象的域名完全形式是”对象.名字空间.svc.cluster.local”

1.6.2 · Ingress#

七层负载均衡

作为流量的总入口,统管集群的进出口数据,“扇入""扇出”流量。

Ingress Controller: 与上层业务关系密切,社区自己实现

Ingress Class: 插在 Ingress 和 Ingress Controller 中间,解耦。

1.7 · 数据持久化

PersistentVolume, StatefulSet

1.8 · 应用管理

  1. 滚动更新 kubectl apply 即可,回滚 kubectl rollout
  2. 资源配额、检查探针

1.9 · 集群管理

ResourceQuota

2 · links#

  1. https://time.geekbang.org/column/intro/100114501
  2. https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/Kubernetes%E5%85%A5%E9%97%A8%E5%AE%9E%E6%88%98%E8%AF%BE/