K8s核心概念与Nginx部署实战指南 1. K8s入门避坑指南从核心概念到Nginx实战刚接触Kubernetes时面对铺天盖地的专业术语确实容易让人望而却步。但根据我多年容器编排的经验掌握几个核心概念就能快速上手。让我们用最直接的方式先理解Pod、Deployment、Service这三个关键概念然后通过部署Nginx来验证学习成果。1.1 核心概念快速解析Pod是K8s的最小调度单元可以理解为集装箱。但要注意一个Pod可以包含多个容器比如主容器日志收集sidecar每个Pod有独立IP内部容器通过localhost互相访问典型生命周期只有几个小时设计时要考虑无常性Deployment是Pod的管理员负责声明Pod的副本数和更新策略滚动更新/重新创建维护版本历史支持快速回滚通过ReplicaSet实现副本控制不要直接操作ReplicaSetService是Pod的接待处主要解决Pod动态IP导致的服务发现难题负载均衡和流量分发对外暴露服务的统一入口经验之谈刚开始可以简单记作Pod干活、Deployment管Pod、Service接客2. 实战Nginx部署2.1 准备部署清单我们先创建nginx-deployment.yaml文件apiVersion: apps/v1 kind: Deployment metadata: name: nginx-demo spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.23-alpine ports: - containerPort: 80 resources: limits: memory: 128Mi cpu: 500m关键参数说明replicas: 2表示要运行2个Pod副本image: nginx:1.23-alpine使用Alpine版减小镜像体积resources设置资源限制避免单个Pod占用过多资源2.2 应用部署配置执行部署命令kubectl apply -f nginx-deployment.yaml验证部署状态kubectl get deployments -w看到AVAILABLE列显示2/2表示部署成功查看Pod运行情况kubectl get pods -o wide正常应该看到两个状态为Running的Pod2.3 暴露Service服务创建service.yamlapiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: NodePort应用配置kubectl apply -f service.yaml获取访问地址kubectl get svc nginx-service输出的NodePort端口30000-32767范围即可通过集群任意节点IP访问3. 常见问题排查指南3.1 Pod启动失败现象kubectl get pods显示CrashLoopBackOff排查步骤查看日志kubectl logs pod-name检查事件kubectl describe pod pod-name常见原因镜像拉取失败检查镜像名和权限端口冲突检查containerPort配置资源不足调整requests/limits3.2 服务无法访问现象NodePort访问超时排查流程确认Pod运行正常检查Service端点kubectl get endpoints nginx-service验证网络策略kubectl describe networkpolicy测试集群内访问kubectl exec -it pod -- curl http://nginx-service3.3 滚动更新卡住现象kubectl rollout status长时间阻塞解决方案查看滚动更新参数kubectl get deploy nginx-demo -o yaml | grep -A 2 strategy调整更新策略适当增大maxUnavailable手动回滚kubectl rollout undo deployment/nginx-demo4. 生产环境优化建议经过这个简单示例后当需要投入生产时还需要考虑健康检查添加readiness和liveness探针livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 3 periodSeconds: 3HPA自动扩缩kubectl autoscale deployment nginx-demo --cpu-percent50 --min2 --max5Ingress配置替代NodePortapiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-ingress spec: rules: - host: nginx.example.com http: paths: - path: / pathType: Prefix backend: service: name: nginx-service port: number: 80资源监控安装Prometheus-Operator监控资源使用情况日志收集部署FluentdElasticsearch日志系统记住K8s学习应该先建立核心概念认知再通过具体应用加深理解。这个Nginx示例虽然简单但已经包含了最核心的部署模式。当熟悉这些基础后再逐步学习ConfigMap、Volume、StatefulSet等进阶概念会更轻松。

本月热点