Kubernetes(K8s)是主导的容器编排系统,但其学习曲线陡峭,概念数量多。以下是理解Kubernetes做什么以及如何有效使用它真正重要的概念。
Kubernetes解决什么问题
没有Kubernetes:你在服务器上运行容器(Docker)。服务器崩溃——容器死亡。你想运行更多实例——你手动配置更多服务器并运行更多容器。你想更新应用程序——你停止旧容器并启动新容器,导致停机。使用Kubernetes:容器在节点集群上的Pod中运行;如果节点失败,Kubernetes将Pod重新调度到健康节点;如果你需要更多实例,你改变一个数字,Kubernetes就会扩展;如果你部署新版本,Kubernetes做一个滚动更新——一个接一个地替换旧Pod而不停机。Kubernetes从根本上是一个控制循环:你描述你应用程序的期望状态(”我想要我的Web服务的3个实例,每个有512MB RAM和0.5个CPU”),Kubernetes持续工作使现实匹配该描述。
核心概念
Pod:Kubernetes中最小的可部署单元——一个或多个共享网络和存储并一起在同一节点上调度的容器。大多数Pod包含一个容器;多容器Pod用于边车模式(日志边车、代理边车)。Deployment:管理Pod的生命周期——期望的副本数、滚动更新策略、回滚能力。你很少直接创建Pod;你创建Deployment,Deployment创建Pod。Service:一组Pod的稳定网络端点。由于Pod会来来去去(它们是短暂的——崩溃、重新调度、在更新期间替换),它们的IP地址会改变。Service提供路由到健康Pod的稳定IP和DNS名称。Service类型:ClusterIP(仅内部集群)、NodePort(在每个节点的端口上可访问)、LoadBalancer(配置云负载均衡器)、ExternalName(映射到外部DNS名称)。Ingress:将外部流量基于URL路径或主机名定向到Service的HTTP路由规则——单一入口点,将`/api/*`路由到API服务,将`/static/*`路由到前端服务。需要Ingress控制器(nginx-ingress、Traefik)才能运行。ConfigMap和Secret:ConfigMap存储可以作为环境变量或卷挂载注入到Pod中的配置(键值对、配置文件);Secret以base64编码形式存储敏感值(密码、API密钥)(不是加密的——Kubernetes Secret需要额外工具如Vault或Sealed Secrets在静止时实际加密)。Namespace:集群内的逻辑隔离——不同团队或环境(开发、暂存、生产)可以通过命名空间分离共享集群。
重要的操作
`kubectl get pods -n namespace`:列出命名空间中的Pod。`kubectl describe pod pod-name`:Pod的详细状态和事件日志——最有用的调试命令。`kubectl logs pod-name -c container-name`:流式传输容器日志。`kubectl exec -it pod-name — /bin/bash`:执行进入运行中的容器——用于交互式调试。`kubectl apply -f manifest.yaml`:应用配置(创建或更新YAML中描述的资源)。`kubectl rollout status deployment/my-app`:观察滚动部署。`kubectl rollout undo deployment/my-app`:回滚到之前的部署。资源请求和限制:`requests`(Kubernetes为调度预留的内容)、`limits`(容器在被限制或杀死之前可以使用的最大值)。不设置这些是最常见的Kubernetes配置错误之一——没有限制,一个行为不当的Pod可以消耗节点上的所有资源。




