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 或裸金属),运行 kubelet 与 container 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)

+---------------------------+
               |  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) Knative

OpenFaaSKubeless 把函数映射为短生命周期的 Pod。

灾备/多集群 Cluster Federation

Velero 进行跨集群备份、恢复、同步。


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

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)

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 应用到集群

# 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️⃣ 常用工具生态

类别

常见工具

作用

包管理 Helm

Kustomize

把一组 YAML 打包、模板化、版本化

监控 & 可观测 Prometheus

GrafanaThanosOpenTelemetry

指标、日志、追踪

日志聚合 EFK

(Elasticsearch‑Fluentd‑Kibana)
Loki + Grafana

集中化日志查询

服务网格 Istio

LinkerdConsul Connect

流量管理、熔断、mTLS

CI/CD Argo CD

FluxJenkins X

GitOps 自动化部署

安全 OPA / Gatekeeper

Kube‑benchKubescape

策略审计、合规检查

存储 Rook

OpenEBSCSI 插件(AWS EBS、GCE PD、Azure Disk)

动态供给持久卷

服务器无状态 Knative

OpenFaaSKEDA

自动伸缩的函数/事件驱动工作负载

轻量发行版 k3s

MicroK8skind(在 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/ReplicaSet 的 spec.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 = “把一堆容器当作一台自愈的、可伸缩的、可观测的超级服务器”。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