转载至我的博客 ,公众号:架构成长指南
大家好,我是蜗牛哥,今天介绍一款k8s的别名工具,可以让你高效工作,下面是相关介绍
介绍
我们在管理 Kubernetes集群和执行指定任务是比较复杂和费时的。但是如果使用正确的kubectl别名集,可以大幅简化Kubernetes管理并提高我们的工作效率。在本文中,我们将分享一些有用的 kubectl 别名,它们可以帮助我们更快、更轻松地执行常见任务。从查询资源信息到对 Pod 进行故障排除和管理节点,这些别名将成为 Kubernetes 工具包中的宝贵工具。因此,让我们深入研究并发现简化 Kubernetes 管理所需的 kubectl 别名!
前置依赖
在开始使用这些实用的 kubectl 别名之前,需要确保我们的电脑满足以下前置条件:
-
安装Kubectl
-
安装Krew plugins manager,它是命令行工具的插件管理器,目前 Krew 上分布着230 个kubectl 插件 。
-
安装Kubectl-neat Krew plugin插件,这个插件的作用是,消除 Kubernetes 清单中的混乱,使其更具可读性,比如下图,用红色标记的行被认为是多余的,将被此插件从输出中删除。
-
在用户目录,创建
mkdir ~/.kube
文件夹
别名设置
把以下别名命令添加到环境变量中,并执行source
命令进行生效
# autocomplete kubectl & helm
source <(kubectl completion zsh)
source <(helm completion zsh)
alias k=kubectl
# when using below aliases, print kubectl command and then execute it
function kctl() { echo "+ kubectl $@" && command kubectl $@ }
# add aliases collection like 'kgpo' for 'kubectl get pods` from https://github.com/ahmetb/kubectl-aliases
[ ! -f ~/.kube/aliases.sh ] && curl -fsSL "https://raw.githubusercontent.com/ahmetb/kubectl-aliases/master/.kubectl_aliases" > ~/.kube/aliases.sh && sed -i -e 's/kubectl/kctl/g' ~/.kube/aliases.sh
source ~/.kube/aliases.sh
# set default namespace
alias kn='kctl config set-context --current --namespace'
# get events sorted by last timestamp
alias kgel='kctl get events --sort-by=.lastTimestamp'
# get events sorted by creation timestamp
alias kgec='kctl get events --sort-by=.metadata.creationTimestamp'
# get pod's descending events
function kger() { kctl get events --sort-by=.lastTimestamp --field-selector involvedObject.name="$@" }
# get 'real' all
alias kgworld='kctl get $(kubectl api-resources --verbs=list --namespaced -o name | paste -sd ",")'
# display all nodes resources request and limits
alias kgnr="k get nodes --no-headers | awk '{print \$1}' | xargs -I {} sh -c 'echo {} ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- ; echo '"
# start a debug pod (including lots of troubleshooting tools)
alias kdebug="kctl -n default run debug-pod --rm -it --tty --image leodotcloud/swiss-army-knife:v0.12 --image-pull-policy=IfNotPresent -- bash"
# get pod's containers list
function kgpc() { kctl get pod -o jsonpath="{.spec.containers[*].name}" "$@" && echo "" }
# ping a service, ex: 'kping whoami:8080'
alias kping='kctl run httping -it --image bretfisher/httping --image-pull-policy=IfNotPresent --rm=true --'
# get existing pod's yaml without forbidden fields, ex: 'kyaml pod whoami'
function kyaml() { kubectl get "$@" -o yaml | kubectl-neat }
# display and delete failed pods in current namespace
alias krmfailed='kctl delete pods --field-selector=status.phase=Failed'
添加完以后执行kgpo
命令进行验证,如下图,通过此命令可以查询到pod列表,是不是很方便
用例说明
下面让我们研究下这些别名的一些用例和解释。
1. 更快地执行基本命令
kubectl -aliases Github 存储库包含一个生成数百个基本别名的脚本,这些别名包含在上面的列表中。
下面是一些关键命令概览
alias k='kubectl'
alias kg='kubectl get'
alias kgpo='kubectl get pod'
alias ksysgpo='kubectl --namespace=kube-system get pod'
alias krm='kubectl delete'
alias krmf='kubectl delete -f'
alias krming='kubectl delete ingress'
alias krmingl='kubectl delete ingress -l'
alias krmingall='kubectl delete ingress --all-namespaces'
alias kgsvcoyaml='kubectl get service -o=yaml'
alias kgsvcwn='kubectl get service --watch --namespace'
alias kgsvcslwn='kubectl get service --show-labels --watch --namespace'
alias kgwf='kubectl get --watch -f'
...
为了表示每个命令的作用,每次执行简写命令时,都会显示完整的命令
ksysgpo
2. 获取排序和过滤的事件
对 Kubernetes 集群中的事件进行排序是比较麻烦。通用添别名来按上次查看日期和创建时间戳对事件进行排序就非常方便
kgel -A
kgec -A
另外,您可以使用别名过滤特定资源的事件kger
3. 查询节点资源请求和限制
要查看集群中节点的资源请求和限制,可以使用别名kgnr
。此别名提供了每个节点的 CPU 和内存分配信息
kgnr
4.启动调试pod
由于pod的容器镜像只安装了必要的软件,所以当出现故障时,必须在线安装相关工具进行问故障排除,而pod 重启又得重新安装,而这里提供了kdebug
命令,可以快速启动一个Swiss Army Knife Pod
,这个pod预装所有基本工具的来解决问题。
下面是一些内置的工具列表
arping, arptables, bridge-utils, ca-certificates, conntrack, curl, docker, dnsutils, ethtool, iperf, iperf3, iproute2, ipsec-tools, ipset, iptables, iputils-ping, jq, kmod, kubectl, ldap-utils, less, libpcap-dev, man, manpages-posix, mtr, net-tools, netcat, netcat-openbsd, openssl, openssh-client, psmisc, socat, tcpdump, telnet, tmux, traceroute, tcptraceroute, tree, ngrep, vim, wget, yq
5. 获取pod的容器列表
要检索 pod 内的容器列表,可以使用别名kgpc
。当需要访问Pod 中的特定容器时,非常有用
6. Service可用性检测
测试 Kubernetes Service的可用性是比较麻烦的。而kping
别名使用HTTP Ping Docker 映像来 ping 服务并检查其可用性,就方便很多:
kgsvc
执行kping dp-manager-backend:80
进行测试
7. 获取pod的yaml 内容
在使用kubectl get pod -o=yaml
查看pod资源的 YAML 时,某些字段是不必要的,并且可能会在重新部署 YAML 时导致问题。别名kyaml
通过提供排除不必要字段的可运行清单来解决此问题,注意此插件依赖前置条件的kubectl-neat
插件
执行kyaml pod pod 名称
查询,结果如下图,是不是很清爽。
8. 删除失败(和驱逐)的 Pod
失败的 Pod 可能会使集群混乱并影响性能。该krmfailed
别名允许您轻松删除当前命名空间中失败的 Pod。
总结
这些 kubectl 别名提供了一种简化 Kubernetes命令的便捷方法。通过使用这些别名,我们可以在使用 kubectl 命令时节省大量时间。无论你是检索特定信息、对 Pod 进行故障排除还是管理资源,这些别名都可以满足需求