大多数应用程序开发者不自己运行Kubernetes——他们部署到由平台团队或云提供商管理的集群。但你仍然需要了解Kubernetes做什么才能在Kubernetes环境中有效工作。以下是思维模型。
Kubernetes实际上做什么
Kubernetes(K8s)是一个容器编排系统:它在机器集群中管理容器化应用程序的调度、扩展、网络和健康状况。Kubernetes解决的问题:如何运行服务的多个实例并在它们之间分配负载;如何自动重启失败的容器;如何在不停机的情况下推出新版本;如何根据负载上下扩展服务;以及如何安全地将容器联网在一起。Kubernetes不解决:应用程序性能、应用程序内的安全性、数据库管理或本身的成本优化。
你必须知道的核心概念
Pod:最小的可部署单元——一个或多个在同一节点上一起运行、共享网络和存储的容器。你很少直接创建pod;你创建更高级的抽象。Deployment:描述如何运行N个pod副本,处理滚动更新和回滚。Service:将流量转发到pod的稳定网络端点——pod来来去去,但Service IP/DNS名称是稳定的。Ingress:将外部流量路由到Services的HTTP/HTTPS入口点(基于主机/路径规则)。ConfigMap和Secret:在不将它们烤入容器镜像的情况下将配置和敏感数据(密码、API密钥)注入pod的方式。Namespace:在集群内逻辑分离资源的方式(常见:同一集群上的dev/staging/prod命名空间)。
开发者工作流
开发者在Kubernetes环境中实际做什么:编写应用程序代码;构建Docker镜像(docker build);将镜像推送到容器注册表(docker push);编写或更新Kubernetes清单(描述Deployment、Service等的YAML文件);应用清单(kubectl apply -f deployment.yaml)或让CI/CD来做。你最常用的kubectl命令:`kubectl get pods`(列出正在运行的pod)、`kubectl logs pod-name`(查看pod日志)、`kubectl exec -it pod-name — bash`(在运行的pod中打开shell进行调试)、`kubectl describe pod pod-name`(详细pod状态,用于诊断启动失败)和`kubectl rollout status deployment/name`(观察滚动更新)。
问你的平台团队什么
K8s环境中的每个开发者都应该得到回答的问题:我应该为我的部署设置什么资源限制(CPU和内存请求/限制)?我应该在应用程序中实现什么存活性和就绪性探针端点?在生产中访问pod日志的流程是什么(通常通过日志聚合器如Loki、Splunk或Datadog,而非kubectl)?秘密是如何管理的(通常通过HashiCorp Vault、AWS Secrets Manager或带有external-secrets操作符的Kubernetes Secrets,而非原始K8s Secrets)?我应该部署到哪个命名空间,适用什么网络策略?设置资源限制和实现适当的健康检查端点(就绪性:”我准备好提供流量了吗?”,存活性:”我还活着吗?”)是对集群稳定性影响最直接的开发者责任。




