Kubernetes管理神器-插件管理器Krew

Kubernetes管理神器-插件管理器Krew

Krew是Kubernetes的一个插件管理器,它允许用户搜索、安装和管理kubectl插件。通过Krew,用户可以方便地扩展kubectl的功能,使用社区提供的各种插件。

类似于apt,dnf,brew等工具,截至目前,已提供超过200+的kubectl插件。

对于kubectl用户:Krew可以帮助你查找、安装和管理kubectl插件。

对于插件开发人员:Krew帮助您在多个平台上打包和分发插件。

官方仓库:https://github.com/kubernetes-sigs/krew

安装和配置krew

1. 准备工作

  • 安装git;

  • 需要确保系统已安装kubectl和一个兼容的Shell(如Bash或Zsh),通过命令echo $SHELL确认shell类型;

2. 运行下面的命令下载安装krew

下面是官方提供的命令,自动判断当前环境的系统、架构等信息,安装最新版本的krnew。

(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.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&tar zxvf "${KREW}.tar.gz" &&./"${KREW}" install krew
)

也可以手动下载解压安装,访问https://github.com/kubernetes-sigs/krew/releases/获取最新版本:

# 以v0.4.4版本为例
root@master1:~# wget https://github.com/kubernetes-sigs/krew/releases/download/v0.4.4/krew-linux_amd64.tar.gz
root@master1:~# tar zxvf krew-linux_amd64.tar.gz
./LICENSE
./krew-linux_amd64
root@master1:~# ./krew-linux_amd64 install krew
WARNING: To be able to run kubectl plugins, you need to add
the following to your ~/.bash_profile or ~/.bashrc:export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"and restart your shell.Updated the local copy of plugin index.
Installing plugin: krew
W0709 10:13:36.918064   12993 install.go:160] Skipping plugin "krew", it is already installed
  1. 将Krew的路径添加到你的环境变量中。将下面的命令添加到 .bashrc.zshrc文件中。
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"

重新打开shell或者source ~/.bashrc生效。

  1. 运行如下命令检查安装
# kubectl插件列表
root@master1:~# kubectl plugin list
The following compatible plugins are available:/root/.krew/bin/kubectl-krew# krew版本信息
root@master1:~# kubectl krew version
OPTION            VALUE
GitTag            v0.4.4
GitCommit         343e657
IndexURI          https://github.com/kubernetes-sigs/krew-index.git
BasePath          /root/.krew
IndexPath         /root/.krew/index/default
InstallPath       /root/.krew/store
BinPath           /root/.krew/bin
DetectedPlatform  linux/amd64
  1. 删除或卸载
root@master1:~# rm -rf  /root/.krew 
  1. krew帮助信息
root@master1:~# kubectl krew
krew is the kubectl plugin manager.
You can invoke krew through kubectl: "kubectl krew [command]..."Usage:kubectl krew [command]Available Commands:help        Help about any commandindex       Manage custom plugin indexesinfo        Show information about an available plugininstall     Install kubectl pluginslist        List installed kubectl pluginssearch      Discover kubectl pluginsuninstall   Uninstall pluginsupdate      Update the local copy of the plugin indexupgrade     Upgrade installed plugins to newer versionsversion     Show krew version and diagnosticsFlags:-h, --help      help for krew-v, --v Level   number for the log level verbosityUse "kubectl krew [command] --help" for more information about a command.

使用Krew

安装好Krew后,就可以通过kubectl krew命令来管理插件了。以下是一些常见的命令:

  1. 列出所有可用插件
kubectl krew search
  1. 安装插件
kubectl krew install <plugin-name>
  1. 列出已安装的插件
kubectl krew list
  1. 更新插件
kubectl krew upgrade <plugin-name>
  1. 查看插件信息
kubectl krew info <plugin-name>
  1. 卸载插件
kubectl krew uninstall <plugin-name>

示例

