K8s核心概念
Kubernetes核心概念全景解析:从入门到生产实战
Kubernetes作为容器编排的事实标准,理解其核心概念是掌握云原生技术的基石。本文将通过生产视角,带你穿透抽象概念,直击实际应用场景。
一、集群架构:指挥官与士兵的协奏曲
-
控制平面(Master节点)
- kube-apiserver:集群的"门卫",所有操作必经的API网关
生产技巧:启用--audit-log-path记录审计日志,用于安全追溯 - etcd:集群的"记忆中枢"
避坑指南:生产环境务必使用SSD磁盘,避免写入延迟导致集群卡顿
- kube-apiserver:集群的"门卫",所有操作必经的API网关
-
工作节点(Node)
- kubelet:节点"监工",每15秒向Master汇报节点状态
关键参数:--max-pods控制单节点Pod数量(默认110) - kube-proxy:网络"交通警察"
模式选择:万级服务规模建议IPVS模式(默认iptables有性能瓶颈)
- kubelet:节点"监工",每15秒向Master汇报节点状态
二、核心概念:容器编排的七大武器
-
Pod:最小作战单元
- 典型场景:
apiVersion: v1 kind: Pod metadata: name: web-app spec: containers: - name: nginx image: nginx:1.21 resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "512Mi" # 内存硬限制,超过即触发OOM - 生产经验:
- 单Pod多容器适用于日志收集等边车模式
- 避免使用裸Pod,务必通过控制器管理
- 典型场景:
-
Deployment:无状态应用的指挥官
- 滚动升级:
kubectl set image deployment/nginx nginx=nginx:1.22 --record kubectl rollout status deployment/nginx # 实时监控升级过程 - 版本回滚:
kubectl rollout undo deployment/nginx --to-revision=2
- 滚动升级:
-
Service:服务的永恒入口
- 流量调度策略:
类型 适用场景 示例 ClusterIP 内部服务通信 微服务间调用 NodePort 临时外部访问 开发测试环境 LoadBalancer 云厂商集成LB 生产环境公网暴露
- 流量调度策略:
-
Ingress:七层流量路由器
- 经典配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: shop.example.com http: paths: - path: /v1 pathType: Prefix backend: service: name: api-v1 port: number: 80
- 经典配置:
-
ConfigMap & Secret:配置管理的双生子
- 安全实践:
# 加密存储Secret echo -n 'admin' | base64 # YWRtaW4= kubectl create secret generic db-creds \ --from-literal=username=admin \ --from-literal=password=secret - 热更新技巧:
- 修改ConfigMap后需滚动更新Pod:
kubectl rollout restart deploy/web
- 修改ConfigMap后需滚动更新Pod:
- 安全实践:
-
PersistentVolume(PV):持久化存储的保险箱
- 存储选型矩阵:
数据类型 推荐存储类型 访问模式 数据库 块存储(RWO) ReadWriteOnce 文件共享 文件存储(RWX) ReadWriteMany 冷数据备份 对象存储 通过CSI对接
- 存储选型矩阵:
-
Namespace:资源隔离的结界
- 多环境管理:
kubectl create ns dev kubectl label ns dev env=development kubectl get pods -n dev --show-labels
- 多环境管理:
三、生产级概念进阶
-
Operator模式
- 适用场景:管理有状态复杂应用(如Elasticsearch、Redis集群)
- 工作原理:通过CRD(Custom Resource Definition)扩展K8s API
-
Horizontal Pod Autoscaler(HPA)
- 自动扩缩配置:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: web-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: web minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60
- 自动扩缩配置:
-
PodDisruptionBudget(PDB)
- 节点维护保障:
apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: zk-pdb spec: minAvailable: 2 selector: matchLabels: app: zookeeper
- 节点维护保障:
四、概念应用实战图谱
graph TD
A[用户] -->|访问| B(Ingress)
B -->|路由| C(Service)
C -->|负载均衡| D[Deployment]
D -->|管理| E[ReplicaSet]
E -->|创建| F[Pod]
F -->|挂载| G[PersistentVolume]
F -->|读取| H[ConfigMap/Secret]
I[监控系统] -->|采集| J[Metrics Server]
J -->|触发| K[HPA]
五、避坑指南:从理论到实践的鸿沟
-
资源限制必填
- 未设置limits可能导致"资源吸血鬼"Pod拖垮节点
-
就绪探针不可缺
- 缺少readinessProbe会导致流量打到未就绪Pod
-
优雅终止配置
spec: terminationGracePeriodSeconds: 60 containers: - lifecycle: preStop: exec: command: ["sh", "-c", "sleep 30"] -
时区统一方案
- 挂载主机时区文件:
volumes: - name: tz-config hostPath: path: /etc/localtime volumeMounts: - name: tz-config mountPath: /etc/localtime
- 挂载主机时区文件:
结语
理解Kubernetes概念只是万里长征第一步,真正的 mastery 需要在生产实践中不断锤炼。建议从单集群基础应用开始,逐步探索Service Mesh、GitOps等进阶领域。记住:每个YAML配置背后都可能隐藏着血泪教训,保持敬畏之心,方能在云原生浪潮中稳步前行。
浙公网安备 33010602011771号