Skip to content

第1章 Kubernetes 核心概念快速回顾

本章为零基础读者准备。如果你已经熟悉 Pod、Deployment、Label、Namespace 等概念,可以快速浏览或跳过。


1.1 什么是 Kubernetes

Kubernetes(常简称为 K8s)是一个用于自动部署、扩展和管理容器化应用的开源平台。它把一堆物理机或虚拟机抽象成一个统一的计算资源池,让你可以用声明式的方式(YAML)告诉集群“我想要什么”,集群负责帮你实现。

核心能力

能力说明
调度把容器放到合适的节点上运行
自愈容器挂了自动重启、重新调度
扩缩容根据负载自动或手动增加/减少副本
服务发现让应用互相找到彼此
配置管理管理配置、密钥、存储

1.2 Pod:最小的调度单元

Pod 是 Kubernetes 中最小可部署单元。一个 Pod 可以包含一个或多个容器,这些容器:

  • 共享同一个网络命名空间(IP 地址、端口空间)
  • 共享存储卷(Volume)
  • 被一起调度到同一个节点上

Pod 示例

yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: nginx
      image: nginx:alpine
      ports:
        - containerPort: 80

Pod 的特点

  • 生命周期短暂:可能因扩缩容、节点故障、滚动更新被销毁重建。
  • IP 不固定:Pod 重建后通常会获得新的 IP。
  • 数量动态变化:Deployment 可以随时调整副本数。

正是因为 Pod 的这些特点,我们才需要 Service 来提供稳定的访问入口。


1.3 Deployment:管理 Pod 的副本

通常不会直接创建 Pod,而是通过 Deployment 来管理一组相同的 Pod 副本。

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: nginx:alpine
          ports:
            - containerPort: 80

Deployment 会保证集群中始终有 3 个 app=web 标签的 Pod 在运行。


1.4 Label 与 Selector

Label(标签) 是附加在 Kubernetes 对象上的键值对,用于标识和选择对象。

yaml
metadata:
  labels:
    app: web
    tier: frontend
    env: production

Selector(选择器) 用于根据 Label 找到匹配的对象。Service 就是通过 selector 来决定哪些 Pod 是自己的后端。


1.5 Namespace:资源隔离

Namespace 用于在同一个集群中划分不同的逻辑空间,比如按团队、项目或环境划分。

bash
# 查看所有命名空间
kubectl get namespaces

# 在指定命名空间创建资源
kubectl apply -f my-service.yaml -n production

同一个 Namespace 内的 Service 可以通过短名称访问,跨 Namespace 需要加命名空间后缀。


1.6 kubectl 基础命令

命令作用
kubectl get pods查看 Pod
kubectl get svc查看 Service
kubectl apply -f file.yaml应用 YAML
kubectl delete -f file.yaml删除 YAML 对应的资源
kubectl describe svc <name>查看 Service 详情
kubectl logs <pod-name>查看 Pod 日志
kubectl exec -it <pod-name> -- sh进入 Pod 容器

1.7 本章小结

  • Kubernetes 通过 Pod 运行容器,Pod 是动态、短命、IP 不固定的。
  • Deployment 管理一组 Pod 副本。
  • Label 和 Selector 是 Kubernetes 中对象关联的核心机制。
  • Namespace 提供逻辑隔离。
  • 下一章将解释:既然 Pod 这么不稳定,应用之间如何稳定通信?

本章练习

  1. 创建一个包含 2 个副本的 Nginx Deployment。
  2. 查看 Pod 的 IP 地址,然后删除一个 Pod,观察新 Pod 的 IP 是否变化。
  3. 思考:如果另一个应用需要访问这些 Nginx Pod,直接写 Pod IP 有什么问题?