以下是如何使用Krew安装并使用一个名为ns(namespace switcher)的插件的示例:

  1. 搜索插件
kubectl krew search ns
  1. 安装插件
kubectl krew install nsroot@master1:~# kubectl krew install ns
Updated the local copy of plugin index.
Installing plugin: ns
Installed plugin: ns
\| Use this plugin:|      kubectl ns| Documentation:|      https://github.com/ahmetb/kubectx| Caveats:| \|  | If fzf is installed on your machine, you can interactively choose|  | between the entries using the arrow keys, or by fuzzy searching|  | as you type.| /
/
WARNING: You installed plugin "ns" from the krew-index plugin repository.These plugins are not audited for security by the Krew maintainers.Run them at your own risk.

ns插件用于切换k8s命名空间。

说明

如果需要配置代理,配置linux全局代理即可。

  1. 使用插件切换命名空间
kubectl ns <namespace-name>

切换默认命名空间后,可以简化部分操作:

root@master1:~# kubectl get ns
NAME              STATUS   AGE
calico-system     Active   7d18h
default           Active   7d18h
gitlab            Active   4d22h
harbor            Active   6d18h
ingress-nginx     Active   7d16h
jenkins           Active   5d20h
kube-node-lease   Active   7d18h
kube-public       Active   7d18h
kube-system       Active   7d18h
metallb-system    Active   4d23h
openebs           Active   6d19h
tigera-operator   Active   7d18h# 切换到harbor命名空间
root@master1:~# kubectl ns harbor
Context "kubernetes-admin@kubernetes" modified.
Active namespace is "harbor".# 此时harbor为默认的命名空间
root@master1:~# kubectl get pod
NAME                                 READY   STATUS    RESTARTS      AGE
harbor-core-568c4c7c74-zblkc         1/1     Running   5 (37m ago)   19h
harbor-database-0                    1/1     Running   1 (37m ago)   20h
harbor-jobservice-7b5f6689f4-6tncs   1/1     Running   9 (36m ago)   19h
harbor-portal-7c5d84cbb8-t6v22       1/1     Running   4 (37m ago)   6d18h
harbor-redis-0                       1/1     Running   1 (37m ago)   19h
harbor-registry-86f55b88fb-k6lwh     2/2     Running   8 (37m ago)   6d16h
harbor-trivy-0                       1/1     Running   1 (37m ago)   19h

常用的一些插件

每个插件安装完成后都会给出使用的格式,可以使用–help查看更详细的说明。同时给出了插件的项目地址。

1. kubectl tree

显示Kubernetes资源的层次结构,以树状结构显示资源及其所有者关系。

仓库地址:https://github.com/ahmetb/kubectl-tree

# 插件安装
root@master1:~# kubectl krew install tree
Updated the local copy of plugin index.
Installing plugin: tree
Installed plugin: tree
\| Use this plugin:|      kubectl tree| Documentation:|      https://github.com/ahmetb/kubectl-tree| Caveats:| \|  | * For resources that are not in default namespace, currently you must|  |   specify -n/--namespace explicitly (the current namespace setting is not|  |   yet used).| /
/
WARNING: You installed plugin "tree" from the krew-index plugin repository.These plugins are not audited for security by the Krew maintainers.Run them at your own risk.root@master1:~# kubectl tree  --help
Show sub-resources of the Kubernetes objectUsage:kubectl tree KIND NAME [flags]Examples:kubectl tree deployment my-appkubectl tree kservice.v1.serving.knative.dev my-app
...# 查看deploy的层级关系
root@master1:~# kubectl tree deploy harbor-core
NAMESPACE  NAME                                  READY  REASON  AGE
harbor     Deployment/harbor-core                -              6d19h
harbor     ├─ReplicaSet/harbor-core-568c4c7c74   -              6d17h
harbor     │ └─Pod/harbor-core-568c4c7c74-zblkc  True           20h
harbor     └─ReplicaSet/harbor-core-fb5ff9588    -              6d19h

