欢迎光临
我们一直在努力

Kubernetes 核心网络方案与资源管理(一)

文章目录

    • 一、Kubernetes 网络方案
      • 1. Flannel 方案(轻量级,适合小型集群)
        • 核心定位
        • 核心原理:Overlay 叠加网络
        • 关键补充
      • 2. Calico 方案(高性能,适合大型/复杂集群)
        • 核心定位
        • 核心组件
        • 工作原理
        • 核心优势
      • 方案选型总结
    • 二、Kubernetes 资源管理
      • 1. 管理操作分类
      • 2. 核心基础命令(陈述式)
        • (1)基础信息查看
        • (2)命名空间操作
        • (3)Pod/Deployment 操作
        • (4)Service 暴露(Pod 访问入口)
      • 3. 项目生命周期管理
    • 三、核心总结
      • 1. 网络方案核心
      • 2. 资源管理核心
      • 3. 关键命令记忆

一、Kubernetes 网络方案

1. Flannel 方案(轻量级,适合小型集群)

核心定位

Flannel 是 Kubernetes 主流的 Overlay 网络插件,核心功能是为集群内所有 Pod 分配全集群唯一的虚拟 IP,解决跨节点 Pod 通信问题,适合小型网络、无高并发的简单集群场景。

核心原理:Overlay 叠加网络

在底层物理网络之上封装虚拟隧道,将 Pod 报文封装后通过主机物理网卡转发,本质是「隧道通信」,支持以下 3 种转发模式(常用 UDP、VXLAN):

模式转发层级实现位置性能核心原理
UDP 三层(IP) 用户态(flanneld 进程) 较差(多一次用户态/内核态切换) 1. Pod 报文经 docker0/cni0 到 flannel0 虚拟网卡;2. flanneld 进程封装 UDP 报文,通过 Etcd 路由表找到目标节点;3. 目标节点 flanneld 解包,转发到目标 Pod。
VXLAN 二层(MAC) 内核态 较好(内核直接处理) 1. Pod 报文经 docker0/cni0 到 flannel.1(VXLAN 网卡);2. 内核添加 VXLAN 头部封装 UDP 报文,通过物理网卡发送;3. 目标节点 flannel.1 解包,转发到目标 Pod(默认端口 4789)。
关键补充
  • Etcd 作用:存储 Flannel 可分配的 IP 段、维护 Pod 节点路由表;
  • VXLAN vs VLAN:VXLAN 支持 1677 万+ 虚拟网络(VLAN 仅 4096),可跨物理网络/数据中心,是当前主流模式。

2. Calico 方案(高性能,适合大型/复杂集群)

核心定位

Calico 不依赖隧道/NAT,而是将每个节点当作「路由器」,通过 BGP 协议同步路由规则,结合 iptables 实现安全策略,性能损耗极低,适合大型、复杂网络架构的集群。

