管理20+Kubernetes集群、400台机器,秘诀在于?

全文共2363字 , 预计学习时长6分钟
管理20+Kubernetes集群、400台机器,秘诀在于?文章插图
图源:unsplash
我在生产中管理大规模Kubernetes集群已经三年有余 , 日复一日的事实证明 , 我的方法是行之有效的 。 本文中将和大家分享关于kubectl终端设置的极简主义法 。
一个精心定制的命令行终端可以显著提高生产率 , 这是所有奇迹发生的核心 。 但是我认为 , 与流行的命令行定制和功能丰富的升级相比 , 在安装任何一种新的二进制文件、包装器或修改程序时 , 简单的设置是非常省时省力的 。 特别是使用kubectl时 , 这种本机工具设计完善、几乎没有需要解决的问题 。
下面是我对kubectl终端添加的四个简单功能 。 在这种设置下 , 我每天可以管理20多个大型Kubernetes集群 , 其中还包括400多台机器 。
管理20+Kubernetes集群、400台机器,秘诀在于?文章插图
使用‘kubetail’在多个Pod实例中查看日志文件使用kubectl 时首先会注意到的一件事就是 , 难以跨多个实例查看日志文件 。 这是最常见的用例之一 , 但kubectl中并没有。 如果在kubectl 上查看单个pod的日志 , 它看起来就像这样:
kubectl logs -f-n 在kubetail上 , 若要查看多个pods的日志 , 那么可以使用:
图源:unsplashkubetail -n 这将查看名称与正则表达式相匹配的所有pods日志文件 。 由于日志记录跨多个pods , 因此kubetail会使用不同的颜色来帮助区分和分析不同的日志文件 。
管理20+Kubernetes集群、400台机器,秘诀在于?文章插图
图源:Komal Venkatesh Ganesan
kubetail是位于kubectl顶端的一个简单包装器 , 它可以实现上述功能 。
管理20+Kubernetes集群、400台机器,秘诀在于?文章插图
动态更改默认命名空间多次重复地为每个单独的kubectl操作提供命名空间指示 , 会耗费大量时间精力 , 而且效率低下 。 要解决这个问题就需要一种动态设置和更改默认命名空间的方法 。
下面是我编写的一个名为ksn的简单别名函数 , 它实现了上述目的(ksn表示设置命名空间) 。
管理20+Kubernetes集群、400台机器,秘诀在于?文章插图
图源:Komal Venkatesh Ganesan
管理20+Kubernetes集群、400台机器,秘诀在于?文章插图
图源:Komal Venkatesh Ganesan
通常 , 根据手头的任务 , 我们的工作涵盖大量命名空间 。 因此 , 如果我排查了一个kafka问题 , 那么10个命令中有8个会被发送到Kafka命名空间 。 在此期间 , 它将成为默认命名空间 。 这可以节省大量的时间 , 特别是在处理需要发布大量kubectl指令的复杂工作任务时 。
管理20+Kubernetes集群、400台机器,秘诀在于?文章插图
在Shell命令提示符中显示“kube-context”和“namespace”在发出kubectl命令时 , 必须时刻了解当前的 kube-context 和 namespace 。 同时在20个不同的kube-contexts和50个左右的命名空间中管理集群 , 这并不是一件容易的事 。 很容易在环境中发出错误的命令 , 尤其是在跨不同上下文和集群中执行多任务时 。
为了解决这个问题 , 在终端提示附近随时显示活动的 namespace和kube-contexts是非常有用的 。
【管理20+Kubernetes集群、400台机器,秘诀在于?】在下述例子中 , kube-context是dev2–1 , 命名空间是 test 。 有了这些信息 , 当在集群中执行命令时 , 就可以简单地查看它 。
管理20+Kubernetes集群、400台机器,秘诀在于?文章插图
图源:Komal Venkatesh Ganesan
管理20+Kubernetes集群、400台机器,秘诀在于?文章插图
基本‘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'
管理20+Kubernetes集群、400台机器,秘诀在于?文章插图
少即是多——不要过度使用终端我们为kubectl用户介绍了四种基本的终端定制:
· 使用kubetail查看多个pod实例的日志文件 。
· 动态更改默认 namespace以显著缩短kubectl指令 。