本文转载自公众号“读芯术”(ID:AI_Discovery)
我在生产中管理大规模Kubernetes集群已经三年有余,日复一日的事实证明,我的方法是行之有效的。本文中将和大家分享关于kubectl终端设置的极简主义法。
一个精心定制的命令行终端可以显著提高生产率,这是所有奇迹发生的核心。但是我认为,与流行的命令行定制和功能丰富的升级相比,在安装任何一种新的二进制文件、包装器或修改程序时,简单的设置是非常省时省力的。特别是使用kubectl时,这种本机工具设计完善、几乎没有需要解决的问题。
下面是我对kubectl终端添加的四个简单功能。在这种设置下,我每天可以管理20多个大型Kubernetes集群,其中还包括400多台机器。
使用‘kubetail’在多个Pod实例中查看日志文件
使用kubectl 时首先会注意到的一件事就是,难以跨多个实例查看日志文件。这是最常见的用例之一,但kubectl中并没有 。如果在kubectl 上查看单个pod的日志,它看起来就像这样:
- kubectl logs -f <POD_NAME> -n <NAMESPACE>
在kubetail上,若要查看多个pods的日志,那么可以使用:
- 图源:unsplashkubetail<POD_NAME_REGEX> -n <NAMESPACE>
这将查看名称与正则表达式相匹配的所有pods日志文件。由于日志记录跨多个pods,因此kubetail会使用不同的颜色来帮助区分和分析不同的日志文件。
图源:Komal Venkatesh Ganesan
kubetail是位于kubectl顶端的一个简单包装器,它可以实现上述功能。
动态更改默认命名空间
多次重复地为每个单独的kubectl操作提供命名空间指示,会耗费大量时间精力,而且效率低下。要解决这个问题就需要一种动态设置和更改默认命名空间的方法。
下面是我编写的一个名为ksn的简单别名函数,它实现了上述目的(ksn表示设置命名空间)。
图源:Komal Venkatesh Ganesan
图源:Komal Venkatesh Ganesan
通常,根据手头的任务,我们的工作涵盖大量命名空间。因此,如果我排查了一个kafka问题,那么10个命令中有8个会被发送到Kafka命名空间。在此期间,它将成为默认命名空间。这可以节省大量的时间,特别是在处理需要发布大量kubectl指令的复杂工作任务时。
在Shell命令提示符中显示“kube-context”和“namespace”
在发出kubectl命令时,必须时刻了解当前的 kube-context 和 namespace。同时在20个不同的kube-contexts和50个左右的命名空间中管理集群,这并不是一件容易的事。很容易在环境中发出错误的命令,尤其是在跨不同上下文和集群中执行多任务时。
为了解决这个问题,在终端提示附近随时显示活动的 namespace和kube-contexts是非常有用的。
在下述例子中,kube-context是dev2–1,命名空间是 test。有了这些信息,当在集群中执行命令时,就可以简单地查看它。
图源:Komal Venkatesh Ganesan
基本‘kubectl’别名
无需多言,别名是自定义和加速终端工作的最快方法。下面是我常用的一些kubectl别名,我已经非常习惯使用它们了。
- alias k='kubectl '
- alias kcc='kubectl config current-context'
- alias kdp='kubectl delete po'
- alias kgc='kubectl config get-contexts'
- alias kge='kubectl get events --sort-by='\''{.lastTimestamp}'\'
- alias kgp='kubectl get po'
- alias kl='kubectl logs '
- alias kpf='kubectl port-forward'
- alias ksc='kubectl config use-context'
少即是多——不要过度使用终端
我们为kubectl用户介绍了四种基本的终端定制:
- 使用kubetail查看多个pod实例的日志文件。
- 动态更改默认 namespace以显著缩短kubectl指令。
- 在命令提示符附近显示kube-context和namespace,避免意外错误。
- 重要的kubectl别名列表。
与这种极简设置形成对比的是,流行的终端升级(比如K9s)往往是复杂、功能丰富、色彩多样的,但相反,它的速度缓慢、容易令人分心,而且并不是必需的。添加的(各种花里胡哨的)功能越多,花在理解和浏览屏幕上所有额外信息上的时间就越多。
图源:unsplash
一个简洁的终端设置,比任何东西都更能增强你的注意力。拥有一个简单的命令行终端设置可以让你快速熟练地使用本地二进制文件和工具,这是至关重要的——尤其是需要使用大量基础架构、登录和退出不同的VM shell配置文件时。
对于一个工程师来讲,终端设置应有助于丰富经验,而不是让你无所适从。