版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 Kubernetes 实用插件和工具介绍 本文分享几个个人认为比较有用的工具,仅供参考 :)Kubectl插件关于kubectl插件kubectl插件其实就是以 kubectl -为前缀的任意可执行文件,比如执行:此时就相当于安装了个 echo的kubectl插件,kubectl插件可以通过 kubectl + 插件名执行, kubectl xxx其实就是相当于运行 kubectl - xxx。比如要运行我们的 echo插件,只需执行如下命令:HelloWorld!通过 kubectl plugin list 可列出当前PATH目录下所有插件:The following compatible
2、 plugins are available:/root/.krew/bin/kubectl-grep/root/.krew/bin/kubectl-krew/root/.krew/bin/kubectl-ns/root/.krew/bin/kubectl-ssh_jump/root/.krew/bin/kubectl-whoami/usr/local/bin/kubectl-echo所以要实现自己的插件,只需要把最终的可执行文件命名为 kubectl - xxxx,然后放到PATH包含任意目录即可,但注意无法覆盖kubectl已有的子命令,如果与kubectl现有的子命令相同,则会优先执行内
3、置子命令,因此插件不会被执行。krew首先要介绍的就是krew,krew是一个Kubernetes的包管理工具,它的功能就是提供简单的方法下载、检索、管理其他插件,类似操作系统的apt、yum、brew等工具,其命名也似乎模仿的brew工具。安装krew的官方脚本如下: set -x; cd $(mktemp -d) & curl -fsSLO /kubernetes-sigs/krew/releases/download/v0.3.2/krew.tar.gz,yaml & tar zxvf krew.tar.gz & ./krew-$(uname | tr :upper: :lower:)_
4、amd64 install -manifest=krew.yaml -archive=krew.tar.gz)安装完后就可以使用krew搜索、安装其他插件了,本文接下来介绍的大多数插件都可以使用krew直接安装。NAME DESCRIPTION INSTALLEDwhoami Show the subject thats currently authenticated. yes# kubectl krew install nskrew在krew index项目中维护支持的插件列表以及下载路径,目前所有插件都是在github中发布下载,但由于众所周知的原因,国内从github下载速度非常慢?。为
5、了提高下载速度,写了个脚本使用axel下载替换原来的下载方式,提速至少10倍以上?:脚本可以在我的github中下载fast-krew。kubectx / kubenskubectx用于快速切换Kubernetes context,而kubens则用于快速切换namespace,我认为二者强大之处在于可以结合fzf使用。任何工具只要和fzf结合,都会很强大如切换到 kube - system namespace:如果不指定namespace,则调用fzf交互式选择:如上黄色的namespace表示当前namespace,通过方向键移动箭头选择需要切换的目标namespace,切换context
6、也一样,由于测试环境只有一个admin,因此只有一个选项。debug我们知道容器的最佳实践是只运行单个应用进程,因此为了精简镜像,我们通常在构建镜像时只包含进程运行所需要包和程序,但这样其实也给排查故障带来问题,尤其是网络问题,想抓个包实在太麻烦。我们常规的做法是先手动进入Pod所在的Node节点,然后找到对应的网络namespace,参考我之前的文章浅聊几种主流Docker网络的实现原理,最后切换到容器的网络namespace中进行抓包,特别麻烦。为了解决这个问题,社区中也提供了许多插件方案,kubectl-debug通过EphemeralContainers的方式在运行的Pod中增加一个d
7、ebugger的容器,然后通过kubectl exec进入该容器进行调试。ksniff工具主要用于容器抓包,其实现方式是把本地静态的tcpdump工具拷贝到容器的/tmp目录,然后就可以通过kubectl exec进入容器运行tcpdump工具了。但我觉得最好用的还是国内PingCAP公司开源的debug工具,其实现原理是在目标Node节点上创建一个 Debug AgentPod,创建的Debug Pod会在目标Node上创建一个新的容器,这个容器会加入到目标Pod的各个Namespace中,于是就可以进入这个新的容器进行调试了,这个新的容器目前使用的默认镜像是 nicolaka / nets
8、hoot,这个镜像里面包含netstat、ip、tcpdump等各种网络调试工具,真是太方便了。更多关于debug设计和用法可参考作者的文章简化Pod故障诊断: kubectl-debug 介绍。如下是我的一个演示动画:grep基于name搜索资源,资源包括DaemonSets、Pods、Deployments、Nodes等,如搜索名字中带 web的所有Pods:NAMESPACE NAME READY STATUS RESTART AGEdefault web-0 1/1 Running 0 37hdefault web-1 1/1 Running 0 37hdefault web-2 1/
9、1 Running 0 37h在所有的namespaces搜索名字带 virt 的Deployments:NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGEkubevirt virt-api 2 2 2 2 5h32mkubevirt virt-controller 2 2 2 2 5h32mkubevirt virt-operator 2 2 2 2 5h49miexecexec命令的功能增强版本,我们知道exec必须指定Pod的名称,如果一个Pod有多个容器,则还需要指定容器名称,而使用exec则可以通过Pod模糊查询然后交互式选
10、择,如果Pod中包含多个容器,也可以通过交互式选择。比如我创建的Deployment有如下5个nginx Pod:NAME READY STATUS RESTARTS AGEnginx-6984d55cb6-b7zgp 2/2 Running 0 5m23snginx-6984d55cb6-bd8nf 2/2 Running 0 5m23snginx-6984d55cb6-dljzx 2/2 Running 0 5m23snginx-6984d55cb6-gn94v 2/2 Running 0 5m23snginx-6984d55cb6-kcj62 2/2 Running 0 5m23s使用i
11、exec可以直接运行如下命令:结果如下:我们知道通过Deployment创建的Pod,Pod的命名格式为Deployment名字+加上Deployment的一段hash + Replica的一段hash,我们通常只记得Deployment的名字,而不知道Pod的名字,通过iexe只需要输入Deployment名字即可,通过交互式选择Pod,非常方便。doctor和brew doctor类似的工具,用于检查Kubernetes的健康状况以及扫描Kubernetes集群中的异常资源,比如etcd member状态、Node状态、孤儿endppoint等。- TriageReport:- Resou
12、rce: Endpoints AnomalyType: Found orphaned endpoints! Anomalies: - kube-controller-manager - kube-scheduler - virt-controller - virt-operatoraccess-matrix查看权限矩阵,比如查看针对Pod的API操作权限:df-pvkubectl目前只能获取pv的空间大小,而无法显示pv的真实使用情况,但其实kubelet summary API从1.8版本开始就已经有这些数据了,但官方kubectl工具还无法直接显示这些数据。df-pv插件通过读取的summ
13、ay API获取pv的使用量:resource-capacity/view-allocations查看Node节点的CPU和内存使用情况:如果要查看更详细,细粒度到每个Pod,则可以使用view-allocations插件:tail我们知道kubectl的logs命令查看日志需要指定pod名称,如果一个pod还有多个容器,还需要指定容器名称,而tail插件支持同时查看多个pod的日志,支持通过Deployment、ReplicaSet等资源类型过滤日志。Kubernetes实用命令行工具kube-ps1 / kube-tmuxkube-ps1脚本即修改PS1环境变量,实现把Kubernetes
14、的context信息如cluster名称、namespace等显示在bash/zsh的命令提示符中:而kube-tmux则把信息显示在tmux:kube-shell / kube-promptkube-shell和kube-prompt都是基于kubectl实现的交互式shell,支持命令自动补全、关键字高亮等功能。其中kube-shell基于Python实现,使用起来和ipython差不多。不过实测kube-shell命令补全功能不是很全,比如 - all - namespaces这个参数就补全不了,并且也不支持资源的自动补全。注:图中的灰色 - all - namespaces参数不是自动补全,而是类似fish的历史命令提示。因此更推荐使用 kube - prompt,kube-prompt支持资源的自动补全:不过个人认为kubectl自带的命令自动补全功能已经够用了:如果需要频繁切换kubectl shell和OS shell,个人觉得使用OS shell + kubectl自动补全反而效率更高。终极工具k9s最后介绍一个终极Kubernetes命令行工具k9s,看它的logo就很形象,就是用来管理k8s资源的:k9s是基于curses实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光化学氧化技术
- 期中考试准备题目及答案
- 2025-2026学年广东省深圳市龙岗区八年级(上)期中地理试卷
- 廉江初一考试题目及答案
- 2024人教版八年级地理上册第四章第二节《工业》每课时同步高效导学案汇编(含两个导学案)
- 2024苏教版二年级科学上册全册每节课教案汇编(含12个教案)
- 服装生产员题库及答案
- 方位逻辑题目及答案
- 企业安全管理课程培训课件
- 小学五年级语文上册语文园地二民间故事结局规律课件
- 移动应用程序权限管理与加固项目需求分析
- 中华人民共和国简史学习通超星课后章节答案期末考试题库2023年
- 建筑施工事故案例PPT
- 农产物料干燥技术物料干燥与贮藏
- 核对稿300单元分析响应
- GB/T 5231-2022加工铜及铜合金牌号和化学成分
- GB/T 5097-2020无损检测渗透检测和磁粉检测观察条件
- GB/T 24689.2-2017植物保护机械杀虫灯
- GB 32166.1-2016个体防护装备眼面部防护职业眼面部防护具第1部分:要求
- 第21课《女娲造人》课件(共22张PPT) 部编版语文七年级上册
- 2022-2023学年人教版高中地理选择性必修一课件:5.1 自然地理环境的整体性 (33张)
评论
0/150
提交评论