k8s相关的核心概念
Kubernetes核心概念全景解析:从入门到精通的钥匙
一、工作负载管理核心
1.1 Pod:最小的调度单元
- 架构特性:
- 共享网络栈:同一Pod内容器通过localhost通信
- 共享存储卷:emptyDir实现容器间数据共享
- 生命周期管理:探针机制保证业务就绪
- 典型场景:
# 多容器Pod示例(主容器+日志收集Sidecar) apiVersion: v1 kind: Pod metadata: name: web-logger spec: containers: - name: web image: nginx volumeMounts: - name: log-volume mountPath: /var/log/nginx - name: log-collector image: fluentd volumeMounts: - name: log-volume mountPath: /var/log volumes: - name: log-volume emptyDir: {}
1.2 Deployment:应用部署指挥官
- 核心能力:
- 滚动更新策略
strategy: type: RollingUpdate rollingUpdate: maxSurge: 25% maxUnavailable: 25%- 版本回滚机制
kubectl rollout undo deployment/myapp --to-revision=2 - 最佳实践:
- 始终指定资源限制
- 使用PodDisruptionBudget保障可用性
1.3 StatefulSet:有状态应用管家
- 核心特性:
- 稳定网络标识:web-0.web.default.svc.cluster.local
- 有序部署策略:按序扩缩容
- 持久存储绑定:PVC模板自动创建
- 典型应用:graph LR A[StatefulSet] --> B[(PersistentVolume)] B --> C{StorageClass} C --> D[云盘] C --> E[本地SSD]
二、网络与存储体系
2.1 Service:服务发现中枢
- 类型对比:
| 类型 | 暴露方式 | 适用场景 | 示例 |
|---|---|---|---|
| ClusterIP | 集群内部IP | 内部服务通信 | 数据库服务 |
| NodePort | 节点端口 | 开发测试环境 | 临时对外暴露 |
| LoadBalancer | 云厂商LB | 生产环境对外服务 | Web前端 |
| Headless | 无ClusterIP | 有状态服务发现 | StatefulSet通信 |
- 流量调度原理:
2.2 Volume:持久化存储基石
- 存储类型矩阵:
| 类型 | 生命周期 | 适用场景 | 示例 |
|---|---|---|---|
| emptyDir | Pod级别 | 临时数据交换 | 容器间共享缓存 |
| hostPath | 节点级别 | 开发调试 | 访问宿主机目录 |
| PersistentVolume | 集群级别 | 生产持久化存储 | 数据库数据目录 |
| CSI Volume | 动态供给 | 云原生存储 | AWS EBS/Google PD |
- PV/PVC工作流:
# 创建PVC示例 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: ssd
三、配置与安全管理
3.1 ConfigMap:配置管理中心
- 使用模式:
env: - name: LOG_LEVEL valueFrom: configMapKeyRef: name: app-config key: log_level volumes: - name: config-volume configMap: name: app-config - 热更新策略:
- 文件挂载方式支持实时更新
- 环境变量注入需要重启Pod
3.2 Secret:敏感信息保险箱
- 加密存储实践:
# 创建Secret示例 echo -n 'admin' | base64 kubectl create secret generic db-creds \ --from-literal=username=produser \ --from-literal=password='S!B\*d$zDsb=' - 安全建议:
- 开启Secret加密存储(KMS集成)
- 使用RBAC限制访问权限
3.3 Namespace:资源隔离舱
- 多租户方案:
apiVersion: v1 kind: Namespace metadata: name: team-alpha labels: environment: production - 资源配额管理:
apiVersion: v1 kind: ResourceQuota metadata: name: compute-quota spec: hard: requests.cpu: "20" requests.memory: 100Gi limits.cpu: "40" limits.memory: 200Gi
四、高级工作负载控制器
4.1 DaemonSet:节点守护者
- 典型用例:
- 日志收集组件(Filebeat)
- 节点监控代理(Node Exporter)
- 网络插件(Calico CNI)
- 调度控制:
tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule
4.2 Job/CronJob:批处理引擎
- 任务管理对比:
| 特性 | Job | CronJob |
|---|---|---|
| 触发方式 | 手动触发 | 定时计划 |
| 任务类型 | 一次性 | 周期性 |
| 完成策略 | .spec.completions | 无 |
| 并行控制 | .spec.parallelism | 依赖ConcurrencyPolicy |
- 示例配置:
apiVersion: batch/v1beta1 kind: CronJob metadata: name: daily-report spec: schedule: "0 3 * * *" jobTemplate: spec: template: spec: containers: - name: report-generator image: report:latest restartPolicy: OnFailure
五、集群架构全景图
graph TD
A[Control Plane] --> B[API Server]
A --> C[Controller Manager]
A --> D[Scheduler]
A --> E[etcd]
F[Worker Node] --> G[Kubelet]
F --> H[Kube Proxy]
F --> I[Container Runtime]
B <--> G
B <--> H
六、最佳实践指南
6.1 资源管理原则
- 请求与限制设置:
resources: requests: cpu: "500m" memory: "1Gi" limits: cpu: "1" memory: "2Gi" - QoS等级分类:
- Guaranteed(完全保证)
- Burstable(可超卖)
- BestEffort(尽力而为)
6.2 故障排查工具箱
- 诊断命令速查:
# 查看Pod事件 kubectl describe pod <pod-name> # 容器日志查看 kubectl logs -f <pod-name> -c <container-name> # 进入容器调试 kubectl exec -it <pod-name> -- /bin/sh # 资源使用情况 kubectl top pod --containers
七、学习路线图
| 阶段 | 目标 | 推荐实践 |
|---|---|---|
| 入门 | 掌握基础概念 | 使用Minikube部署简单应用 |
| 进阶 | 理解控制器原理 | 实现蓝绿部署/金丝雀发布 |
| 精通 | 集群调优与排障 | 处理生产环境OOMKilled问题 |
| 专家 | 定制K8s生态 | 开发CRD/Operator |
架构师建议:理解这些核心概念只是Kubernetes之旅的起点。建议通过以下步骤深化学习:
- 使用kind快速搭建实验环境
- 通过Kubernetes the Hard Way理解底层机制
- 参与CNCF生态项目贡献
互动实验:
# 快速体验Pod部署
kubectl create deployment nginx --image=nginx:alpine
kubectl expose deployment nginx --port=80 --type=NodePort
配图建议:
- Pod生命周期状态图
- Service流量转发示意图
- 集群架构分层图
- 存储体系关系图
延伸阅读:
- 《Kubernetes权威指南》第5版
- Kubernetes官方文档
- Katacoda互动实验室
浙公网安备 33010602011771号