📘 第29课:K8s概念

Kubernetes

☸️ 什么是Kubernetes?

Kubernetes(K8s)是容器编排平台的事实标准。当你的应用需要跨多台机器运行、自动扩缩容、自愈恢复时,K8s就是答案。

从Docker到Kubernetes的演进: 单机阶段 集群阶段 编排阶段 ┌──────────┐ ┌──────────────────┐ ┌──────────────────────┐ │ 1台机器 │ │ 多台机器 │ │ Kubernetes集群 │ │ docker run│ ──► │ 手动分配 │ ──► │ 自动调度 │ │ 手动管理 │ │ 负载均衡 │ │ 自愈/扩缩/滚动更新 │ │ 单点故障 │ │ 运维痛苦 │ │ 声明式配置 │ └──────────┘ └──────────────────┘ └──────────────────────┘

🏗️ K8s架构

Kubernetes集群架构: ┌───────────── Control Plane (Master) ─────────────┐ │ │ API Server etcd Scheduler Controller Mgr (API入口) (状态存储) (调度决策) (控制器管理) │ │ └──────────────────────────────────────────────────┘ ┌───────────── Worker Node 1 ──────┐ ┌───── Worker Node 2 ──────┐ │ │ │ │ kubelet kube-proxy Container kubelet kube-proxy Container (节点代理) (网络代理) Runtime Runtime │ │ │ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ Pod │ │ Pod │ │ Pod │ │ Pod │ │ Pod │ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └──────────────────────────────────┘ └──────────────────────────┘

📋 核心概念

概念说明类比
Pod最小调度单元,一个或多个容器一个"房间"
Deployment管理Pod副本集,声明期望状态"房间管理员"
ServicePod的稳定访问入口(负载均衡)"前台电话"
IngressHTTP路由入口(域名→Service)"大门口指示牌"
ConfigMap配置数据(非敏感)"配置文件"
Secret敏感配置数据(加密存储)"保险柜"
Namespace资源隔离的逻辑分区"楼层"
PV/PVC持久化存储"仓库"

🚀 安装Minikube(本地K8s)

# 安装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 --cpus=4 --memory=8192

# 验证集群 ✅
kubectl cluster-info
kubectl get nodes

# 启用常用插件
minikube addons enable ingress
minikube addons enable metrics-server
minikube addons enable dashboard

# 打开Dashboard ✅
minikube dashboard

📋 kubectl常用命令

# 集群信息
kubectl cluster-info              # 集群信息 ✅
kubectl get nodes                 # 查看节点 ✅
kubectl top nodes                 # 节点资源使用

# 资源查看
kubectl get pods                  # 查看Pod ✅
kubectl get deployments           # 查看Deployment ✅
kubectl get services              # 查看Service ✅
kubectl get all                   # 查看所有资源

# 详细信息
kubectl describe pod <name>       # Pod详情 ✅
kubectl logs <pod>                # Pod日志 ✅
kubectl exec -it <pod> -- bash    # 进入Pod ✅

# 资源管理
kubectl apply -f manifest.yaml    # 应用配置 ✅
kubectl delete -f manifest.yaml   # 删除资源
kubectl edit deployment <name>    # 编辑配置

📝 第一个K8s应用

# nginx-deployment.yaml ✅
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25-alpine
        ports:
        - containerPort: 80
        resources:
          limits:
            memory: "128Mi"
            cpu: "0.5"

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
  type: LoadBalancer

# 部署 ✅
kubectl apply -f nginx-deployment.yaml
kubectl get pods
kubectl get services

# 访问应用 ✅
minikube service nginx-service

❓ 常见问题

❓ Minikube和kind有什么区别?Minikube是单节点K8s集群,功能完整有Dashboard。kind(Kubernetes in Docker)用Docker容器模拟节点,启动更快,适合CI和测试。学习推荐Minikube,CI推荐kind。
❓ K8s比Docker Compose复杂太多,值得学吗?取决于规模。单机部署Compose足够。但当你需要:多机集群、自动扩缩容、自愈恢复、灰度发布、多团队协作——K8s的复杂度换来的是强大的自动化能力。建议先精通Docker/Compose,再学K8s。

🏆 本课成就

📚 深度补充:K8s概念进阶要点

【Kubernetes入门阶段】生产环境注意事项

要点说明最佳实践
资源规划根据业务负载合理分配CPU/内存先压测再上线,设置requests和limits
监控告警设置关键指标阈值和告警规则Prometheus + AlertManager,5分钟P99延迟告警
备份策略定期备份关键数据和配置自动化备份脚本 + 异地存储 + 定期恢复演练
灰度发布新版本逐步放量降低风险金丝雀发布5%→20%→50%→100%
回滚预案部署前确认回滚方案和步骤保留前一版本镜像,数据库迁移向前兼容
文档更新配置变更必须同步更新文档GitOps管理配置,变更即文档
安全基线遵循CIS Docker Benchmark非root运行、只读FS、最小能力
日志规范结构化日志,统一格式JSON格式日志,包含traceId

常见误区与避坑指南

  1. 过度配置:不是所有服务都需要高可用,根据实际需求选择架构复杂度,避免过度工程
  2. 忽略日志:日志是排障的关键,确保日志格式统一、级别合理、采集完整
  3. 资源超卖:容器资源限制不是摆设,超卖会导致性能下降甚至OOM Kill
  4. 安全忽视:默认配置不等于安全配置,生产环境必须加固(非root、只读FS、最小能力)
  5. 监控缺失:没有监控等于盲飞,至少要有基础的健康检查和资源监控
  6. 手动运维:能自动化的绝不手动,手动操作容易出错且不可追溯
  7. 忽略网络策略:默认所有容器互通不安全,应按最小权限原则配置网络

进阶阅读与参考

Docker命令速查卡

# 容器生命周期
docker create/start/stop/restart/rm/pause/unpause
docker logs/top/stats/inspect/exec diff

# 镜像构建
docker build/pull/push/tag/rmi/images/history
docker save/load/import/manifest

# 网络与存储
docker network create/ls/inspect/connect/disconnect/rm/prune
docker volume create/ls/inspect/rm/prune

# Docker Compose
docker compose up/down/ps/logs/build/exec
docker compose config/stop/start/scale/top/cp

# 系统维护
docker system df/prune/info
docker builder prune
docker container/prune/image prune

# K8s常用命令
kubectl get/describe/logs/exec/apply/delete
kubectl rollout status/undo/history
kubectl scale/autoscale/set

本阶段知识脉络

Kubernetes入门阶段知识体系: 核心概念实操演练最佳实践故障排查 每一课都遵循:概念讲解 → 命令实操 → 代码示例 → 常见问题 → 练习巩固 确保学完即能上手,理论实践并重。