k8s是啥?

Kubernetes(常写作 k8s)是什么?

Kubernetes (读作 "koo‑ber‑net‑es" )是一个 开源的容器编排(orchestration)平台 ,用来 自动化部署、扩缩容、管理和监控 运行在 容器(Container) 里的应用。

"k8s" 是 K + 8 个字母(ubernete )+ s 的缩写,常被写作 k8s


1️⃣ 为什么会出现 Kubernetes?

场景 传统做法 产生的问题
多实例部署 手动 docker run 多次 难以统一配置、版本不一致、运维成本高
弹性伸缩 手动启动/停止容器 响应慢、资源浪费
服务发现/负载均衡 手动配置 Nginx/HAProxy 配置繁琐、故障恢复慢
滚动升级 逐台手动升级 中断风险、回滚困难
故障自愈 手动检查容器状态 监控/恢复不及时
[ ]

Kubernetes 把这些功能 统一抽象 成一套 声明式 API,只要描述期望的状态,控制平面会自动把真实状态调到期望状态。


2️⃣ 核心概念(最常用的对象)

对象 作用 常见用途
Node 集群中的一台机器(VM 或裸金属),运行 kubeletcontainer runtime(Docker、containerd、CRI‑O) 物理/虚拟资源的提供者
Pod Kubernetes 最小可调度单元,一组共享网络/存储的容器(通常 1‑2 个) 业务容器、sidecar(日志、代理)
ReplicaSet 保证 Pod 副本数 始终等于声明的数目 实现水平扩缩容
Deployment ReplicaSet 进行声明式管理,提供 滚动升级、回滚 等功能 生产环境的主流部署方式
Service 为一组 Pod 提供 稳定的网络入口(ClusterIP、NodePort、LoadBalancer、ExternalName) 内部服务发现、外部访问
Ingress 基于 HTTP/HTTPS 的 路由层 ,配合 Ingress‑Controller(如 Nginx、Traefik)实现 URL 路由、TLS 终止 对外提供 Web/API
ConfigMap / Secret 配置文件环境变量敏感信息 注入 Pod 配置分离、密码管理
StatefulSet 为有状态服务(数据库、Kafka)提供 稳定的网络标识、持久卷 有状态服务
DaemonSet 在每个 Node 上运行 同一个 Pod(日志收集、监控代理) 节点级守护进程
Job / CronJob 一次性任务定时任务 批处理、定时备份
PersistentVolume (PV) / PersistentVolumeClaim (PVC) 抽象存储资源(NFS、Ceph、云盘) 持久化数据卷
Namespace 多租户/业务隔离的 逻辑分区 多团队共用同一集群
[ ]

3️⃣ 体系结构(Control Plane + Node)

go 复制代码
+---------------------------+
               |  kube-apiserver (REST API)|
               +------------+--------------+
                            |
        +-------------------+-------------------+
        |                   |                   |
+-------v------+   +--------v------+   +--------v------+
| controller-  |   | scheduler    |   | etcd (kv store)|
| manager      |   | (assign Pods)|   +----------------+
+--------------+   +---------------+

   (Control Plane -- 负责全局决策、状态存储)

        |
        |  kubelet + container runtime
        v
+-------------------+    +-------------------+
|   Node 1 (worker) |    |   Node 2 (worker) |
|  kubelet           |    |  kubelet           |
|  container runtime |    |  container runtime |
+-------------------+    +-------------------+
  • kube-apiserver :所有资源的统一入口,提供 kubectl、Dashboard、CI/CD 等客户端的 API。

  • etcd :高可用的 键值存储,持久化集群状态(Pod、ConfigMap、Secret 等)。

  • controller‑manager :一组控制器(ReplicaSet、Deployment、Job...)不断对比 期望状态 vs. 实际状态,并做出相应动作。

  • scheduler:把新建的 Pod 绑定到合适的 Node(考虑资源、亲和性、拓扑等因素)。

  • kubelet (在每个 Node 上)负责 监控本机容器、执行指令、上报状态

  • container runtime:实际启动容器的组件(Docker、containerd、CRI‑O、gVisor 等)。


4️⃣ 常见使用场景

