kubectl get 后按2次tab键命令补全的失效原因分析

kubectl get 后按2次tab键命令补全的失效原因分析

2019/10/28 Chenxin

a.bash客户端工具
在centos用户下,
cd ~;echo "source <(kubectl completion bash)" >> .bashrc
或如 . <(kubectl completion bash) 当然,也可以写入到/etc/profile里.退出当前终端,重启进去,以便加载source.

b.其他交互式 Kubernetes 客户端工具
参考 https://www.hi-linux.com/posts/44953.html
1.bash 略
2.ZSH-> echo "source <(kubectl completion zsh)" >> ~/.zshrc
3.Kube-prompt
4.Kube-shell
5.Kubectl Aliases

c.故障排查
在使用一段时间的kubectl命令自动补全后(安装k8s的metrics-server后),发现有些指令原本可以自动补全的失效了.
kubectl get 然后按两次table键,出现列出了当前文件夹下所有文件的非预期效果.解决办法如下.
1.如果失效,需要手动再次 source <(kubectl completion bash ) .
2.如果还不行,应该就是node节点(worker)的网络问题.在执行kubectl get 然后输入table键2次,会调用网络请求.
因为这里,我们部署了metrics-server,它的namespace是kube-system,IP地址段是10.10.3.X.而后端node节点,默认并没有访问外部网络空间的路由.kubectl get后按两次table键,会调用apiserver,而master主机上无法访问到metrics-server提供的接口服务.所以需要在对应的node节点上"iptables -t nat -I POSTROUTING -s 10.10.0.0/16 -j MASQUERADE" .
具体参考本文档"网络部分".kubectl get后按两次table键,会调用apiserver.应该是调了,对方没有返回导致的无法补全.

原文地址:https://www.cnblogs.com/chanix/p/11753887.html