博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tmux 嵌套 tmux_使用tmux和kubectl的功能对Kubernetes进行故障排除
阅读量:2545 次
发布时间:2019-05-11

本文共 4207 字,大约阅读时间需要 14 分钟。

tmux 嵌套 tmux

是一个蓬勃发展的开源容器编排平台,可为应用程序提供可伸缩性,高可用性,健壮性和弹性。 它的众多功能之一是支持通过其主要客户端二进制文件运行自定义脚本或二进制文件。 Kubectl非常强大,它允许用户使用它可以直接在Kubernetes集群上执行的任何操作。

使用别名对Kubernetes进行故障排除

任何使用Kubernetes进行容器编排的人都知道它的功能,以及由于其设计而带来的复杂性。 例如,迫切需要以更快的速度并且几乎不需要手动干预的方式来简化Kubernetes中的故障排除(在紧急情况下除外)。

有关故障排除功能,有许多情况需要考虑。 在一种情况下,您知道需要运行什么,但是该命令的语法(即使可以作为单个命令运行)也过于复杂,或者可能需要一两个输入才能起作用。

例如,如果您经常需要跳入System命名空间中正在运行的容器,则可能会发现自己反复编写:

kubectl --namespace=kube-system exec -i -t 

为了简化故障排除,您可以使用这些命令的命令行别名。 例如,您可以将以下内容添加到您的点文件(.bashrc或.zshrc)中:

alias ksysex='kubectl --namespace=kube-system exec -i -t'

这是来自的许多示例之一,该示例显示了一种简化kubectl中功能的方法。 对于像这样的简单情况,别名就足够了。

切换到Kubectl插件

一个更复杂的故障排除方案涉及需要一个接一个地运行许多命令来调查环境并得出结论。 单独使用别名不足以实现此用途

考虑群集上拥有不同微服务的10至20个甚至50至100个命名空间。 对您开始对此情况进行故障排除有什么帮助?

  • 您将需要一些可以快速分辨出哪个命名空间中的哪个Pod引发错误的东西。
  • 您将需要一些可以监视名称空间中所有Pod的日志的东西。
  • 您可能还需要查看特定命名空间中显示错误的某些Pod的日志。

涵盖这些要点的任何解决方案在调查生产问题以及开发和测试周期期间都将非常有用。

要创建比简单别名更强大的功能,可以使用 。 插件就像用任何脚本语言编写的独立脚本一样,但被设计为在充当Kubernetes管理员时扩展主命令的功能。

要创建插件,必须使用kubectl- <your-plugin-name>的正确语法将脚本复制到$ PATH中的导出路径之一,并赋予其可执行权限( chmod + x )。

创建插件并将其移入路径后,您可以立即运行它。 例如,我的路径中有kubectl-krawl和kubectl-kmux:

$ kubectl plugin list     
The following compatible plugins are available:
/ usr
/ local
/ bin
/ kubectl-krawl
/ usr
/ local
/ bin
/ kubectl-kmux
$ kubectl kmux

现在让我们探索一下使用tmux为Kubernetes供电时的外观。

利用tmux的力量

是一个非常强大的工具,许多系统管理员和操作团队都依赖来解决与易操作性相关的问题-从将窗口分成多个窗格以便在多台计算机上运行并行调试到监视日志。 它的主要优点之一是可以在命令行或自动化脚本中使用。

我创建 ,该使用tmux使故障排除变得更加简单。 我将使用批注来遍历插件背后的逻辑(并留给您遍历插件的完整代码):

#NAMESPACE is namespace to monitor.      
#POD is pod name
#Containers is container names
# initialize a counter n to count the number of loop counts, later be used by tmux to split panes.
n=0;
# start a loop on a list of pod and containers
while IFS=' ' read -r POD CONTAINERS
do
           
# tmux create the new window for each pod
            tmux neww $COMMAND -n $POD 2>/dev/null
           
# start a loop for all containers inside a running pod
        for CONTAINER in $
{
CONTAINERS//,/
}
        do
        if
[ x$POD = x -o x$CONTAINER = x
] ; then
       
# if any of the values is null, exit.
        warn
"Looks like there is a problem getting pods data."
        break
        fi
           
           
# set the command to execute
        COMMAND=”kubectl logs -f $POD -c $CONTAINER -n $NAMESPACE”
       
# check tmux session
        if tmux has-session -t
2>/dev/null;
        then
       
        else
       
        fi
           
# split planes in the current window for each containers
        tmux selectp -t $n \; \
        splitw $COMMAND \; \
        select-layout tiled \;
           
# end loop for containers
        done
           
# rename the window to identify by pod name
        tmux renamew $POD 2>/dev/null
       
           
# increment the counter
       
(
( n+=1
)
)
# end loop for pods
done< <
(
)
# finally select the window and attach session
 tmux selectw -t
:1 \; \
  attach-session -t
\;

插件脚本运行后,将产生类似于下图的输出。 每个Pod都有自己的窗口,每个容器(如果有多个容器)被其pod窗口中的窗格分开,并在到达时流式传输日志。 tmux的美丽可以在下面看到; 使用正确的配置,您甚至可以看到正在进行活动的窗口(请参见白色选项卡)。

Output of kmux plugin

结论

别名始终有助于在Kubernetes环境中进行简单的故障排除。 当环境变得更加复杂时,kubectl插件是使用更高级脚本的强大选择。 您可以使用哪种编程语言编写kubectl插件没有限制。 唯一的要求是路径中的命名约定是可执行的,并且其名称与现有的kubectl命令的名称不同。

要阅读完整的代码或尝试创建的插件,请检查我的存储库。 欢迎提出问题和请求。

翻译自:

tmux 嵌套 tmux

转载地址:http://ksszd.baihongyu.com/

你可能感兴趣的文章
crontab导致磁盘空间满问题的解决
查看>>
java基础 第十一章(多态、抽象类、接口、包装类、String)
查看>>
Hadoop 服务器配置的副本数量 管不了客户端
查看>>
欧建新之死
查看>>
自定义滚动条
查看>>
APP开发手记01(app与web的困惑)
查看>>
笛卡尔遗传规划Cartesian Genetic Programming (CGP)简单理解(1)
查看>>
mysql 日期时间运算函数(转)
查看>>
初识前端作业1
查看>>
为啥程序会有bug?
查看>>
跨域技术
查看>>
JS里的居民们7-对象和数组转换
查看>>
计算两个日期的时间间隔,返回的是时间间隔的日期差的绝对值.
查看>>
python初体验
查看>>
配置vue,vue脚手架的应用(老版本)
查看>>
linux下防火墙iptables原理及使用
查看>>
经典C面试真题精讲
查看>>
Remove Duplicates from Sorted List解题报告
查看>>
ffmpeg格式转换命令
查看>>
万方数据知识平台 TFHpple +Xpath解析
查看>>