k8s Krew 插件使用指南

琉璃2年前技术文章1869

kubectl Krew 插件使用指南

前言:在某些情况下,只是使用 kubectl 命令的时候存在效率比较低、功能不满足的问题,针对这些问题,社区提出了krew插件项目。还有一点是:大部分工程师还是喜欢使用黑屏命令行,因为这样的效率是最高的,而且排查问题会更直接。

1、国内安装krew 插件

由于众所周知的网络原因,国内安装krew会比较困难,这里我们采用加速域名加离线安装的方式来进行规避。

$ set -x; cd "$(mktemp -d)" &&
  OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
  ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
  KREW="krew-${OS}_${ARCH}" &&
  curl -fsSLO "https://github.91chi.fun/https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
  tar zxvf "${KREW}.tar.gz" &&
  curl -fsSLO "https://github.91chi.fun/https://github.com/kubernetes-sigs/krew/releases/latest/download/krew.yaml" &&
  ./"${KREW}" install --manifest=krew.yaml --archive=${KREW}.tar.gz && ./"$KREW" update
$ echo 'export PATH="${PATH}:${HOME}/.krew/bin"' >> ~/.bashrc
$ source ~/.bashrc
## 注:在国内下载不下来的所有插件,我们都可以把安装包以及yaml文件单独下载下来,然后通过--manifest和--archive进行安装

2、先安装比较热门一些插件,例如:ns、mtail、get-all等

$ kubectl-krew install ns
$ kubectl-krew install get-all
$ kubectl-krew install mtail

3、使用krew ns插件

## 通过ns 显示所有命名空间以及目前所在的命名空间
$ kubectl-ns
default
flink
kube-node-lease
kube-public
kube-system
monitoring
## 通过ns 切换命名空间
$ kubectl-ns kube-system
Context "kubernetes-admin@kubernetes" modified.
Active namespace is "kube-system".

4、使用krew mtail插件

## 这里我们可以看到前面切换到kube-system命名空间,我们确实可以直接看到此命名空间下的pod
$ kubectl get po
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-7f4f5bf95d-569h2   1/1     Running   5          113d
calico-node-9h885                          1/1     Running   3          113d
calico-node-r4wck                          1/1     Running   3          113d
calico-node-zlsfx                          1/1     Running   3          113d
coredns-74ff55c5b-h9h4k                    1/1     Running   3          113d
coredns-74ff55c5b-qshsv                    1/1     Running   3          113d
etcd-node1                                 1/1     Running   3          113d
etcd-node2                                 1/1     Running   3          113d
etcd-node3                                 1/1     Running   3          113d
kube-apiserver-node1                       1/1     Running   5          113d
kube-apiserver-node2                       1/1     Running   3          113d
kube-apiserver-node3                       1/1     Running   3          113d
kube-controller-manager-node1              1/1     Running   15         113d
kube-controller-manager-node2              1/1     Running   16         113d
kube-controller-manager-node3              1/1     Running   12         113d
kube-proxy-5lpm9                           1/1     Running   3          113d
kube-proxy-kqrs4                           1/1     Running   3          113d
kube-proxy-ptkvz                           1/1     Running   3          113d
kube-scheduler-node1                       1/1     Running   11         113d
kube-scheduler-node2                       1/1     Running   13         113d
kube-scheduler-node3                       1/1     Running   15         113d
## 然后我们使用mtail 一次性跟踪多个相同标签的pod
$ kubectl-mtail component=etcd
+ kubectl logs --follow etcd-node1 '' --tail=10
+ kubectl logs --follow etcd-node2 '' --tail=10
+ kubectl logs --follow etcd-node3 '' --tail=10
[etcd-node2] 2022-08-06 15:38:41.034312 I | etcdserver/api/etcdhttp: /health OK (status code 200)
[etcd-node2] 2022-08-06 15:38:51.034530 I | etcdserver/api/etcdhttp: /health OK (status code 200)
[etcd-node2] 2022-08-06 15:39:01.034467 I | etcdserver/api/etcdhttp: /health OK (status code 200)
[etcd-node1] 2022-08-06 15:38:38.515923 I | etcdserver/api/etcdhttp: /health OK (status code 200)
[etcd-node1] 2022-08-06 15:38:48.515273 I | etcdserver/api/etcdhttp: /health OK (status code 200)
[etcd-node1] 2022-08-06 15:38:58.513805 I | etcdserver/api/etcdhttp: /health OK (status code 200)
[etcd-node3] 2022-08-06 15:38:36.850658 I | mvcc: finished scheduled compaction at 47047460 (took 39.029057ms)
[etcd-node3] 2022-08-06 15:38:45.623930 I | etcdserver/api/etcdhttp: /health OK (status code 200)
[etcd-node3] 2022-08-06 15:38:55.623279 I | etcdserver/api/etcdhttp: /health OK (status code 200)
## 通过输出我们可以看到确实是同时跟踪了所有etcd pod,这在我们debug 很多pod的时候,可以提升很高的效率

5、使用 krew get-all 插件

