K8s 运维系列 | 第 1 天:Kubernetes 入门——什么是 K8s 与核心架构全景

Kubernetes(简称 K8s)是当今云原生领域最核心的容器编排平台。自 2014 年由 Google 开源以来,它已经从一个实验性项目成长为事实上的行业标准,被 Netflix、Uber、Spotify 以及无数中小企业广泛采用。无论是运维工程师、DevOps 从业者还是后端开发,掌握 Kubernetes 已经从”加分项”变成了”必备技能”。

K8s 运维 第1天

在本系列接下来的 30 天里,我们将从零基础开始,循序渐进地带你走完全栈 K8s 运维之路。今天的第一篇,我们要解决的恰恰是最根本的问题——Kubernetes 到底是什么,它的核心架构如何工作,为什么它能成为容器编排的王者。

一、Kubernetes 与容器技术的关系

在深入架构之前,我们需要理清几个容易混淆的概念。容器(Container)是通过操作系统级别的虚拟化技术,将应用及其依赖打包成独立运行单元的技术,最典型的实现是 Docker。而容器编排(Container Orchestration)则是在多台物理机或虚拟机上,对容器的部署、调度、扩缩容、服务发现、负载均衡进行自动化管理。

Kubernetes 正是解决容器编排问题的最成熟工具。想象一下,如果你的应用需要运行在 100 台服务器上,每台服务器部署 50 个容器,当一台服务器宕机时,你需要手动的把上面的容器迁移到其他地方,还要重新配置网络、存储、负载均衡……这几乎是不可能的任务。Kubernetes 自动帮你完成了这一切。

# 一个最简单的 Kubernetes 部署示例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

上面的 YAML 告诉 Kubernetes:请帮我运行 3 个 nginx 容器,如果其中任何一个挂了,就自动补一个新的。这就是 K8s 最基础的能力——声明式 API。你只需告诉系统你想要的”期望状态”,Kubernetes 负责将其变为现实。

二、Kubernetes 核心架构总览

Kubernetes 的架构设计遵循”控制平面 + 工作节点”的模式,由控制平面负责集群决策和全局视图,工作节点负责运行实际的应用容器。

2.1 控制平面(Control Plane)

控制平面是集群的”大脑”,包含以下核心组件:

控制平面组件
├── kube-apiserver      # API 服务器,所有操作的入口
├── etcd                 # 分布式键值存储,保存集群所有状态
├── kube-scheduler       # 调度器,决定 Pod 分配到哪个节点
├── kube-controller-manager # 控制器管理器,运行各类控制器
└── cloud-controller-manager # 云控制器管理器(可选)

kube-apiserver 是整个集群的网关,所有组件(包括用户使用的 kubectl 命令)都必须通过它进行交互。它暴露 HTTP REST API,验证请求并更新 etcd 中的集群状态。

etcd 是一个高可用的分布式键值数据库,Kubernetes 所有的集群状态——Pod 信息、配置、Secret、网络规则——都存储在 etcd 中。etcd 的可靠性直接决定了整个集群的可靠性,生产环境中通常部署 3 或 5 个 etcd 节点以实现高可用。

kube-scheduler 负责监听新创建的 Pod,根据资源需求、节点状态、亲和性规则等因素,选择最合适的节点来运行 Pod。它不做任何资源预留,只发出调度决策,实际的资源占用由 kubelet 负责。

kube-controller-manager 运行多个控制器进程,包括 Node 控制器(监控节点状态)、ReplicaSet 控制器(确保副本数正确)、Deployment 控制器(管理滚动更新)等。每个控制器本质上是一个”控制循环”——不断比较当前状态与期望状态,并驱动系统向期望状态靠拢。

2.2 工作节点(Worker Node)

工作节点是实际运行应用容器的地方,包含以下组件:

工作节点组件
├── kubelet              # 节点代理,管理本节点上的 Pod 生命周期
├── kube-proxy           # 网络代理,实现 Service 网络
├── Container Runtime    # 容器运行时(containerd / Docker / CRI-O)
└── Pods                 # 实际运行的应用容器

kubelet 是控制平面在工作节点上的”代理人”。它从 API Server 拉取分配给本节点的 Pod 规格,调用容器运行时创建和管理容器,同时向 API Server 汇报节点状态。kubelet 每秒都在检查容器的健康状态,如果容器退出,会根据重启策略自动重启。

kube-proxy 负责 Service 的网络转发。它为每个 Service 在节点上维护 iptables 或 IPVS 规则,确保发往 Service Cluster IP 的流量被正确转发到后端 Pod。

