关注【云原生百宝箱】公众号,获取更多云原生消息
本文介绍了一些流行的 Kubernetes 工具和常见的集群组件。例如 Helm 作为 Kubernetes 应用的包管理器,以及本地开发所需的 Kubernetes 发行版。另外提及了一些常见的集群组件,如集群自动缩放器、证书管理器、外部 DNS,以及一些简化与 Kubernetes 交互的工具,如命令行工具、端口转发工具和集成开发环境。
流行的 Kubernetes 工具
Helm[1]是 Kubernetes 应用程序的包管理器,为分发提供模板和版本控制功能。了解 Helm 很重要,因为它是迄今为止 Kubernetes 最受欢迎的包管理器,并且其他部署工具通常为其提供强大的集成。
对于开发人员来说,你很可能会通过以下两种方式之一与 Helm 交互:
1. 你需要通过创建自己的 Helm Chart来打包应用程序以进行部署。
2. 你将使用现有的 Helm Chart来部署其他服务或依赖项(例如数据库、缓存、消息队列)以进行集成或端到端测试。
有关如何在应用程序中使用 Helm 的具体信息可能因你的组织而异。有些团队可能有 CLI 工具来帮助引导 Helm Chart。其他人可能有一个“标准”模板供你使用和覆盖某些值。其他团队可能还有功能更齐全的仪表板或门户来指导你完成体验。
但归根结底,Helm 只是 Kubernetes 清单(例如,部署、状态集、服务等)的包装器。只要你能够区分 Kubernetes 原生概念与 Helm 或相关工具提供的模板引擎,你就能够快速了解正在发生的事情。
要深入了解 Helm,请查看Helm 101 for Developers[2]。
其他流行的工具:kustomize[3]、cdk8s[4]
除非你在为具备远程开发环境的大型组织工作,否则你可能会遇到一些用于本地开发的 Kubernetes 发行版。这个领域有很多选项,包括Docker Desktop[5]、minikube[6]、kind[7]、k3s[8]等等。即使你仍在本地使用 Docker 或 Docker Compose 进行开发和测试,你也可能会看到这些选项在 CI 中运行。
关于这些不同的 Kubernetes 发行版,需要了解的重要一点是,由于它们主要设计为在本地运行(即更受约束的非产品环境)或在 CI 中进行测试,因此 Kubernetes 功能的行为可能略有不同。例如,可以实施一些解决方法来支持Ingress或负载均衡器功能。
接下来,我们有一个常见集群组件的列表,希望这些组件已安装在你的集群上。与你的基础设施团队合作安装这些(或类似组件),让你的生活更轻松!
??集群自动缩放器:虽然 Kubernetes 具有 Pod 自动缩放功能,但你需要安装单独的集群自动缩放器来缩放底层节点。一些托管 Kubernetes 提供商(例如 GKE)将其打包到他们的产品中。对于其他人,你需要为节点甚至 Pod安装和配置Kubernetes Autoscaler?[9]。如果你在 EKS 上运行,请查看Karpenter[10]。
??Cert-manager 和 external-dns:对于需要外部访问的 Web 应用程序,更耗时且琐碎的任务之一是配置 DNS 以指向你的服务,以及配置 TLS 证书以加密你的端点。虽然这一切都可以通过 Terraform 或 SDK 在 Kubernetes 外部进行控制,但你也可以使用cert-manager[11]和external-dns[12]通过向 Kubernetes 服务添加注释来自动化此过程。
??密钥管理:在 Kubernetes 上运行应用程序的另一个实际问题是获取应用程序要使用的密钥。虽然 Kubernetes 提供了对密钥管理的本机支持,但默认情况下它只是存储为 Base64 编码的明文。你可以将集群配置为静态加密它们,但它不提供密钥管理解决方案(如Vault[13]或云提供商的产品)的复杂控制和审核机制。无需从某些启动或 init 容器中的服务获取这些密钥,而是使用Secrets Store CSI Driver[14]等工具来自动执行此操作。
??备份和迁移:最后,如果你正在运行具有持久卷的有状态应用程序,则需要定期备份数据以进行灾难恢复或更安全的迁移。velero[15]就是实现这一自动化的最佳选择。如需深入了解,你可以阅读有关Kubernetes 灾难恢复[16]的指南。
最后,我们将以一系列必备工具来结束与 Kubernetes 的交互:
??命令行工具:kube-ps1[17]用于 kubectl 提示,kubectx[18]用于在集群和命名空间之间切换。
??端口转发:kube-forwarder[19]可轻松管理端口转发的端点。
??IDE:OpenLens[20]提供良好的控制台体验来管理 Kubernetes 集群并与之交互。
Kubernetes 生态系统非常庞大,每天都会添加新的工具和项目。你可以通过谷歌搜索awesome-kubernetes[21]来了解正在完成的所有工作。
然而,对于大多数人来说,你与 Kubernetes 的交互将根据你的基础设施团队的设置进行一定程度的策划。对于某些人来说,它可能更接近带有一些辅助工具的最低限度的 Kubernetes 集群。对于其他人来说,它可能被抽象到组织的框架或工具后面。无论哪种情况,只要你了解 Kubernetes 基本概念,你就可以区分是在通用 Kubernetes wiki 还是从工具存储库中寻找答案。
[1]
?Helm:?https://helm.sh/[2]
?Helm 101 for Developers:?https://levelup.gitconnected.com/helm-101-for-developers-1c28e734937e[3]
?kustomize:?https://kustomize.io/[4]
?cdk8s:?https://cdk8s.io/[5]
?Docker Desktop:?https://docs.docker.com/desktop/kubernetes/[6]
?minikube:?https://minikube.sigs.k8s.io/docs/start/[7]
?kind:?https://kind.sigs.k8s.io/[8]
?k3s:?https://k3s.io/[9]
?Kubernetes Autoscaler :?https://github.com/kubernetes/autoscaler[10]
?Karpenter:?https://itnext.io/karpenter-open-source-high-performance-kubernetes-cluster-autoscaler-d56e3ab06aae[11]
?cert-manager:?https://cert-manager.io/[12]
?external-dns:?https://github.com/kubernetes-sigs/external-dns[13]
?Vault:?https://www.vaultproject.io/[14]
?Secrets Store CSI Driver:?https://secrets-store-csi-driver.sigs.k8s.io/introduction.html[15]
?velero:?https://velero.io/[16]
?Kubernetes 灾难恢复:?https://blog.devgenius.io/disaster-recovery-on-kubernetes-98c5c78382bb[17]
?kube-ps1:?https://github.com/jonmosco/kube-ps1[18]
?kubectx:?https://github.com/ahmetb/kubectx[19]
?kube-forwarder:?https://github.com/pixel-point/kube-forwarder[20]
?OpenLens:?https://github.com/lensapp/lens[21]
?awesome-kubernetes:?https://ramitsurana.github.io/awesome-kubernetes/projects/projects/
推荐阅读