K8S實踐:非常實用Kubectl的別名工具推薦,助您高效工作
大家好,我是蝸牛,今天介紹一款Kubernetes的別名工具,可以讓你高效管理k8s 集群,下面是相關介紹
介紹
我們在管理 Kubernetes集群和執(zhí)行指定任務是比較復雜和費時的。但是如果使用正確的kubectl別名集,可以大幅簡化Kubernetes管理并提高我們的工作效率。在本文中,我們將分享一些有用的 kubectl 別名,它們可以幫助我們更快、更輕松地執(zhí)行常見任務。從查詢資源信息到對 Pod 進行故障排除和管理節(jié)點,這些別名將成為 Kubernetes 工具包中的寶貴工具。因此,讓我們深入研究并發(fā)現(xiàn)簡化 Kubernetes 管理所需的 kubectl 別名!
前置依賴
在開始使用這些實用的 kubectl 別名之前,需要確保我們的電腦滿足以下前置條件:
- 安裝Kubectl
- 安裝Krew plugins manager,它是命令行工具的插件管理器,目前 Krew 上分布著230 個kubectl 插件
- 安裝Kubectl-neat Krew plugin插件,這個插件的作用是,消除 Kubernetes 清單中的混亂,使其更具可讀性,比如下圖,用紅色標記的行被認為是多余的,將被此插件從輸出中刪除
圖片
- 在用戶目錄,創(chuàng)建 mkdir ~/.kube 文件夾
別名設置
把以下別名命令添加到環(huán)境變量中,并執(zhí)行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 jsnotallow="{.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'
添加完以后執(zhí)行kgpo命令進行驗證,如下圖,通過此命令可以查詢到pod列表,是不是很方便
圖片
示例說明
下面讓我們研究下這些別名的一些用例和解釋。
1. 更快地執(zhí)行基本命令
kubectl -aliases Github 存儲庫包含一個生成數(shù)百個基本別名的腳本,這些別名包含在上面的列表中。
下面是一些關鍵命令概覽
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'
...
為了表示每個命令的作用,每次執(zhí)行簡寫命令時,都會顯示完整的命令
ksysgpo
圖片
2. 獲取排序和過濾的事件
對 Kubernetes 集群中的事件進行排序是比較麻煩。通用別名來按上次查看日期和創(chuàng)建時間戳對事件進行排序就非常方便
kgel -A
kgec -A
圖片
另外,您可以使用別名過濾特定資源的事件kger
圖片
3. 查詢節(jié)點資源請求和限制
要查看集群中節(jié)點的資源請求和限制,可以使用別名kgnr。此別名提供了每個節(jié)點的 CPU 和內(nèi)存分配信息
kgnr
圖片
4.啟動調試pod
由于pod的容器鏡像只安裝了必要的軟件,所以當出現(xiàn)故障時,必須在線安裝相關工具進行問故障排除,而pod 重啟又得重新安裝,而這里提供了kdebug命令,可以快速啟動一個Swiss Army Knife Pod,這個pod預裝所有基本工具的來解決問題。
圖片
下面是一些內(nèi)置的工具列表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 內(nèi)的容器列表,可以使用別名kgpc。當需要訪問Pod 中的特定容器時,非常有用
圖片
6. Service可用性檢測
測試 Kubernetes Service的可用性是比較麻煩的。而kping別名使用HTTP Ping Docker 映像來 ping 服務并檢查其可用性,就方便很多:
kgsvc
圖片
執(zhí)行kping dp-manager-backend:80進行測試
圖片
7. 獲取pod的yaml 內(nèi)容
在使用kubectl get pod -o=yaml查看pod資源的 YAML 時,某些字段是不必要的,并且可能會在重新部署 YAML 時導致問題。別名kyaml通過提供排除不必要字段的可運行清單來解決此問題,注意此插件依賴前置條件的kubectl-neat插件
執(zhí)行kyaml pod pod 名稱查詢,結果如下圖,是不是很清爽。
圖片
8. 刪除失?。ê万屩穑┑?Pod
失敗的 Pod 可能會使集群混亂并影響性能。該krmfailed別名允許您輕松刪除當前命名空間中失敗的 Pod。
總結
這些 kubectl 別名提供了一種簡化 Kubernetes命令的便捷方法。通過使用這些別名,我們可以在使用 kubectl 命令時節(jié)省大量時間。無論你是檢索特定信息、對 Pod 進行故障排除還是管理資源,這些別名都可以滿足需求。