Kubernetes(K8s)从入门到精通:一篇彻底搞懂云原生核心
适用人群:开发、运维、SRE、DevOps 工程师
目标:掌握 K8s 核心概念、架构原理、实战操作与生产最佳实践
前置知识:Docker 基础、Linux 命令、网络基础
一、为什么需要 Kubernetes?
🚫 单机 Docker 的局限
- 单点故障:容器崩溃后无法自愈
- 手动扩缩容:流量激增时需人工干预
- 服务发现困难:容器 IP 动态变化,难以互相调用
- 资源调度低效:无法跨多台机器智能分配负载
✅ K8s 的解决方案

💡 核心思想:声明式 API + 控制器模式(Reconciliation Loop)
二、K8s 核心架构(5 分钟理解)
1. 控制平面(Control Plane)—— 大脑
- API Server:唯一入口,处理所有 REST 请求
- etcd:分布式键值存储,保存集群所有状态
- Scheduler:决定 Pod 调度到哪个 Node
- Controller Manager:运行各种控制器(如 ReplicaSet、Node Controller)
- Cloud Controller Manager(可选):对接云厂商 API
2. 工作节点(Worker Node)—— 肌肉
- kubelet:Node 上的代理,确保容器运行
- kube-proxy:维护网络规则,实现 Service 负载均衡
- Container Runtime:容器运行时(Docker / containerd / CRI-O)

三、K8s 核心对象(Objects)
1. Pod —— 最小调度单元
- 一个或多个紧密耦合的容器共享网络/存储
- 短暂性:IP 会变,随时可能被重建
- YAML 示例:
apiVersion: v1 kind: Pod metadata: name: nginx-pod labels: app: nginx spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80
2. Deployment —— 管理无状态应用
- 确保指定数量的 Pod 副本始终运行
- 支持滚动更新、回滚、扩缩容
- YAML 示例:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.25
3. Service —— 稳定访问入口
- 为动态 Pod 提供固定 IP 和 DNS 名称
- 类型:
ClusterIP(默认):集群内部访问NodePort:通过<NodeIP>:<Port>访问LoadBalancer:云厂商提供外网 LBExternalName:CNAME 到外部服务
- YAML 示例:
apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer
4. ConfigMap & Secret —— 配置解耦
- ConfigMap:存储非敏感配置(如环境变量、配置文件)
- Secret:存储敏感信息(Base64 编码,建议配合加密)
# Secret 示例 apiVersion: v1 kind: Secret metadata: name: db-secret type: Opaque data: username: YWRtaW4= # echo -n "admin" | base64 password: MWYyZDFlMmU2N2Rm
5. Namespace —— 资源隔离
- 逻辑分区,避免命名冲突
- 默认 Namespace:
default,kube-system,kube-public - 创建命令:
kubectl create namespace dev kubectl get pods -n dev # 指定命名空间
四、环境搭建(快速上手)
方案 1:Minikube(本地学习)
# 安装 Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 启动集群
minikube start --driver=docker
# 验证
kubectl get nodes
minikube dashboard # 打开 Web UI
方案 2:Kind(Kubernetes in Docker)
# 安装 Kind
go install sigs.k8s.io/kind@v0.20.0
# 创建集群
kind create cluster --name my-cluster
# 验证
kubectl cluster-info
方案 3:云平台(生产推荐)
- 阿里云 ACK、腾讯云 TKE、AWS EKS、GCP GKE
五、kubectl 命令速查

六、实战:部署一个 Web 应用
步骤 1:创建 Deployment
# app-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: app
image: nginx:alpine
ports:
- containerPort: 80
步骤 2:创建 Service
# app-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
步骤 3:部署 & 访问
# 部署
kubectl apply -f app-deploy.yaml
kubectl apply -f app-svc.yaml
# 获取访问地址(Minikube)
minikube service web-service --url
# 或端口转发
kubectl port-forward svc/web-service 8080:80
# 访问 http://localhost:8080
七、高级功能
1. 健康检查(Liveness & Readiness)
spec:
containers:
- name: app
image: my-app
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 2
2. 持久化存储(PV/PVC)
# PVC 示例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
3. Ingress —— 7 层 HTTP 路由
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
4. Helm —— 包管理器
# 安装 Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 部署 MySQL
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-mysql bitnami/mysql
八、生产环境最佳实践
🔒 安全
- 启用 RBAC:最小权限原则
- PodSecurityPolicy / Pod Security Admission:限制特权容器
- 扫描镜像漏洞:Trivy / Clair
- 加密 etcd:静态数据加密
🚀 性能
- 资源请求 & 限制:
resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" - 亲和性 & 反亲和性:避免单点故障
- Horizontal Pod Autoscaler (HPA):基于指标自动扩缩容
🛠️ 监控
- Metrics Server:提供 CPU/内存指标
- Prometheus + Grafana:监控集群 & 应用
- EFK / Loki:日志收集与分析
🔄 CI/CD 集成
- GitLab CI / Jenkins → 构建镜像 → 推送 Registry →
kubectl apply
九、常见问题排查
❌ Pod 一直处于 Pending?
- 节点资源不足 →
kubectl describe pod - 节点污点(Taint)不匹配 →
kubectl describe node
❌ Service 无法访问?
- 检查 Selector 是否匹配 Pod Label
- 检查 kube-proxy 是否正常运行
- 测试 ClusterIP:
kubectl run -it --rm debug --image=busybox --restart=Never -- nslookup web-service
❌ 应用频繁重启?
- 查看日志:
kubectl logs <pod> --previous - 检查健康检查配置是否合理
十、学习路线图

📚 推荐资源:
- 官方文档:kubernetes.io
- 书籍:《Kubernetes in Action》
- 实验:Killer.sh(CKA 模拟)
结语
Kubernetes 不是终点,而是云原生旅程的起点。掌握它,你将:
- ✅ 构建高可用、可扩展的现代应用
- ✅ 实现 DevOps 自动化流水线
- ✅ 为微服务、Serverless、AI 平台打下基础
记住:
“Don’t learn Kubernetes to run Kubernetes. Learn Kubernetes to build resilient systems.”
附:速查 Cheat Sheet
📥 下载 PDF 版命令速查表
🐙 GitHub 示例 YAML 仓库
现在,打开终端,输入 kubectl get nodes,开启你的 K8s 之旅吧! ☸️
浙公网安备 33010602011771号