2. kubectl ctx & kubectl ns

快速切换Kubernetes上下文(ctx)和命名空间(ns)。

仓库地址:https://github.com/ahmetb/kubectx

安装:

kubectl krew install ctx
kubectl krew install ns

操作示例:

# switch to another cluster that's in kubeconfig
$ kubectx minikube
Switched to context "minikube".# switch back to previous cluster
$ kubectx -
Switched to context "oregon".# rename context
$ kubectx dublin=gke_ahmetb_europe-west1-b_dublin
Context "gke_ahmetb_europe-west1-b_dublin" renamed to "dublin".# change the active namespace on kubectl
$ kubens kube-system
Context "test" set.
Active namespace is "kube-system".# go back to the previous namespace
$ kubens -
Context "test" set.
Active namespace is "default".

3. kubectl neat

简化kubectl get和kubectl describe的输出,只显示必要的信息。

仓库地址:https://github.com/itaysk/kubectl-neat

安装:

kubectl krew install neat

示例:

kubectl get pod mypod -o yaml | kubectl neat
kubectl get pod mypod -oyaml | kubectl neat -o json
kubectl neat -f - <./my-pod.json
kubectl neat -f ./my-pod.json
kubectl neat -f ./my-pod.json --output yaml

4. kubectl sniff

在Kubernetes pod上进行网络抓包,使用Wireshark格式,依赖wireshark。

ubuntu下安装wireshark:

sudo add-apt-repository universe
sudo apt update
sudo apt install wireshark

仓库地址:https://github.com/eldadru/ksniff

安装:

kubectl krew install sniff

示例:

# 抓取harbor-core容器的流量
root@master1:~# kubectl sniff harbor-core-568c4c7c74-zblkc -c core
INFO[0000] using tcpdump path at: '/root/.krew/store/sniff/v1.6.2/static-tcpdump'
INFO[0000] sniffing method: upload static tcpdump
INFO[0000] sniffing on pod: 'harbor-core-568c4c7c74-zblkc' [namespace: 'harbor', container: 'core', filter: '', interface: 'any']
INFO[0000] uploading static tcpdump binary from: '/root/.krew/store/sniff/v1.6.2/static-tcpdump' to: '/tmp/static-tcpdump'
INFO[0000] uploading file: '/root/.krew/store/sniff/v1.6.2/static-tcpdump' to '/tmp/static-tcpdump' on container: 'core'
INFO[0000] executing command: '[/bin/sh -c test -f /tmp/static-tcpdump]' on container: 'core', pod: 'harbor-core-568c4c7c74-zblkc', namespace: 'harbor'
INFO[0000] command: '[/bin/sh -c test -f /tmp/static-tcpdump]' executing successfully exitCode: '0', stdErr :''
INFO[0000] file found: ''
INFO[0000] file was already found on remote pod
INFO[0000] tcpdump uploaded successfully
INFO[0000] spawning wireshark!
INFO[0000] start sniffing on remote container
INFO[0000] executing command: '[/tmp/static-tcpdump -i any -U -w - ]' on container: 'core', pod: 'harbor-core-568c4c7c74-zblkc', namespace: 'harbor'
INFO[0000] command: '[/tmp/static-tcpdump -i any -U -w - ]' executing successfully exitCode: '1', stdErr :'static-tcpdump: any: You don't have permission to capture on that device
(socket: Operation not permitted)
'
ERRO[0000] failed to start remote sniffing, stopping wireshark  error="executing sniffer failed, exit code: '1'"
INFO[0000] starting sniffer cleanup
INFO[0000] sniffer cleanup completed successfully
Error: signal: killed# 进行提权
root@master1:~# kubectl sniff  harbor-core-568c4c7c74-zblkc -c core --privileged

正常运行后,会在ssh会话通过X11 Forwarding弹出wireshark界面,可以查看当前pod的流量。

5. kubectl view-utilization