## 为什么要有get-all 插件?因为kubectl get all 命令实际上并不是列出所有资源对象
## 需要特别注意的是:此命令在k8s集群对象非常多的时候,非常的消耗资源,请谨慎使用,默认输出所有对象
$ kubectl-get_all
NAME                                                                                                               NAMESPACE                  AGE
componentstatus/controller-manager                                                                                                            <unknown>  
componentstatus/scheduler                                                                                                                     <unknown>  
componentstatus/etcd-0                                                                                                                        <unknown>  
configmap/webhook-configmap                                                                                        default                    11d        
configmap/coredns                                                                                                  kube-system                113d       
configmap/grafana-dashboards                                                                                       monitoring                 100d       
endpoints/flink-operator-controller-manager-metrics-service                                                        default                    11d        
endpoints/kube-dns                                                                                                 kube-system                113d       
endpoints/thanos-store                                                                                             monitoring                 74d        
namespace/default                                                                                                                             113d       
namespace/kube-public                                                                                                                         113d       
namespace/kube-system                                                                                                                         113d       
namespace/monitoring                                                                                                                          100d       
node/node1                                                                                                                                    113d       
node/node2                                                                                                                                    113d       
node/node3                                                                                                                                    113d       
persistentvolumeclaim/data-prometheus-k8s-1                                                                        monitoring                 73d        
persistentvolume/pvc-ecf5e60b-2fd0-42db-984a-4c24c49e7dd8                                                                                     54d        
pod/nfs-subdir-external-provisioner-7bbf9b47dd-89t8z                                                               default                    112d       
pod/calico-node-zlsfx                                                                                              kube-system                113d       
secret/endpointslicemirroring-controller-token-c88rd                                                               kube-system                113d       
serviceaccount/default                                                                                             default                    113d       
service/clickhouse-ck-cluster-x                                                                                    default                    74d        
service/thanos-store                                                                                               monitoring                 74d        
mutatingwebhookconfiguration.admissionregistration.k8s.io/flink-operator-mutating-webhook-configuration                                       11d        
validatingwebhookconfiguration.admissionregistration.k8s.io/flink-operator-validating-webhook-configuration                                   11d        
customresourcedefinition.apiextensions.k8s.io/alertmanagerconfigs.monitoring.coreos.com                                                       100d       
customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com                                                             100d    
……
## 通过上面的输出我们可以看到集群内的所有的资源全部都被列了出来,包括命名空间内的和全局的
## 通过-n 可以限制查询的命名空间
$ kubectl get-all -n kube-system
NAME                                                                                     NAMESPACE    AGE
configmap/calico-config                                                                  kube-system  113d  
configmap/coredns                                                                        kube-system  113d   
endpoints/kube-dns                                                                       kube-system  113d  
endpoints/kubelet                                                                        kube-system  113d  
pod/calico-kube-controllers-7f4f5bf95d-569h2                                             kube-system  113d   
pod/calico-node-r4wck                                                                    kube-system  113d  
……

6、安装 node-shell

$ kubectl krew index add kvaps https://github.com/kvaps/krew-index
$ kubectl krew install kvaps/node-shell

7、使用 node-shell 连接node 节点

$  kubectl get no -o wide
NAME    STATUS   ROLES                  AGE    VERSION    INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
node1   Ready    control-plane,master   113d   v1.20.11   172.16.104.70   <none>        Ubuntu 20.04.2 LTS   5.4.0-109-generic   containerd://1.5.5
node2   Ready    control-plane,master   113d   v1.20.11   172.16.104.62   <none>        Ubuntu 20.04.2 LTS   5.4.0-109-generic   containerd://1.5.5
node3   Ready    control-plane,master   113d   v1.20.11   172.16.104.64   <none>        Ubuntu 20.04.2 LTS   5.4.0-109-generic   containerd://1.5.5
$ ip r | grep 172.16
default via 172.16.104.1 dev enp1s0 proto dhcp src 172.16.104.62 metric 100
100.66.209.192/26 via 172.16.104.70 dev tunl0 proto bird onlink
100.74.135.0/26 via 172.16.104.64 dev tunl0 proto bird onlink
172.16.104.0/22 dev enp1s0 proto kernel scope link src 172.16.104.62
## 可以看到我们确实是在node2服务器上面

8、通过上面的几个插件,我们可以看到krew确实有存在的必要,我们可以查看官网上面的插件列表,去获取我们需要的插件。除了我们上面列出来的插件之外,还有很多插件可以使用,大家可以去探索一下。

krew 插件列表:https://krew.sigs.k8s.io/plugins/

相关文章

大数据监控系列(二)——Prometheus+Grafana在CDH使用实践(包含Altermanager告警)

大数据监控系列(二)——Prometheus+Grafana在CDH使用实践(包含Altermanager告警)

1 概述我们之前在《大数据监控系列(一)——Promehteus+Grafana监控概述》中对Promehteus和Grafana的基本概念做了介绍,这里将介绍Promehteus和Grafana在c...

ubuntu20.04服务器安全策略设定

ubuntu20.04服务器安全策略设定

密码策略1、经核查,服务器用户身份标识唯一,口令存储在服务器中采用SHA512算法,服务器配置口令复杂度,口令要求8位以上,字母、数字、特殊字符组成,口令180天定期更换。# SHA512算法查看ca...

大数据集群部署规划(五)规划HDFS容量

        HDFS DataNode以Block的形式,保存用户的文件和目录,同时在NameNode中生成一个文件...

静默安装oracle11g单实例

环境: CentOS 7.8 11.2.0.4.0 orclp:172.16.104.31一、准备1、依赖包检查pdksh 在 redhat 上叫 ksh检查是否有安装root# rpm -q bin...

Python functools 模块

1、reduce 方法reduce 方法,顾名思义就是减少,map reduce 应用:大数据语法: reduce(function, sequence[, initial]) -> value...

Kerberos集成Hadoop

Kerberos集成Hadoop

1、创建kerberos主体(1)路径准备为各服务准备一个安全的路径来存储keytab文件mkdir /etc/security/keytab/ chown -R ro...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。