在管理 K8S 集群 3 年后,我学到了 10 个教训

小夏 社会 更新 2024-02-27

背景

在过去的三年里,我经历了管理 kubernetes 集群这个有时波涛汹涌的领域。 这段充满挑战和发现的旅程让我对这项尖端技术以及许多其他方面有了深刻的理解。 在这篇文章中,我想与大家分享我作为 Kubernetes 集群管理员学到的十个最有价值的经验教训。

这些课程涵盖各种主题,从管理底层基础架构到优化部署过程,包括确保集群可伸缩性和安全性的最佳实践。 无论您是 Kubernetes 新手还是经验丰富的专家,这些提示都将为您提供有关如何有效管理 Kubernetes 集群的丰富视角。

让我们深入了解这些课程,这些课程是三年经验、成功和挑战的结晶。

第 1 课:在云中使用 Kubernetes

除非有极端的限制,否则不要自己管理底层的 Kubernetes 基础设施。 您花时间调试对您的业务没有价值的问题。 成为 kube-api、kube-apiserver、kubelet、etcd、kube-proxy 等方面的专家真是太好了,但每天自己维护这些并不能创造任何商业价值。 您无需成为这些概念的专家即可有效地管理集群。 将此低级别任务委托给比您做得更好的云服务提供商(AWS、Azure、GCP、OVH 等)。 在 HK-Tech,我们选择了 AWS 和 EKS 集群(请注意,ECS 不是 Kubernetes! )。

第 2 课:使用 ** 部署所有与 Kubernetes 相关的基础结构

集群的任何部分都不应在控制台上手动完成,即使是简单的标签也不行。 特别是要避免“我先在控制台上快速修复,稍后再更新**”的心态。 谬论:你永远不会那样做。

第 3 课:避免过度使用您无法完全控制的 helm 图表

是的,它们很棒,它们工作迅速,而且您不必费心编写自己的 yaml,除非有一天更新导致一切都崩溃。 如果你真的很懒或时间不够,至少要努力去理解这些价值观YAML 文件,并避免使用默认值。 在 hk-tech,规则是不使用掌舵图;在最坏的情况下,我们只会得到模板。

第 4 课:Kubernetes 不喜欢“直接迁移”。

因此,为了使用 k8s,您需要从遗留应用程序的云适配开始。 这不是关于 k8s 适应你的应用程序,而是关于让 k8s 适应你的应用程序。 如果您无法重写应用程序,最好坚持使用旧的虚拟机运行模式。

第 5 课:网格化还是不网格化?

如果您不需要服务网格,请不要安装它。 那么你怎么知道你是否需要它呢?问自己两个问题:集群中的应用程序是否相互通信?是否需要安全策略来在集群中的应用程序之间切换?如果两者的答案都是肯定的,那么安装服务网格可能会很有用。 我没有具体的建议;通常,各种糖化技术彼此相似。

第 6 课:避免使用过多的工具

Kubernetes 提供了大量的辅助工具,这些工具有望为更好地管理集群提供模仿和奇迹:Argocd、Lens、K9s、Keda、Krew、Kubectx、Kubens、Kail 等等。 避免像集邮一样收集它们,老实说:90% 的需求都可以用 kubectl 来满足。 就我个人而言,我只使用 kubectx、kubens 和 k9s,它们对集群管理很有帮助。

第 7 课:必须为 Pod 定义资源限制(内存和 CPU)

这将防止编码不当或配置错误的应用程序吞噬集群的所有资源,并导致其他应用程序由于一些贪婪的 Pod 而一个接一个地崩溃。 这也是警惕 helm chat 并始终详细检查封装背后的 manifest 源的原因之一**。

第8课:思考无国籍状态

理想情况下,最好避免将数据存储在 Pod 中。 如果由于某种原因无法避免,最好直接使用 NAS 而不是磁盘挂载。 否则,您可能会惊讶地发现,部署中的某些 Pod 无权访问持久性资源。 是的,硬盘只能挂载在一个节点上,所以如果你的 Pod 分布在多个节点上,同一节点上的 Pod 将看到相同的数据,但其他节点上的 Pod 将看不到。 使用像 EFS 这样的 NAS 挂载,您将能够避免此问题。

第 9 课:配置 HPA(水平 Pod 自动缩放)。

如果你想保持原来的工作方式,并从Kubernetes的强大功能中受益,你需要根据需求自动管理资源利用率,并且你需要在所有应用程序项目上配置HPA。 (helm 聊天的另一个限制,不幸的是,它通常非常缺乏)。

第10课:不要害怕改变

平均而言,您应计划每年对集群进行三次版本升级,大约每四个月更新一次。 有些更新是透明的,但通常会有影响的更改。 为了更好地为这些更新做好准备,我建议您阅读、重读和重新阅读发行说明,以及那些在您之前进行过版本更新的人的经验。 我的建议,以及我们在 hk-tech 实施的,是始终保持最新版本(除非有安全补丁)。

祝您 Kubernetes 之旅愉快!

作者丨Herve Khg**丨***Docker中文社区(ID:DockerChina)DBAPLUS社区欢迎技术人员投稿,投稿邮箱:editor@dbapluscn

相似文章

    K8S 集群部署工具 Kubeadm 详解

    朋友们,您好。Kubeadm 是快速创建 Kubernetes 集群的最佳实践工具,我们只需要使用 kubeadm init 和 kubeadm join 命令即可完成 ks 集群的部署。kubeadm init 用于部署控制平面节点。kubeadm join 用于部署 Worker 节点并将它们加...

    K8s 集群可观测性数据卸载最佳实践

    在微服务架构下,KS集群中往往部署了多套服务,这也意味着不同的团队 不同的角色 不同的服务会在同一集群中,不同业务的数据需要在不同的空间进行管理和查看。在传统的主机环境中,在不同主机上部署 datakit 时,通过配置不同的工作空间 token 可以很容易地实现这一点,但在使用 daemonset ...

    Trivy 为 K8s 添加了 KBOM 漏洞扫描

    标准做法是扫描应用程序和 以查找漏洞。但为什么要止步于此呢?Aqua 希望为 Kubernetes 带来相同级别的安全性。Trivy 将 KBOM 漏洞扫描添加到 Ks 中,作者 Itay Shakury 是 Aqua Security 的开源副总裁,负责领导开源云原生安全解决方案的工程设计。Ita...

    K8s 容器调试高级技巧

    如果您在 Kubernetes 上运行软件,则需要调试在某个时候部署的软件的某些方面。对于 习 虚拟机 VMS 来说,一种自然而然的简单调试方法是连接到正在运行的 Pod 并对其进行解释 kubectl exec it podname c containername bash这通常有效,而且有效。但...

    如何使用 Helm 集成 Prometheus 和 Grafana 第 1 部分在 K8s 上

    在这个由三部分组成的系列中,您将了解 习 如何使用 Helm 在 Kubernetes 上集成 Prometheus 和 Grafana,以及如何在 Grafana 上创建简单的仪表板。Prometheus 和 Grafana 是 Kubernetes 上最流行的两个开源监控工具。了解 习 如何使用...