显示集群中节点和pod的CPU和内存使用情况。

仓库地址:https://github.com/etopeter/kubectl-view-utilization

安装:

kubectl krew install view-utilization

根据节点、命名空间查看CPU、内存使用情况:

root@master1:~# kubectl view-utilization node
CPU   : ▁▄▁
Memory: ▁▂▁CPU                                   Memory
Node       Requests  %Requests  Limits  %Limits   Requests  %Requests      Limits  %Limits
master1         750         37       0        0  199229440          5           0        0
node1           400         19    1000       49  840957952         17  1073741824       22
node2           400         19       0        0  450887680         11   356515840        9
root@master1:~# kubectl view-utilization namespaces
Namespace       CPU Requests  CPU Limits  Memory Requests  Memory Limits
calico-system              0           0                0              0
harbor                   200        1001        536870912     1073741824
ingress-nginx            300           0        283115520              0
kube-system             1050           0        671088640      356515840
metallb-system             0           0                0              0
openebs                    0           0                0              0

6. kubectl score

对Kubernetes资源进行安全性和最佳实践评分,提供改进建议。

仓库地址:https://github.com/zegl/kube-score

安装:

kubectl krew install score

7. kubectl resource-capacity

以表格形式显示集群中资源(CPU、内存)的使用和分配情况。

仓库地址:https://github.com/robscott/kube-capacity

安装:

kubectl krew install resource-capacity

示例:

root@master1:~# kubectl resource-capacity
NODE      CPU REQUESTS   CPU LIMITS    MEMORY REQUESTS   MEMORY LIMITS
*         1550m (25%)    1000m (16%)   1422Mi (11%)      1364Mi (11%)
master1   750m (37%)     0m (0%)       190Mi (5%)        0Mi (0%)
node1     400m (20%)     1000m (50%)   802Mi (17%)       1024Mi (22%)
node2     400m (20%)     0m (0%)       430Mi (11%)       340Mi (9%)

8. kubectl access-matrix

显示用户或服务账户在不同资源上的权限矩阵。

仓库地址:https://github.com/corneliusweig/rakkess

安装:

kubectl krew install access-matrix

示例:

# Review access to cluster-scoped resources
$ kubectl access-matrix# Review access to namespaced resources in 'default'
$ kubectl access-matrix --namespace default# Review access as a different user
$ kubectl access-matrix --as other-user# Review access as a service-account
$ kubectl access-matrix --sa kube-system:namespace-controller# Review access for different verbs
$ kubectl access-matrix --verbs get,watch,patch# Review access rights diff with another service account
$ kubectl access-matrix --diff-with sa=kube-system:namespace-controller

9. kubectl tail

实时查看Kubernetes pod的日志,类似于Linux中的tail命令。

仓库地址:https://github.com/boz/kail

安装:

kubectl krew install tail

示例:

# pod日志
kubectl tail --pod=harbor-portal-7c5d84cbb8-t6v22
# 服务日志
kubectl tail  --svc=harbor-core
# deloy日志
kubectl tail  --deploy=harbor-portal

10. kubectl get-all

获取所有的k8s资源信息,相比kubectl get all获取到更多的资源信息。

仓库地址: https://github.com/corneliusweig/ketall

kubectl krew install get-all

示例:

root@master1:~# kubectl get-all
...

11. kubectl trace

使用BPF (Berkeley Packet Filter) 进行内核跟踪,调试和分析集群性能。

项目地址:<https://github.com/iovisor/kubectctl l-trace>

kubectl krew install trace

示例:

# Execute a bpftrace program from file on a specific node
kubectl trace run kubernetes-node-emt8.c.myproject.internal -f read.bt# Get all bpftrace programs in all namespaces
kubectl trace get --all-namespaces# Delete all bpftrace programs in a specific namespace
kubectl trace delete -n myns