核心组件
组件作用
Calico CNI 插件 与 Kubernetes 对接,供 kubelet 调用创建 Pod 网络
Felix 维护宿主机路由规则、转发信息库(FIB)
BIRD 基于 BGP 协议分发路由规则(类似路由器)
Confd 配置管理组件
工作原理
  • Calico 为每个 Pod 创建 veth pair 设备(一端在 Pod 内,一端在宿主机);
  • Felix 在宿主机为每个 veth pair 配置路由规则;
  • Pod 报文通过 veth pair 到宿主机,宿主机根据路由规则(BIRD 同步)转发到目标节点;
  • 目标节点接收报文后,转发到目标 Pod。
  • 核心优势
    • 无报文封装,性能损耗最低;
    • 支持复杂网络策略(如 Pod 间访问控制);
    • 适合集群扩容、多设备接入的复杂场景。

    方案选型总结

    场景推荐方案
    小型集群、简单网络、无高并发 Flannel(VXLAN 模式)
    大型集群、复杂网络策略、高性能需求 Calico

    二、Kubernetes 资源管理

    1. 管理操作分类

    Kubernetes 资源管理分为两类,核心区别如下:

    类型特点适用场景
    陈述式(命令式) 直接通过 kubectl 命令操作资源,简单直观 快速调试、临时操作(如查看资源、创建测试 Pod)
    声明式(配置清单式) 通过 YAML/JSON 文件定义资源最终状态,k8s 自动校准 生产环境、批量管理、版本控制

    2. 核心基础命令(陈述式)

    (1)基础信息查看

    kubectl version # 查看 k8s 版本
    kubectl cluster-info # 查看集群信息
    kubectl api-resources # 查看资源对象简写(如 pod/Po、deployment/Deploy)
    kubectl get nodes # 查看节点状态(Ready/NotReady)
    kubectl get ns # 查看所有命名空间(namespace)
    kubectl get all -n <命名空间> # 查看指定命名空间所有资源
    kubectl describe <资源类型>/<名称> -n <命名空间> # 查看资源详细信息(如 kubectl describe pod nginx-xxx)

    (2)命名空间操作

    kubectl create ns <名称> # 创建命名空间(如 kubectl create ns app)
    kubectl delete ns <名称> # 删除命名空间

    (3)Pod/Deployment 操作

    # 创建 Deployment(副本控制器,管理 Pod 生命周期)
    kubectl create deployment <名称> –image=<镜像> –port=<端口> –replicas=<副本数> -n <命名空间>
    # 示例:创建 3 个 nginx 1.14 副本,暴露 80 端口
    kubectl create deployment nginx –image=nginx:1.14 –port=80 –replicas=3

    # 扩缩容 Deployment
    kubectl scale deployment <名称> –replicas=<数量> -n <命名空间>
    # 示例:缩容为 2 个副本
    kubectl scale deployment nginx –replicas=2

    # 删除 Deployment(会自动删除关联 Pod)
    kubectl delete deployment <名称> -n <命名空间>

    # 登录 Pod 容器
    kubectl exec -it <Pod 名称> -n <命名空间> — /bin/bash

    # 查看 Pod 日志
    kubectl logs <Pod 名称> -n <命名空间>

    (4)Service 暴露(Pod 访问入口)

    Service 是 Pod 的访问代理,解决 Pod 动态 IP 问题,核心类型及端口说明:

    Service 类型用途端口说明
    ClusterIP(默认) 集群内部访问 port:集群内访问 Service 的端口(如 ClusterIP:80)
    NodePort 集群外部访问 nodePort:节点端口(范围 30000-32767),外部通过 节点IP:nodePort 访问
    LoadBalancer 云平台负载均衡 基于云厂商提供的 LB 暴露服务
    ExternalName 映射外部域名 将 Service 映射到外部域名

    核心端口关系:

    • nodePort(外部)→ port(集群内)→ targetPort(Pod 端口)→ containerPort(容器端口)

    暴露 Service 命令:

    # 暴露 Deployment 为 NodePort 类型 Service
    kubectl expose deployment <名称> –type=NodePort –port=<集群端口> –target-port=<Pod 端口> -n <命名空间>
    # 示例:暴露 nginx Deployment,集群内端口 80,映射 Pod 80 端口,外部节点端口随机分配
    kubectl expose deployment nginx –type=NodePort –port=80 –target-port=80

    # 查看 Service 信息
    kubectl get svc -n <命名空间> -o wide

    3. 项目生命周期管理

    完整生命周期:创建 → 发布 → 更新 → 回滚 → 删除

    阶段核心操作示例命令
    创建 创建 Deployment 管理 Pod kubectl create deployment nginx –image=nginx:1.14 –replicas=3
    发布 暴露 Service 提供访问入口 kubectl expose deployment nginx –type=NodePort –port=80
    更新 修改 Pod 镜像版本(滚动更新) kubectl set image deployment/nginx nginx=nginx:1.15
    回滚 回滚到历史版本 kubectl rollout undo deployment/nginx(回滚上一版本)kubectl rollout history deployment/nginx(查看更新历史)
    删除 删除 Deployment 和 Service kubectl delete deployment nginxkubectl delete svc nginx

    关键补充:

    • 滚动更新:更新时先创建新 Pod,再删除旧 Pod,无服务中断;
    • 动态监听 Pod 状态:kubectl get pods -w(实时查看更新/扩缩容过程)。

    三、核心总结

    1. 网络方案核心

    • Flannel:轻量级 Overlay 网络,通过隧道(VXLAN 为主)实现 Pod 通信,适合小型集群;
    • Calico:基于 BGP 路由的无隧道方案,性能高、支持复杂策略,适合大型/复杂集群。

    2. 资源管理核心

    • 陈述式命令(kubectl)适合快速操作,声明式(YAML)适合生产环境;
    • Deployment 是管理 Pod 的核心控制器,Service 是 Pod 的稳定访问入口;
    • 项目生命周期核心:通过 Deployment 管理 Pod 版本,Service 暴露访问,支持滚动更新/回滚,保证服务高可用。

    3. 关键命令记忆

    • 查看资源:kubectl get <资源类型>(如 pod、svc、deployment);
    • 创建/更新:kubectl create deployment / kubectl set image;
    • 暴露服务:kubectl expose deployment;
    • 扩缩容/回滚:kubectl scale / kubectl rollout undo。
    赞(0)
    未经允许不得转载:171主机测评 » Kubernetes 核心网络方案与资源管理(一)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址