文章目录
- 一、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# 扩缩容 Deploymentkubectl scale deployment<名称>--replicas=<数量>-n<命名空间># 示例:缩容为 2 个副本kubectl scale deployment nginx --replicas=2# 删除 Deployment(会自动删除关联 Pod)kubectl delete deployment<名称>-n<命名空间># 登录 Pod 容器kubectlexec-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 类型 Servicekubectl 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 wide3. 项目生命周期管理
完整生命周期:创建 → 发布 → 更新 → 回滚 → 删除
| 阶段 | 核心操作 | 示例命令 |
|---|---|---|
| 创建 | 创建 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。