Krew极大地增强了kubectl的可扩展性,使得管理和使用Kubernetes变得更加高效和便捷。通过Krew,你可以轻松地发现和使用各种有用的插件来简化日常操作和自动化任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

环境快照:精通Conda中的conda env export命令

环境快照&#xff1a;精通Conda中的conda env export命令 引言 在科学计算和软件开发中&#xff0c;能够准确地复制和共享工作环境是至关重要的。Conda提供了conda env export命令&#xff0c;允许用户导出当前环境的配置&#xff0c;包括已安装的包及其版本。这使得环境的复…

2.贪心算法.基础

2.贪心算法.基础 基础知识题目1.分发饼干2.摆动序列3.最大子序和4.买股票的最佳时机24.2.买股票的最佳时机5.跳跃游戏5.1.跳跃游戏26.K次取反后最大化的数组和7.加油站8.分发糖果 基础知识 什么是贪心? 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 贪…

【代码随想录算法训练Day63】最小生成树算法

Day63 图论第七天 prim算法 #include<iostream> #include<vector> #include <climits>using namespace std; int main() {int v, e;int x, y, k;cin >> v >> e;// 填一个默认最大值&#xff0c;题目描述val最大为10000vector<vector<int…

面试经典 106. 从中序与后序遍历序列构造二叉树

最近小胖开始找工作了&#xff0c;又来刷苦逼的算法了 555 废话不多说&#xff0c;看这一题&#xff0c;上链接&#xff1a;https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/description/?envTypestudy-plan-v2&envIdtop-inte…

Linux-磁盘空间不足的清理步骤(详细版本)

当 Linux 服务器出现 “no space left on device” 错误时,意味着磁盘空间已满,需要采取一些措施来清理磁盘,可以根据下面步骤依次清理: 1. 检查磁盘使用情况 首先,使用 df 和 du 命令检查磁盘使用情况,找出哪些目录占用了大量空间。 可以通过如下命令来查询 df -h举例…

将ceph中的submodule转化为正常文件提交到内部仓库中

将ceph中的submodule转化为正常文件提交到内部仓库中 1、问题 ceph 的submodule经常下载不下来导致编译打包都困难&#xff0c;如果有一个方法将submodule下载下来然后直接放到仓库中&#xff0c;以免每次都需要重新clone了。这时发现另外一个问题&#xff0c;submodule没有被…

CentOS 8升级gcc版本

1、查看gcc版本 gcc -v发现gcc版本为8.x.x&#xff0c;而跑某个项目的finetune需要gcc-9&#xff0c;之前搜索过很多更新gcc版本的方式&#xff0c;例如https://blog.csdn.net/xunye_dream/article/details/108918316?spm1001.2014.3001.5506&#xff0c;但执行指令 sudo yu…

如何从 Vue 2 无痛升级到 Vue 3,一文搞定!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 随着 Vue 3 的发布,许多开发者都面临着从 Vue 2 升级到 Vue 3 的挑战。 本文将详细介绍如何从 Vue 2 无痛升级到 Vue 3,包括每个步骤的详细说明与代码示例。 让我们开始吧! 准备工作 在正式开始升级之前,请确保你已经…

纳米级材料尺寸如何测量?

在纳米显微测量领域&#xff0c;基于纳米传动与扫描技术、白光干涉与高精度3D重建技术、共聚焦测量等技术积累&#xff0c;具有自主知识产权的白光干涉仪&#xff08;Z向分辨率可高达0.1纳米&#xff09;和共聚焦显微镜&#xff0c;广泛应用于半导体、3C电子、高校科研等行业领…

VMware安装centos9详细教程(保姆级)

前言 centos9最新的centos版本&#xff0c;在近期的使用中发现它的操作界面与以往的centos7/8更加舒适&#xff0c;界面优化更加精细 项目终止日期&#xff08;EOL&#xff09; 从公告可知&#xff0c;CentOS 项目重心从 CentOS Linux 转移到了 CentOS Stream。下面是各个项…