场景 典型解决方案
微服务 用 Deployment + Service + Ingress 组合,实现弹性、灰度发布、流量路由。
大数据 / 机器学习 通过 KubeflowArgo Workflows 编排训练任务,利用 GPU Node 自动调度。
CI/CD GitLab、Jenkins、GitHub Actions 把 CI 产物 (Docker 镜像)直接 kubectl apply 到测试/生产环境。
边缘/IoT 轻量化发行版 k3s / MicroK8s 在树莓派、边缘服务器上运行。
多租户 SaaS Namespace + ResourceQuota + NetworkPolicy 隔离不同客户的资源。
无服务器(Serverless) KnativeOpenFaaSKubeless 把函数映射为短生命周期的 Pod。
灾备/多集群 Cluster FederationVelero 进行跨集群备份、恢复、同步。
[ ]

5️⃣ 与其他容器编排工具的对比

特性 Kubernetes Docker Swarm Apache Mesos Nomad
成熟度 最高(CNCF 项目) Docker 官方入门版 早期大规模作业调度 HashiCorp 轻量化
生态 丰富(Helm、Istio、Prometheus、Knative、Kubeflow 等) 较少(Compose、Stack) 较少(Marathon) 中等(Consul、Vault)
扩展性 插件化(CRD、Webhook) 限制较多 通过框架扩展 简单插件
多租户 Namespace + RBAC + NetworkPolicy 基本不支持 支持但复杂 支持
水平伸缩 自动 HPA/VPA + Cluster Autoscaler 手动 手动/脚本 手动
学习曲线 陡峭 平缓 中等 中等
生产案例 谷歌、亚马逊、微软、阿里、腾讯、华为等 小型团队、开发环境 大规模批处理 中小企业、边缘计算
[ ]

结论 :如果你需要 高可用、弹性伸缩、复杂服务网格、跨云/多租户 ,Kubernetes 是业界事实标准。Docker Swarm 适合快速上手、实验性 场景;k3s、MicroK8s 则是 轻量版 ,适合 边缘/IoT本地开发


6️⃣ 快速上手示例(最小的 Hello‑World)

