Kubernetes
Kubernetes(K8s)是容器编排平台的事实标准。当你的应用需要跨多台机器运行、自动扩缩容、自愈恢复时,K8s就是答案。
| 概念 | 说明 | 类比 |
|---|---|---|
| Pod | 最小调度单元,一个或多个容器 | 一个"房间" |
| Deployment | 管理Pod副本集,声明期望状态 | "房间管理员" |
| Service | Pod的稳定访问入口(负载均衡) | "前台电话" |
| Ingress | HTTP路由入口(域名→Service) | "大门口指示牌" |
| ConfigMap | 配置数据(非敏感) | "配置文件" |
| Secret | 敏感配置数据(加密存储) | "保险柜" |
| Namespace | 资源隔离的逻辑分区 | "楼层" |
| PV/PVC | 持久化存储 | "仓库" |
# 安装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 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> # 编辑配置
# 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。
| 要点 | 说明 | 最佳实践 |
|---|---|---|
| 资源规划 | 根据业务负载合理分配CPU/内存 | 先压测再上线,设置requests和limits |
| 监控告警 | 设置关键指标阈值和告警规则 | Prometheus + AlertManager,5分钟P99延迟告警 |
| 备份策略 | 定期备份关键数据和配置 | 自动化备份脚本 + 异地存储 + 定期恢复演练 |
| 灰度发布 | 新版本逐步放量降低风险 | 金丝雀发布5%→20%→50%→100% |
| 回滚预案 | 部署前确认回滚方案和步骤 | 保留前一版本镜像,数据库迁移向前兼容 |
| 文档更新 | 配置变更必须同步更新文档 | GitOps管理配置,变更即文档 |
| 安全基线 | 遵循CIS Docker Benchmark | 非root运行、只读FS、最小能力 |
| 日志规范 | 结构化日志,统一格式 | JSON格式日志,包含traceId |
# 容器生命周期
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