K8S 学习笔记——核心概念与工作机制(二)

在上一章中,我们初步认识了 Kubernetes 的整体架构------Master-Worker 模型,并了解了各个核心组件的基本职责。本章我们将继续深入,学习 K8S 中几个最关键的核心概念和工作机制,这是理解和使用 Kubernetes 的基石。


一、Pod:K8S 的最小调度单元📦

什么是 Pod?

Pod 是 Kubernetes 中最小的、可部署和管理的计算单元。你可以把它想象成一个 "逻辑主机" ,它包含一个或多个紧密相关的容器,这些容器共享存储、网络和运行上下文。

为什么需要 Pod?

  • 亲密性协作:有些容器需要紧密协作(比如一个容器写日志,另一个容器处理日志),它们需要共享存储卷、本地网络(localhost 通信)等资源。

  • 生命周期一致:Pod 内的容器同时被创建、调度和销毁,保证了协作服务的生命周期一致性。

  • 资源隔离与共享的平衡:容器之间可以通过 localhost 直接通信,共享 Volume,但又保持一定的隔离性。

Pod 示例(YAML 片段)

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod
spec:
  containers:
  - name: web-app
    image: nginx:latest
    ports:
    - containerPort: 80
  - name: log-collector
    image: busybox:latest
    command: ["sh", "-c", "tail -f /dev/null"]

二、Service:服务发现与负载均衡

问题背景

Pod 是短暂的、可随时被销毁和重建的,它的 IP 地址也会随之变化。那么,其他服务如何稳定地访问到这些动态变化的 Pod 呢?

Service 的作用

Service 为一组 Pod 提供稳定的访问入口(一个固定的虚拟 IP 和 DNS 名称),并自动实现负载均衡。它是 K8S 中 服务发现 的核心机制。

三种常用类型

  1. ClusterIP(默认):在集群内部提供一个虚拟 IP,仅供集群内其他服务访问。

  2. NodePort :在 ClusterIP 基础上,在每个 Node 上开放一个端口(30000-32767),外部可通过 NodeIP:NodePort 访问。

  3. LoadBalancer:基于云服务商的负载均衡器(如 AWS ELB、GCP LB),分配一个外部可访问的 IP。

Service YAML 示例

复制代码
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app  # 选择具有标签 app=my-app 的 Pod
  ports:
  - protocol: TCP
    port: 80        # Service 端口
    targetPort: 8080 # Pod 内容器端口
  type: ClusterIP

三、 Ingress:集群入口与路由管理

为什么需要 Ingress?

Service 的 NodePort 或 LoadBalancer 虽然能暴露服务,但一个服务一个外部 IP/端口,不方便管理(端口冲突、成本高)。Ingress 提供了 HTTP/HTTPS 路由规则,让你可以通过一个入口(通常是一个 IP)根据域名或路径将流量分发到不同的后端 Service。

Ingress Controller

Ingress 只是一个规则声明,真正实现路由的是 Ingress Controller(如 Nginx Ingress Controller、Traefik),它负责监听 Ingress 规则并动态更新负载均衡器的配置。

Ingress 示例

复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: blog.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: blog-service
            port:
              number: 80
  - host: api.example.com
    http:
      paths:
      - path: /v1
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 8080

四、Volume 与持久化存储

容器存储的挑战

容器中的文件系统是临时的,容器重启后数据会丢失。而很多应用(如数据库)需要数据持久化。

Volume

Volume 是 Pod 中可被多个容器访问的共享目录,其生命周期与 Pod 绑定。K8S 支持多种 Volume 类型(emptyDir、hostPath、云存储等)。

PersistentVolume(PV)与 PersistentVolumeClaim(PVC)

为了解耦存储细节与应用定义,K8S 引入了两个概念:

  • PersistentVolume(PV):由管理员预先创建的存储资源(如云磁盘、NFS 等)。

  • PersistentVolumeClaim(PVC):用户对存储的"申请单",Pod 通过 PVC 使用 PV。

PVC 示例

复制代码
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

然后在 Pod 中挂载:

复制代码
spec:
  containers:
  - name: app
    image: my-app
    volumeMounts:
    - mountPath: "/data"
      name: storage
  volumes:
  - name: storage
    persistentVolumeClaim:
      claimName: my-pvc

五、ConfigMap 与 Secret:配置与敏感信息管理

配置与代码分离

将配置信息(如环境变量、配置文件)从容器镜像中分离,便于不同环境(开发、测试、生产)使用同一镜像。

ConfigMap

用于存储非敏感的配置数据,以键值对或配置文件形式存在。

复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  log_level: "info"
  config.properties: |
    server.port=8080
    cache.enabled=true

Secret

用于存储敏感信息(密码、令牌、密钥),以 Base64 编码存储(注意:Base64 不是加密,仅适合在集群内传输)。

复制代码
apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  username: YWRtaW4=  # admin
  password: cGFzc3dvcmQ=  # password

六、本章小结📝

概念 作用 类比
Pod 最小调度单元,包含一个或多个容器 一台逻辑服务器
Service 为 Pod 提供稳定的访问入口和负载均衡 负载均衡器 + 服务注册中心
Ingress 提供 HTTP/HTTPS 路由规则,统一入口 反向代理(如 Nginx)路由配置
Volume/PV/PVC 提供持久化存储,解耦存储细节 云硬盘 + 申请流程
ConfigMap/Secret 管理配置与敏感信息,实现配置与镜像分离 配置文件仓库 + 密钥管理器

这些核心概念构成了 Kubernetes 声明式 API 的基础。我们通过 YAML 文件描述"期望的状态"(比如"我需要一个包含 3 个副本的 Web 应用,使用某配置,挂载某存储"),K8S 会自动将其变为现实,并持续维持这个状态。

相关推荐
运维成长记2 小时前
关于k8s和harbor脚本安装的一系列操作
云原生·容器·kubernetes
Yupureki2 小时前
《算法竞赛从入门到国奖》算法基础:入门篇-贪心算法(下)
c语言·c++·学习·算法·贪心算法
am心2 小时前
学习笔记-添加购物车
笔记·学习
石去皿2 小时前
Transformer超全通关笔记:从「Attention 为什么 work」到「工业级落地」的数学+代码+工程万字解析
笔记·深度学习·transformer
来两个炸鸡腿2 小时前
【Datawhale组队学习202601】Base-NLP task02 预训练语言模型
学习·语言模型·自然语言处理
junziruruo2 小时前
损失函数(以FMTrack频率感知交互与多专家模型的损失为例)
图像处理·深度学习·学习·计算机视觉
li星野2 小时前
OpenCV4X学习-图像边缘检测、图像分割
深度学习·学习·计算机视觉
speop2 小时前
vibe-vibe |基础版
学习
知识分享小能手2 小时前
Oracle 19c入门学习教程,从入门到精通,SQL语言基础详解:语法、使用方法与综合案例(5)
sql·学习·oracle