Kubernetes 学习笔记(一)| 理解 Pod 与 Service 的本质

本文记录了我在使用 OrbStack 搭建本地 Kubernetes 环境时的学习过程,从 Pod 到 Service,再到 ClusterIP 的本质理解,帮助我更清晰地建立起对 K8s 的整体认知体系。


🧠 为什么学习 Kubernetes?

随着微服务架构的广泛应用,Kubernetes 已经成为容器编排的事实标准。相比 Docker,K8s 更强调“平台级抽象能力”,我希望通过本地实践,从原理理解、命令熟悉到最终搭建一套 CI/CD 流程。


🚀 本地环境搭建(OrbStack)

OrbStack 是一款轻量但强大的容器 & 虚拟机平台,内置 Kubernetes 支持,适合 macOS 用户。

  • 安装方式:

    1
    brew install --cask orbstack
  • 安装后通过 GUI 启动 K8s(注意可能会自动拉起 Istio、Ingress 等组件)

查看 K8s 基本信息:

1
2
kubectl get nodes
kubectl get pods -A

📦 Pod 本质理解

✅ Pod 是 Kubernetes 中的 最小调度单位,每个 Pod 通常包含一个业务容器,也可以包含 Sidecar 辅助容器。

🧱 Pod 的两种模式:

模式 示例 特点
单容器 Pod(最常见) 一个 SpringBoot 实例 1个容器,独立运行
多容器 Pod(Sidecar 模式) 应用 + Istio proxy 共享网络/卷,生命周期绑定
1
2
3
4
5
6
7
# 示例:user-service Pod(单容器)
apiVersion: v1
kind: Pod
spec:
containers:
- name: user
image: your-registry/user-service

🔗 多副本与负载均衡

微服务(如 user-service)在 Kubernetes 中不是“多个服务一个 Pod”,而是:

1
多个 Pod(每个一个容器)+ Service 做负载均衡

通过 Deployment 管理多个 Pod 副本:

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: apps/v1
kind: Deployment
spec:
replicas: 3
selector:
matchLabels:
app: user-service
template:
spec:
containers:
- name: user
image: ...

🌐 理解 ClusterIP

ClusterIP 是最常见的 K8s Service 类型,用于在 集群内部提供负载均衡的虚拟 IP

特点如下:

项目 描述
类型 ClusterIP(默认)
作用 Pod 组的“稳定访问入口”
范围 仅限集群内部访问
DNS 自动生成(如 user-service.default.svc.cluster.local)

访问方式:

1
curl http://user-service:8080/api/user/1

🛠️ 常用命令速查表(kubectl)

功能 命令
查看所有 Pod kubectl get po
查看所有 Service kubectl get svc
创建资源 kubectl apply -f xxx.yaml
删除资源 kubectl delete -f xxx.yaml
查看日志 kubectl logs pod-name
进入容器 kubectl exec -it pod-name – bash
查看详细信息 kubectl describe po pod-name
资源结构解释 kubectl explain deployment

补全建议开启:

1
source <(kubectl completion zsh)

🧠 我的反思

刚开始接触 K8s 的时候,确实会觉得命令很多、名词很绕,但只要掌握以下几点,入门并不难:

  1. 记住 Pod ≠ 容器,Pod 是容器的“运行壳”
  2. 服务不是放在一个 Pod,而是通过 Service 做统一入口
  3. ClusterIP 是服务通信的桥梁,不负责暴露给外部
  4. kubectl 的结构很固定,习惯之后记忆成本反而更低

🏁 下一步计划

  • 在当前 K8s 环境中部署 KubeSphere
  • 启用 DevOps 模块
  • 搭建完整的 CI/CD 流水线(支持 GitHub 或 GitLab)

如果你也在学习 Kubernetes,欢迎留言一起交流 🚀