找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

150

积分

0

好友

18

主题
发表于 昨天 02:13 | 查看: 3| 回复: 0

概念介绍

  • Pod

    • 书面概念:Kubernetes 中可以创建和管理的最小、最简单的可部署计算单元。
    • 实际理解:类似于一台虚拟机,其中可以运行多个容器。容器之间可以通过 localhost 通信,并共享文件目录。同一 Pod 内多个容器监听相同端口会导致冲突。
    • 通常每个 Pod 只运行一个容器。如果使用多容器 Pod,这些容器的业务应紧密相关。
    • Pod 通常通过 Deployment、StatefulSet 等资源管理,而非直接创建。本文使用 Deployment。
  • Deployment

    • 用于管理 Pod,支持自动创建、更新和扩缩容。
    • 自动创建:导入 Deployment 配置文件后,Kubernetes 自动拉取镜像并创建容器。
    • 更新 Pod:修改 Deployment 配置中的镜像版本,系统会平滑地启动新 Pod 并终止旧 Pod,过渡方式可配置。
    • 扩缩容:通过修改配置参数动态增加或减少 Pod 数量,支持基于 CPU 和内存使用率的自动扩缩容。
    • 注意:Deployment 管理的是 Pod 级别。例如,一个 Pod 包含容器 A 和 B,扩容时会复制整个 Pod(包含 A 和 B),而非单独增加容器。
  • Service

    • 书面概念:为一组动态变化的 Pod 提供稳定的访问抽象层。
    • 实际理解:提供固定的网络访问入口。Pod IP 是动态分配的,每次重启可能变化。Service 为服务(如 Nginx、Gateway、Nacos)提供固定 IP,并通过负载均衡将流量转发到健康的 Pod(默认轮询)。
  • Volumes

    • 存储卷,生命周期与所属 Pod 相同(Pod 删除则卷消亡),除非使用 PersistentVolume(持久存储卷)。
    • 示例:为 Nginx 提供配置文件时,先创建名为 nginx-config 的 ConfigMap,添加 key 为 nginx.conf、value 为配置内容的键值对。然后在 Deployment 中将 nginx-config 定义为 Pod 的 ConfigMap 类型 Volume,并挂载到容器内的 /etc/nginx/nginx.conf。
  • ConfigMap

    • 键值对结构的配置文件对象,用于存储配置文件、环境变量等,实现配置与镜像分离(不存储敏感信息)。
    • 注意:ConfigMap 更新后需重新部署 Pod 才能生效。
    • 结构:一个 ConfigMap 对象可包含多个键值对。

Deployment 配置

Deployment 配置涵盖基础信息、副本策略、Pod 模板、容器配置、资源配置和存储配置(如 Nginx 配置文件)。

  • 基础信息:设置 API 版本、资源类型、名称和标签。
  • 副本策略:配置 Pod 选择器和副本数量。
  • Pod 模板:定义 Pod 名称和标签(需与 selector 匹配)。
  • 容器配置:指定容器镜像、拉取策略、名称和端口。
    • 镜像:可使用现有镜像或自定义镜像(通过 Jenkins 等工具构建)。Kubernetes 自动拉取镜像并更新 Pod。
    • 镜像拉取策略:可选 IfNotPresent(本地有则不拉取)或 Always(总是拉取最新)。本文使用 IfNotPresent,结合 Jenkins 构建不同标签的镜像(如 nginx:202511291717),确保节点无对应标签时拉取新镜像,避免不必要的下载。
  • 资源配置:指定容器所需的 CPU 和内存资源。
  • 存储配置:挂载 ConfigMap 作为配置文件(如 Nginx 配置)。
# 基础信息
apiVersion: apps/v1 # 使用 Deployment API 版本
kind: Deployment    # 资源类型为 Deployment
metadata:
  labels:
    app: nginx      # Deployment 的标签,用于识别
  name: nginx       # Deployment 名称
spec:
  # 副本策略
  replicas: 1       # 只运行 1 个 Pod 副本
  selector:
    matchLabels:
      app: nginx    # 选择管理哪些 Pod(匹配 template 中的 labels)
  # Pod 模板
  template:
    metadata:
      labels:
        app: nginx  # Pod 的标签,必须与 selector 匹配
    # 容器配置
    spec:
      containers:
      - image: 'registry.xxxxx.com/nginx:xxx'   # 私有镜像仓库地址
        imagePullPolicy: IfNotPresent           # 镜像拉取策略(本地有就不拉取)。如果希望总是拉取新镜像,可设置为 Always。本文通过 Jenkins 部署,镜像标签每次更新(如 nginx:build-123),节点无此镜像时会自动拉取,故使用 IfNotPresent
        name: nginx                             # 容器名称
        # 容器暴露的端口(主要起文档作用,非必需配置)
        ports:
          - containerPort: 80
            protocol: TCP
          - containerPort: 443
            protocol: TCP
        # 资源配置
        resources:
          requests:
            cpu: '1'      # 请求 1 核 CPU
            memory: 2Gi   # 请求 2GB 内存
        # 存储配置
        volumeMounts:
          - name: nginx-config
            mountPath: /etc/nginx/nginx.conf  # 挂载到容器内的文件路径
            subPath: nginx.conf               # 只挂载 configMap 中的 nginx.conf 键
      volumes:
        - name: nginx-config
          configMap:
            name: nginx-config                 # 使用的 ConfigMap 名称

Service 配置

Service 用于网络配置。由于 Nginx 涉及外部访问(通过云服务商配置),本文以网关(Gateway)的 Service 为例说明。

  • Nginx 外部访问思路:
    • 设置 Service 类型为 LoadBalancer。
    • 选择私网负载均衡器。
    • 创建弹性网卡绑定负载均衡器。
  • Gateway Service 配置:
    • 类型为 ClusterIP。
    • 设置名称、标签。
    • 选择器匹配标签为 app:gateway 的 Pod。
    • 配置端口映射(Service 端口和目标 Pod 端口)。
# 基础信息
apiVersion: v1    # 使用 Core API,Service 是核心资源
kind: Service     # 资源类型为 Service
metadata:
  name: gateway     # Service 名称
  labels:
    app: gateway    # Service 的标签,用于资源筛选和识别
# 核心配置
spec:
  selector:
    app: gateway        # 关键:选择标签为 app:gateway 的 Pod 作为后端
  # 端口映射
  ports:
  - protocol: TCP
    port: 8080        # Service 对外暴露的端口
    targetPort: 8080  # 后端 Pod 容器的实际端口
  # 服务类型
  type: ClusterIP
  # 通过云服务商创建外部负载均衡器(公网访问)

整个 Kubernetes 网络流量流向简介(示例之一)

  • 外部流量流向:Nginx Service → Nginx Pod → Nginx 服务 → Gateway Service → Gateway Pod → Gateway 服务 → 目标服务 Pod。
  • 具体路径:外网 → 弹性网卡 → 私网负载均衡器 → Nginx Service → Nginx Pod → Nginx 服务 → Gateway Service → Gateway Pod → Gateway 服务 → 相应服务 Pod → 相应服务。

备注

网关和其他服务需通过 Nacos 获取配置并注册服务,因此 Nacos 也需配置 Service(方式类似 Gateway)。读者可自行实践。

您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-1 13:33 , Processed in 0.096994 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表