我已经管理大型Kubernetes集群超过三年了,我想分享我的极简方法来配置kubectl终端,事实证明,该终端在日常工作中非常有效。配置良好的命令行终端可以大大提高您的生产率。就像面包和黄油-一种神奇的组合。
但是与流行的修改和功能添加不同,我相信配置简单,不需要安装新的二进制文件,包装程序或修改。特别是在kubectl的情况下-一种本地化的,设计合理的工具,几乎没有缺点。
这是kubectl终端的四个简单附件。通过这种配置,我每天可以管理20个大型Kubernetes集群,其中包括400台机器。
使用kubetail跟踪多个Pod的日志
使用kubectl时,首先要注意的是难以跟踪多个Pod中的日志。这是kubectl中尚未实现的最需要的方案之一。
如果您需要跟踪kubectl中单个pod的日志,则如下所示:
kubectl logs -f <POD_NAME> -n <NAMESPACE>
要跟踪kubetail中的多个Pod,只需编写:
kubetail <POD_NAME_REGEX> -n <NAMESPACE>
您将开始跟踪与正则表达式匹配的所有Pod。由于同时记录了多个Pod,因此kubetail用不同的颜色标记它们,以帮助您导航。
kubetail是kubectl的简单包装。它易于安装,您可以在此处找到说明。
2.动态更改默认名称空间
最终,您会厌倦为一遍又一遍地为每个kubectl操作设置名称空间标志。我们需要弄清楚如何动态更改默认名称空间。
为此,我编写了一个简单的别名函数
ksn
(名称暗含set namespace)。
# Add the following to .zshrc/.bashrc...etc
# Allows setting default namespace while working with kubectl #
alias k='kubectl'
alias ksn='_f(){k get namespace $1 > /dev/null; if [ $? -eq 1 ]; then return $?; fi; k config set-context $(k config current-context) --namespace=$1; echo "Namespace: $1"};_f'
#Usage:
#➜ ~ ksn dev1 (dev-context/dev1)
# Context "dev-context" modified.
# Namespace: dev1
#➜ ~ ksn ff (dev-context/dev1)
# Error from server (NotFound): namespaces "ff" not found
通常,根据当前任务,我们使用命名空间数组。而且由于80%的问题与Kafka命名空间有关,因此该功能长期以来一直是我的默认工具。这将为您节省大量时间,尤其是在需要将许多指令输入到kubectl的复杂任务中时。
3.在shell提示中显示kube-context和名称空间
使用kubectl命令时,应始终注意当前
kube-context
和namespace
。当您同时在20个不同的上下文和50个命名空间中管理集群时,这并非易事。存在在环境中使用错误命令的风险,尤其是在不同集群和上下文中同时处理多个任务时。
为了解决此问题,在相邻窗口中不断显示活动的名称空间和上下文非常有用。
在下面的示例中,我的上下文为
dev2–1
,名称空间为test
。当我在集群中执行不同的命令时,仅查看这些信息就足够了。
您可以在此处找到安装和配置说明。
4.最重要的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跟踪多个吊舱的日志。
- 动态更改默认名称空间以显着减少kubectl指令的长度。
- 在终端旁边显示上下文和名称空间,以避免意外错误。
- 重要的kubectl别名列表。
与这种极简主义相比,流行的终端升级(如K9s)通常不堪重负,充满了功能和糖果包装,但它们速度慢,分心,而且更重要的是不必要。您添加的功能(闪烁和弓形)越多,遍历屏幕上所有这些额外信息所花费的时间就越多。
优雅的终端配置可帮助您保持专注。
基于命令行的简单配置将使您能够使用本机二进制文件和工具快速高效地进行开发。这非常重要,尤其是在使用大型基础架构,在虚拟机上登录和注销不同的配置文件时。
您的终端配置应使您作为开发人员更加充实,而不会让您觉得自己没有双手。