如何提升 kubectl 使用效率

kubectl 可能是 Kubernetes(k8s) 最好用的用户接口, 但各种工具都得自己打磨打磨才能用得顺手,kubectl 也不例外。日常使用起来仍然有比较繁琐的地方,比如同时查看多个容器的日志,自定义 get 的输出格式。

准备工作

根据官方速查表配置好 kubectl 的自动补全:

  • Bash

    echo "source > ~/.bashrc
  • Zsh

    echo "if [ $commands[kubectl] ]; then source > ~/.zshrc

假如你对 kubectl 不太熟悉,速查表里余下的内容能快速让你上手,建议一读。另外,github 上还有一份更全面的适合打印的速查表 cheatsheet-kubernetes-A4

别名

执行下面的命令:

cat&gt;&gt;~/.bashrc&lt;<eof alias k="kubectl" ka="kubectl apply --recursive -f" kex="kubectl exec -i -t" klo="kubectl logs -f" kg="kubectl get" kd="kubectl describe" eof kubectl plugin github bash tab path pluginname debug kubernetes context namespace tail pod logs grep podname brew install stern mv . jid jq yum json get yaml xxx labels k8s jsonpath pbcopy array cookbook custom columns docker image deploy .spec.template.spec.containers aylei-master-discovery pingcap aylei-master-monitor prom grafana qotm datawire rss-site nginx tiller-deploy gcr.io> tips: API 对象的 shortname 可以用 `kubectl api-resources` 查看

其实效果仍然一般。还好,对于大部分 `jq` 能实现的转化,`kubectl get` 命令的 `-o=custom-columns` 参数也能实现,并且输出结果的对齐与表头更友好(同时可以不依赖 `jq`):

```bash
$ k get deploy -o=custom-columns=NAME:'.metadata.name',IMAGES:'.spec.template.spec.containers[*].image'NAME                     IMAGESaylei-master-discovery   pingcap/tidb-operator:latestaylei-master-monitor     prom/prometheus:v2.2.1,grafana/grafana:4.6.5qotm                     datawire/qotm:1.3

> 虽然语法略有不同, 但 custom-columns 里的 jsonpath 仍然可以通过 jid 去探索式地获取

(注意 custom-columns 中使用的 JSONPath 语法jq 是不同的, 通配 list 需要用 [*])

定制自己的输出格式

jqcustom-columns 都有一个问题是命令太长了,即使我们用 alias 这么一行巨长的命令也不好维护。还好,jqcustom-columns 都支持从文件中选择查询,考虑到 custom-columns 的输出效果比较好,更适合作为默认输出(jq 我一般用来做 adhoc query),因此我们可以在 custom-columns 的基础上再封装一下。

kubectl get-o=custom-columns-file=<file> 这个参数可以选定一个文件来提供 custom-columns 的信息, 文件格式非常简单:

NAME           IMAGE.metadata.name .spec.template.spec.containers[*].image

但要指定文件感觉还是很麻烦,怎么办呢?刚刚讲的 kubectl 插件机制就派上用场了,我们可以实现一个插件来展示自定义的输出格式,而编写方式嘛,Bash 就足够啦,执行下面的命令直接写完:

cat&gt;&gt;kubectl-ls&lt;<eof see if we have custom-columns-file definedif kubectl get columns path chmod a kubectl-lsmv kubectl-ls>&gt;~/.kube/columns/deploy&lt;<eofname image.metadata.name .spec.template.spec.containers ls kubectl k deployname imageaylei-master-discovery pingcap prom datawire nginxtiller-deploy gcr.io netdata crd definition resources get prometheus operator kg prometheusname created atk8s cat>&gt;~/.kube/columns/prometheus&lt;<eofname replicas version cpu memory alertmanagermetadata.name spec.replicas spec.version spec.resources.requests.cpu spec.resources.requests.memory spec.alerting.alertmanagers k ls prometheus k8sname alertmanagerk8s v2.5.0>   400Mi    alertmanager-main

结语

OK(终于水完了…),这些配置其实都带有很强的个人色彩,我自己用着非常顺手,但可能到大家那边就未必如此了。因此这篇文章只能勉强算是抛砖引玉,假如能有一两点帮助大家提升了效率,那也就达到目的了。

欢迎大家扫码关注,获取更多信息

</eof
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值