目录
对于没有专门系统了解编排技术的开发人员来说,Kubernetes 管理可能会令人生畏。学习 Kubernetes需要大量时间,而对于面临交付新应用程序压力的开发人员来说,时间经常是不够的。
因此, 本文提供了你需要了解的Kubernetes 管理内容。
1. Kubernetes 命名约定
作为开发人员,了解在 Kubernetes 中创建的对象必须遵循特定的命名约定,将有助于你更快地运用和管理Kubernetes 。了解这些是如何工作的以及为什么以特定方式命名某些东西,也将有助于对应用程序或底层基础架构建立关联关系,也有助于问题的排查。
每个 Kubernetes 对象都有一个对某种资源唯一的名称和一个在整个集群中唯一的唯一标识对象 (UID)。Kubernetes.io说,“在同一个Namespace中只能有一个名为 myapp-1234的 Pod,但你可以有一个名为 myapp-1234 的 Pod 和一个名为 myapp-1234 Deployment。”
此外,具有更高级别控制器(例如 ReplicaSets/Deployments)的 Pod 将继承他们的命名前缀。例如,如果你的Deployment名称是webapp,则对应的 ReplicaSet 可能是 webapp-12345678,其下的相应 pod 可能是 webapp-12345678-abcde。这样,这个Namespace中的每个 pod 都有一个唯一的名称,它也告诉了哪些 pod 共享相同的控制器。
2. 如何让你的应用程序运行
Kubernetes 用户应该对Service和Deployment有基本的了解。
Service只是在集群内路由网络流量的一般方式,有时也从外部路由。
例如,名为webapp的Service将流量路由到标签为app: web的 pod。同一Namespace中的任何 pod 都可以通过向 URL http://webapp 发出请求来调用 webapp pod。传统上,在设置网络时,有许多步骤可以确保将流量路由到正确的位置,但是使用 Kubernetes 中的Service可以让你在更高级别上提供指示,并且由此产生的操作是自动化的。
Deployment是最简单的高级控制器。在无状态应用程序中,开发人员了解Deployment可以进行滚动更新就足够了,例如你需要多少副本以及你使用的版本。这可确保你的应用程序连接到正确的端点;两者之间的一切都是自动发生的。对于更复杂的应用程序,可能需要探索一些其他高级控制器,例如 StatefulSets 和 Cron job。
理解容器的主要原理也很有帮助:如何获得一致的状态?如果更新或操作导致应用程序异常,只需重新启动容器即可重置它。容器也可能不在同一个节点上。
3. 如何获取应用程序的信息
不管你在什么基础设施上运行,这都是大多数开发人员关心的。哪里出了问题,问题有多严重,是我的问题吗?最后一个问题似乎有点愤世嫉俗,但了解哪个团队和开发人员最适合解决问题对于运维效率至关重要。你需要回答的主要问题是:如何判断我的应用程序是否正在运行,以及资源消耗情况如何?
需要注意的一点是,使用命令kubectl get events将为你提供所有应用程序事件。不幸的是,Kubernetes 不会以任何特定的方式对它们进行排序,但是随着你的知识积累的增加和理解的提高,你可以在这些查询中进行过滤和筛查。
4. 如何及时发现问题
Kubernetes 的好处之一是它能够自动回滚到一致状态,但这可能掩盖潜在问题的影响。因此,开发人员需要有权访问 Kubernetes 日志和遥测数据。
其中,CPU 或内存使用等指标,对于基于 Kubernetes 的应用程序很重要,因为它们可以揭示 Kubernetes 可能掩盖的应用程序问题。
5. 何时排查问题
Kubernetes 的核心是让应用程序在生产环境中运行,因此,一般没有直接的系统输出信息可以解释应用程序崩溃的原因。
大多数情况下,Kubernetes 只是重启容器,问题就解决了,这得益于 Kubernetes 和容器的自我修复和弹性性质,但这可能会掩盖或隐藏不良的应用程序行为,也会导致问题被更长时间地忽视。
有时候,我们需要对某个问题进行更深入的调查,例如它是否会影响客户体验,或对其他团队造成负面影响,所提供的Service类型以及性能的效果如何。
总结
尽管开发人员了解他们的应用程序如何在 Kubernetes 上运行很重要,但在大多数情况下,他们不需要深入了解 Kubernetes 的工作原理。作为开发人员,Kubernetes 在某种程度上可能看起来很混乱,但你可以通过提供特定的方向来控制混乱。例如,如果你没有指定pod 运行的位置,默认情况下它将在任何地方运行。或者,你可以使用 taints/tolerations 告诉 Kubernetes 不要在特定节点上运行应用程序。无论你配置(或不配置)它,你都可以使用基本的自动检查来显示应用程序是否健康。
开发人员开始使用 Kubernetes 时,不要让它过于复杂。将其视为一种管理你的应用程序的方式,这个系统可自动采取行动自我修复并在几乎没有干预的情况下恢复到健康状态。随着知识和经验的增长,可以根据需要扩展 Kubernetes 的实施,使其尽可能稳健。