Container Runtime 是实际创建和运行容器的引擎。早期 K8s 使用 Docker,现在推荐使用 containerd 或 CRI-O,它们更符合 Kubernetes 的 CRI(Container Runtime Interface)标准。

2.3 核心抽象对象

Kubernetes 定义了一套丰富的抽象对象来描述集群状态,其中最基础的包括:

对象 作用
Pod 最小调度单位,包含一个或多个紧密耦合的容器
Deployment 管理无状态应用的副本和滚动更新
Service 为一组 Pod 提供稳定的网络端点
ConfigMap 存储非敏感配置数据
Secret 存储敏感数据(密码、密钥)
Namespace 实现集群内资源隔离
{
  "apiVersion": "v1",
  "kind": "Pod",
  "metadata": {
    "name": "example-pod",
    "namespace": "default"
  },
  "spec": {
    "containers": [
      {
        "name": "app",
        "image": "my-app:latest",
        "ports": [{"containerPort": 8080}]
      }
    ]
  }
}

三、Kubernetes 与 Docker 的关系

很多人把 Kubernetes 和 Docker 混为一谈,其实它们定位完全不同。Docker 解决了”如何打包和运行一个容器”的问题,Kubernetes 解决的是”如何在大规模分布式环境中管理成千上万个容器”的问题。

# Docker 层面:运行一个容器
docker run -d --name my-nginx -p 80:80 nginx:1.21

# Kubernetes 层面:通过 kubectl 管理 Pod
kubectl create deployment my-nginx --image=nginx:1.21 --replicas=3
kubectl expose deployment my-nginx --port=80 --type=ClusterIP
kubectl scale deployment my-nginx --replicas=10

在 Kubernetes 中,你不再直接操作 Docker 命令,而是通过 kubectl 和声明式 YAML 与集群交互。Kubernetes 通过 CRI 接口支持多种容器运行时,Docker 只是其中之一。

四、为什么选择 Kubernetes

除了功能强大,Kubernetes 还有几个不可替代的优势:

声明式 API 与期望状态驱动:你只需描述”我想要什么”,而不是”怎么做”。这让运维工作从手工脚本变成了声明式配置,更容易版本化、审查和回滚。

成熟的生态系统:CNCF 基金会下围绕 K8s 形成了完整的生态——Helm 负责打包、Prometheus 负责监控、Istio 负责服务网格、ArgoCD 负责 GitOps。你几乎能找到任何场景的成熟工具。

多云与混合云能力:Kubernetes 不绑定任何特定云平台,你可以在 AWS、阿里云、腾讯云、私有机房之间自由切换,实现真正的多云部署。

自动化的运维能力:自动扩缩容(HPA)、自动故障恢复、滚动更新、蓝绿发布等高级特性,让应用的运维可靠性大幅提升。

五、常见问题

Q1:学习 Kubernetes 需要什么前置知识?
建议先掌握 Linux 基本命令、Docker 容器技术、YAML 语法和网络基础知识。理解了这些之后,再学习 K8s 会顺畅很多。

Q2:Kubernetes 适合小型团队吗?
K8s 的复杂度确实偏高,对于只有几台服务器的场景,直接使用 Docker Compose 可能更简单。但当你的应用开始扩展到多台服务器、多个团队时,K8s 的自动化和治理能力会展现出巨大价值。

Q3:K8s 和 Docker Swarm 有什么区别?
Docker Swarm 更简单轻量,但功能也相应较弱。K8s 功能全面,生态成熟,是社区和企业的首选。

六、总结

今天我们完成了 Kubernetes 全景之旅的第一站:理解了容器编排的概念、Kubernetes 的核心架构(控制平面 + 工作节点)、关键组件的职责,以及它与 Docker 的关系。记住一个核心思想——Kubernetes 通过声明式 API 和期望状态驱动,帮你自动化管理分布式容器应用的一切。

在接下来的 29 天里,我们会逐篇深入:从环境搭建开始,到 Pod、Deployment、Service 等核心对象,再到存储、网络、安全、监控、CI/CD、GitOps 等高级主题,最终帮你建立完整的 K8s 运维知识体系。

# 验证你的 K8s 环境是否就绪
kubectl version --short
kubectl cluster-info
kubectl get nodes

下期预告:明天我们将进入实操环节,学习如何使用 minikube 和 kubeadm 快速搭建一套 Kubernetes 集群,从零开始亲手创建一个属于自己的 K8s 环境。

微信二维码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容