6.1 创建一个 Deployment(hello.yaml

go 复制代码
apiVersion: apps/v1
kind:Deployment
metadata:
name:hello-deploy
labels:
    app:hello
spec:
replicas:3                 # 3 个副本
selector:
    matchLabels:
      app:hello
template:
    metadata:
      labels:
        app:hello
    spec:
      containers:
      -name:hello
        image:nginx:alpine   # 任意容器镜像
        ports:
        -containerPort: 80

6.2 公开 Service(ClusterIP → NodePort)

go 复制代码
apiVersion: v1
kind:Service
metadata:
name:hello-svc
spec:
type:NodePort          # 暴露到宿主机端口
selector:
    app:hello
ports:
-port:80              # Pod 内部端口
    targetPort:80
    nodePort:30080       # 主机上 30080 端口可访问

6.3 应用到集群

go 复制代码
# 1. 连接到你的 k8s 集群(kubectl 已配置好)
kubectl apply -f hello.yaml

# 2. 查看运行状态
kubectl get pods -l app=hello
kubectl get svc hello-svc

# 3. 在浏览器访问节点 IP + 30080,即可看到 Nginx 默认页面

只需 几行 YAML ,Kubernetes 自动完成 调度、拉取镜像、启动容器、负载均衡


7️⃣ 常用工具生态

类别 常见工具 作用
包管理 HelmKustomize 把一组 YAML 打包、模板化、版本化
监控 & 可观测 PrometheusGrafanaThanosOpenTelemetry 指标、日志、追踪
日志聚合 EFK (Elasticsearch‑Fluentd‑Kibana) Loki + Grafana 集中化日志查询
服务网格 IstioLinkerdConsul Connect 流量管理、熔断、mTLS
CI/CD Argo CDFluxJenkins X GitOps 自动化部署
安全 OPA / GatekeeperKube‑benchKubescape 策略审计、合规检查
存储 RookOpenEBSCSI 插件(AWS EBS、GCE PD、Azure Disk) 动态供给持久卷
服务器无状态 KnativeOpenFaaSKEDA 自动伸缩的函数/事件驱动工作负载
轻量发行版 k3sMicroK8skind(在 Docker 中跑) 本地开发、边缘、CI 测试
[ ]

8️⃣ 常见面试/学习问题(简短答案)

问题 简要回答
Kubernetes 的核心目标是什么? 提供 声明式、自动化 的容器编排平台,负责 部署、伸缩、恢复、服务发现 等全生命周期管理。
Pod 与 Container 有何区别? Pod 是 Kubernetes 调度的最小单元,一组 共享网络/存储 的容器;Container 是实际运行的进程实例。
什么是 Service 的 ClusterIP、NodePort、LoadBalancer? ClusterIP :仅集群内部可访问的虚拟 IP。 NodePort :在每个节点上打开固定端口,外部可通过 <NodeIP>:<NodePort> 访问。 LoadBalancer:在云平台上自动创建外部负载均衡器(ELB/ALB),提供公网 IP。
Horizontal Pod Autoscaler (HPA) 的工作原理? HPA 通过 Metrics Server 读取 CPU、内存或自定义指标,计算目标副本数,然后更新对应 Deployment/ReplicaSetspec.replicas
etcd 在集群中的作用? 负责持久化 所有集群状态(对象元数据、配置),为控制平面提供强一致性的 KV 存储。
kubectl apply 与 kubectl replace 的区别? apply声明式 :只发送差异(patch),适合持续迭代;replace完整覆盖 目标对象,可能导致临时中断。
什么是 DaemonSet? 确保 每个 Node (包括新加入的)上运行 相同的 Pod,常用于日志、监控、网络插件等守护进程。
如何实现滚动升级? 使用 Deployment:K8s 会逐步创建新 Pod,等待就绪后删除旧 Pod,保持期望副本数不变,实现无停机升级。
Kubernetes 中的 Namespace 有哪些作用? 逻辑隔离资源、配额管理(ResourceQuota)、RBAC 权限划分、简化名称冲突。
k3s 与原生 Kubernetes 的区别? k3s 是轻量化发行版,去掉了很多 Alpha/扩展组件,二进制仅 ~40 MB,适合边缘、IoT、开发环境。功能上兼容全部 K8s API。
[ ]

9️⃣ 小结

  • Kubernetes(k8s)容器编排的事实标准 ,提供 声明式 API自愈弹性伸缩服务发现丰富生态

  • • 核心概念 Node / Pod / Deployment / Service / Ingress 等帮助我们把 微服务 抽象为 可扩展、可管理 的单元。

  • • 通过 Helm、GitOps、服务网格、监控/日志 等配套工具,k8s 可以支撑 从单机开发到大规模生产 的全链路。

  • • 对于 小型/边缘 环境,k3s、MicroK8s、kind 提供轻量化的本地/嵌入式版本;而 Docker Swarm 则更适合 快速入门,但在功能和生态上远不如 k8s。

只要掌握 YAML 声明kubectl 基本命令控制平面/工作节点的职责划分 ,就能在几分钟内部署一个可弹性伸缩的服务,随后再逐步引入 Helm、Prometheus、Istio 等进阶组件,构建完整的云原生平台。

一句话概括
Kubernetes = "把一堆容器当作一台自愈的、可伸缩的、可观测的超级服务器"。

相关推荐
爱丽_2 小时前
Docker 从原理到项目落地(镜像 / 容器 / 网络 / 卷 / Dockerfile)
网络·docker·容器
zhen243 小时前
K8s Service
云原生·容器·kubernetes
sbjdhjd4 小时前
RHCE | Web 服务器与 Nginx 全栈详解
linux·nginx·http·云原生·oracle·架构·web
我爱学习好爱好爱5 小时前
Kubernetes 1.29集群上部署Java网站项目
java·容器·kubernetes
执笔为剑5 小时前
1.2、docker环境部署
运维·docker·容器
qhqh3106 小时前
K8S的PV、PVC和storageClass的相关概念及实验
云原生·容器·kubernetes
中国IT7 小时前
第3章:Docker与传统虚拟化比较
运维·docker·容器
luom01028 小时前
使用 Docker 部署 RabbitMQ 的详细指南
docker·容器·rabbitmq
阿望要努力上研究生10 小时前
Docker入门常用指令和Docker概念
运维·docker·容器