机场公厕厕位指引屏,布线简单,安装便捷

在人潮涌动的机场&#xff0c;公厕不仅是旅客的必需设施&#xff0c;更是衡量机场服务质量的重要指标。然而&#xff0c;传统机场公厕往往存在信息不透明、清洁维护滞后、高峰期拥挤等问题&#xff0c;严重影响了旅客的使用体验。近年来&#xff0c;随着智慧机场理念的兴起&…

【方法】如何打开设置了密码的ZIP文件?

对于重要的ZIP文件&#xff0c;很多人会设置密码保护&#xff0c;那要如何打开设置了密码的ZIP文件呢&#xff1f;今天我们一起来看下&#xff0c;在记得密码和忘记密码的情况下&#xff0c;如何打开ZIP文件。 情况1&#xff1a; 如果知道ZIP文件原本设置的密码&#xff0c;我…

Excel第28享:如何新建一个Excel表格

一、背景需求 小姑电话说&#xff1a;要新建一个表格&#xff0c;并实现将几个单元格进行合并的需求。 二、解决方案 1、在电脑桌面上空白地方&#xff0c;点击鼠标右键&#xff0c;在下拉的功能框中选择“XLS工作表”或“XLSX工作表”都可以&#xff0c;如下图所示。 之后&…

用LangGraph、 Ollama,构建个人的 AI Agent

如果你还记得今年的 Google I/O大会&#xff0c;你肯定注意到了他们今年发布的 Astra&#xff0c;一个人工智能体&#xff08;AI Agent&#xff09;。事实上&#xff0c;目前最新的 GPT-4o 也是个 AI Agent。 现在各大科技公司正在投入巨额资金来创建人工智能体&#xff08;AI …

Mysql数据库两表连接进行各种操作

一&#xff0c;创建两个表emp和dept&#xff0c;并给它们插入数据 1.创建表emp create table dept (dept1 int ,dept_name varchar(11)) charsetutf8; 2.创建表dept create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int) cha…

使用 Python Schedule 库进行任务调度

文章目录 简介Schedule 库的原理安装 Schedule基本用法导入 Schedule定义任务调度任务运行调度器 调度选项每分钟执行一次任务每小时执行一次任务每天执行一次任务每周特定时间执行任务每特定时间间隔执行任务按条件执行任务 高级用法异步任务多任务调度动态任务调度 优缺点优点…

数据库基础复习

数据库简介 关系型数据库&#xff1a;Mysql 、Oracle 、SqlServer.... DB2 达梦 非关系型数据库&#xff1a;Redis 、MongoDB... MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管…

化妆品3D虚拟三维数字化营销展示更加生动、真实、高效!

随着人们越来越追求高速便捷的生活工作方式&#xff0c;企业在营销市场也偏国际化&#xff0c;借助VR全景制作技术&#xff0c;将企业1:1复刻到云端数字化世界&#xff0c;能带来高沉浸式的逼真、震撼效果。 通过我们独特的漫游点自然场景过渡技术&#xff0c;您将置身于一个真…

Ubuntu22.04系统装好后左上角下划线闪烁不开机(N卡)

折腾了半天以为是ubuntu的系统和硬件不匹配&#xff0c; 最后发现的确有点关系&#xff0c; 就是显卡驱动的问题 解决办法&#xff1a; 1. 进入到safty模式下&#xff0c; 然后配好网络环境 2. 移除所有的驱动相关的包&#xff0c; sudo apt-get remove --purge nvidia* 3.…

23. Java 锁的可重入性验证

1. 前言 本节内容主要是对 Java 锁的可重入性进行验证&#xff0c;锁的可重入性的设计是避免死锁非常好的设计思想。本节内容的知识点如下&#xff1a; 什么是锁的可重入性&#xff0c;这是本节课程的基础内容&#xff1b;了解可重入锁与非可重入性锁的不同之处&#xff0c;以…