您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

扩展你的KUBECTL功能

时间:2022-07-23 11:17:02  来源:  作者:懵懵哟SRE

随着 Kube.NETes 成为主流的应用容器编排平台,其命令行客户端 kubectl 也成为了我们日常部署应用,维护集群最常用的工具。
kubectl 自身提供了强大的内置命令来满足我们对集群的操作,例如 get 获取集群内的资源对象,proxy 创建代理之类的,除了内置的这些自命令,kubectl 还提供了可扩展的能力,允许我们安装自己编写或者社区提供的插件来增强我们使用 kubectl 的生产力。

这里将给大家介绍如何在安装 kubectl 扩展插件,以及几款我在日常工作中常用到的社区提供的插件。

在安装和使用 kubectl 插件之前,请确保以及安装和配置好 kubectl 命令行工具和 git 工具。

KREW

首先介绍的第一款扩展插件就是 krew - k8s特别兴趣小组开发的一款用于安装和管理 kubectl 扩展插件的插件。

代码:
https://Github.com/kubernetes-sigs/krew

安装 krew (在macOS/linux上):

  1. 在终端执行(Bash或者Zsh)执行
(
  set -x; cd "$(mktemp -d)" &&
  OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
  ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/(arm)(64)?.*/12/' -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
)
  1. 将 $HOME/.krew/bin 加入到 PATH 环境变量,更新你的 .bashrc 或者 .zshrc 文件,添加下面一行
export PATH="${KREW_ROOT:-$HOME/.brew}/bin:$PATH"

然后重启你的终端。

  1. 测试 krew 已经安装成功
❯ k krew version
OPTION            VALUE
GitTag            v0.4.3
GitCommit         dbfefa5
IndexURI          https://github.com/kubernetes-sigs/krew-index.git
BasePath          /home/mengz/.krew
IndexPath         /home/mengz/.krew/index/default
InstallPath       /home/mengz/.krew/store
BinPath           /home/mengz/.krew/bin
DetectedPlatform  linux/amd64
  1. (可选)设置 krew 别名
alias krew='kubectl-krew'
echo "alias krew='kubectl-krew'" >> ~/.alias

这样就安装完成了,krew 是 kubectl 插件管理器,而 krew 自己又是插件,所以之后可以使用 krew 来更新 krew。

windows 上安装,请参考
https://krew.sigs.k8s.io/docs/user-guide/setup/install/ 。

使用示例

  • 列出当前已安装的插件
❯ krew list
PLUGIN            VERSION
krew              v0.4.3
  • 安装插件(下面介绍的其他插件将使用这个方式安装)
❯ krew install [插件名]
  • 更新本地插件索引(查看是否有插件更新)
❯ krew update
Updated the local copy of plugin index.
  New plugins avAIlable:
    * liqo
    * switch-config
  Upgrades available for installed plugins:
    * open-svc v2.5.2 -> v2.5.3
    * rbac-tool v1.7.1 -> v1.8.0
    * rolesum v1.5.1 -> v1.5.5
  • 升级插件
❯ krew upgrade open-svc
Updated the local copy of plugin index.
Upgrading plugin: open-svc
  • 删除插件
❯ krew uninstall [插件名]

krew-index 里维护了上百款可通过 krew 直接安装的插件。接下来将介绍其他几款我日常使用的 kubectl 插件。

EXAMPLE

代码:
https://github.com/seredot/kubectl-example

安装 krew install example

example 插件可用于快速生成k8s资源对象的yaml文件示例,例如

❯ k example deploy
---
apiVersion: Apps/v1
kind: Deployment
metadata:
  name: Nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.14.2
          ports:
            - containerPort: 80

当我们想临时通过资源声明文件部署应用的时候,可以使用该插件来生成模板。

FLEET

代码:
https://github.com/kubectl-plus/kcf

安装: krew install fleet

fleet 插件可快速查看当前配置的集群的概览

❯ k fleet
CLUSTER                                    VERSION         NODES NAMESPACES PROVIDER   API
homek8sc1                                  v1.23.8         3/3   4          ?          https://k8sc1.mengz.lan:6443
api-sandbox-x8i5-p1-openshiftapps-com:6443 v1.23.5+9ce5071 ?     ?          ?          https://api.sandbox.x8i5.p1.openshiftapps.com:6443
minikube                                   v1.22.3         1/1   4          minikube   https://192.168.64.3:8443

GET-ALL

代码:
https://github.com/corneliusweig/ketall

安装: krew install get-all

get-all 插件获取集群(或者某一个名字空间)的所有资源对象

❯ k get-all -n kube-system
NAME                                                                                     NAMESPACE    AGE
configmap/calico-config                                                                  kube-system  13d  
configmap/coreDNS                                                                        kube-system  13d  
configmap/extension-apiserver-authentication                                             kube-system  13d  
configmap/kube-proxy                                                                     kube-system  13d  
configmap/kube-root-ca.crt                                                               kube-system  13d  
configmap/kubeadm-config                                                                 kube-system  13d  
configmap/kubelet-config-1.23                                                            kube-system  13d  
endpoints/kube-dns                                                                       kube-system  13d
...

HTPASSWD

代码:
https://github.com/shibumi/kubectl-htpasswd

安装: krew install htpasswd

htpasswd 是 nginx-ingress 兼容的基础认证密码生成器

❯ k htpasswd create aaa-basic-auth user1=user1password user2=user2password -o yaml --dry-run
apiVersion: v1
data:
  auth: dXNlcjE6JDJhJDEwJDVNeEJGT3lEUEJYT0xkUldlblNWME91RGtZTzFQOElJNXJuRnh5blpUdC55L2FUUUNDYzJ1CnVzZXIyOiQyYSQxMCRVbFdHOG5NTU4zRGVpOC5GMmVRM3EuYWhxTENYZGtLYUJ1cXZzT3lEOGl0ODJRdU4zV1c1dQ==
kind: Secret
metadata:
  creationTimestamp: null
  name: aaa-basic-auth
  namespace: default
type: Opaque

该插件在为服务创建基础认证的 Ingress 很方便。

IMAGES

代码:
https://github.com/chenjiandongx/kubectl-images

安装: krew install images

images 现实名字空间中使用的容器镜像信息

❯ k images
[Summary]: 1 namespaces, 2 pods, 2 containers and 1 different images
+------------------------+---------------+-------------------+
|        PodName         | ContainerName |  ContainerImage   |
+------------------------+---------------+-------------------+
| webapp-98f7444c5-8772w | nginx         | nginx:1.21-alpine |
+------------------------+               +                   +
| webapp-98f7444c5-vsxr9 |               |                   |
+------------------------+---------------+-------------------+

KTOP

代码:
https://github.com/vladimirvivien/ktop

安装: krew install ktop

ktop 插件是以类似 Linux Top 工具的方式来查询k8s集群的负载情况

❯ k ktop
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
│   API server: https://k8sc1.mengz.lan:6443 Version: v1.23.8 context: admin@homek8sc1 User: kubernetes-admin namespace: (all)  metrics: not connected                            v0.3.0  
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
╔  Cluster Summary ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
║ ptime: 13d   Nodes: 3   Namespaces: 4    Pods: 15/15 (20 imgs)     Deployments: 5/5    Sets: replicas 5, daemons 6, stateful 0      Jobs: 0 (cron: 0)    PVs: 0 (0Gi) PVCs: 0 (0Gi)     
║ PU: [|||||||||||                             ] 1600m/6000m (26.7% requested)               Memory: [||                                      ] 1Gi/11Gi (2.5% requested)                 
╚ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
┌  Nodes (3) ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─  
│   NAME                STATUS   AGE   VERSION   INT/EXT IPs            OS/ARC                      PODS/IMGs    DISK    CPU                               MEM                            
│   homek8sc1-control   Ready    13d   v1.23.8   192.168.0.140/<none>   Ubuntu 20.04.4 LTS/amd64    9/10         16Gi    [||||||    ] 1100m/2000m (55%)    [||        ] 1Gi/2Gi (13%)     
│   homek8sc1-worker1   Ready    13d   v1.23.8   192.168.0.141/<none>   Ubuntu 20.04.4 LTS/amd64    3/5          16Gi    [||        ] 250m/2000m (12%)     [          ] 0Gi/5Gi (0%)      
│   homek8sc1-worker2   Ready    13d   v1.23.8   192.168.0.142/<none>   Ubuntu 20.04.4 LTS/amd64    3/5          16Gi    [||        ] 250m/2000m (12%)     [          ] 0Gi/5Gi (0%)      
│                                                                                                                                                                                         
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
┌  Pods (15) ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
│ AMESPACE    POD                                        READY   STATUS    RESTARTS   AGE   VOLS   IP              NODE                CPU                       MEMORY                   
│ ube-system  kube-controller-manager-homek8sc1-control  1/1     Running   1          13d   8/8    192.168.0.140   homek8sc1-control   [|         ] 200m 10.0%   [          ] 0Gi 0.0%    
│ ube-system  kube-proxy-4c9nq                           1/1     Running   2          13d   4/4    192.168.0.141   homek8sc1-worker1   [          ] 0m 0.0%      [          ] 0Gi 0.0%    
│ ube-system  kube-proxy-4whcn                           1/1     Running   1          13d   4/4    192.168.0.140   homek8sc1-control   [          ] 0m 0.0%      [          ] 0Gi 0.0%    
│ ube-system  kube-proxy-bz8lt                           1/1     Running   3          13d   4/4    192.168.0.142   homek8sc1-worker2   [          ] 0m 0.0%      [          ] 0Gi 0.0%    
│ ube-system  kube-scheduler-homek8sc1-control           1/1     Running   1          13d   1/1    192.168.0.140   homek8sc1-control   [|         ] 100m 5.0%    [          ] 0Gi 0.0%    
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

总结

krew-index 里包含了大量功能强大的扩展插件,涵盖了 RBAC 管理,资源管理等功能,这里没法一一列出。不过有了 krew ,我们可以很方便地安装需要的扩展,以在日常工作中提高我们管理k8s集群的的生产力。

参考

https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/

https://krew.sigs.k8s.io/docs/user-guide/quickstart/



Tags:   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
凌晨3点北京鬼市,天亮就消失,2大规矩:看货不问价,照货不照人
顾名思义,鬼市开市的时间节点在天明之前,至于起点有的是三更,有的是五更,并无一等。其实鬼市各地都有,只不过北京的鬼市更出名,就连老北京人也觉得这里阴森森的,却又很向往想去探险...【详细内容】
2024-04-19  Search:   点击:(3)  评论:(0)  加入收藏
老美怂了?美国众议院计划给予字节跳动额外180天出售TikTok
据外媒报道,迫使字节跳动剥离TikTok的新众议院法案将包括一项条款,赋予总统允许公司额外180天时间完成出售的自由裁量权。该法案已于3月13日获得众议院投票通过,预计将在周六放...【详细内容】
2024-04-19  Search:   点击:(4)  评论:(0)  加入收藏
Meta AI 全球市场扩张,并上线网页版 meta.ai
IT之家 4 月 19 日消息,Meta 公司近日宣布 Llama 3 大语言模型之外,扩展 Meta AI 服务到美国之外的 13 个国家和地区,还宣布上线专门的聊天网站:meta.ai。Meta 公司在新闻稿中表...【详细内容】
2024-04-19  Search:   点击:(2)  评论:(0)  加入收藏
重磅!Meta推出开源大模型Llama 3,性能直逼GPT-4
每经编辑:杜宇当地时间4月18日,AI 领域迎来重磅消息,Meta正式发布了人们等待已久的开源大模型Llama 3。与此同时,Meta首席执行官扎克伯格宣布:基于最新的Llama 3模型,Meta的AI助手...【详细内容】
2024-04-19  Search:   点击:(4)  评论:(0)  加入收藏
多地将禁止超标车上路,还可以选择骑行电摩,交警告诉你上牌流程
超标电动车由于不符合电动车的安全性能标准,存在着安全隐患,所以在过渡期结束以后,这种车辆将禁止上路行驶,接下来有多地将禁止超标电动车上路。广大车主除了选择电动自行车以外...【详细内容】
2024-04-19  Search:   点击:(3)  评论:(0)  加入收藏
喝完一瓶啤酒,多久才能开车?
首先,需要明确的是,酒驾是极其危险的行为,不仅危及自身安全,还可能威胁到他人生命。根据交通法规,当驾驶人血液中的酒精含量达到或超过20mg/100ml时,即被认定为酒驾,而超过80mg/100...【详细内容】
2024-04-19  Search:   点击:(2)  评论:(0)  加入收藏
古代富人都喜欢“扬州瘦马”,什么是“扬州瘦马”?说出来别不信
扬州的繁荣也催生了一些不道德的商机,其中之一就是“扬州瘦马”。这与其说是一个关于马的故事,不如说是一个关于封建社会对女性的摧残的故事。在中国古代,妇女地位低下,一些父母...【详细内容】
2024-04-19  Search:   点击:(4)  评论:(0)  加入收藏
夫妻一方可查询配偶财产状况,为何多地先后立法?
专家认为,这有助于保障妇女对婚姻财产的知情权。不过近年来实践发现,即便有地方出台类似规定,在现实的执行中仍会遭遇一些阻力,尤其是在查询房产和银行存款方面文|《财经》记者...【详细内容】
2024-04-19  Search:   点击:(3)  评论:(0)  加入收藏
“货币战争”开打?五大央行集体出动!
作者:暴哥来源:暴财经pro(ID:icaijing123)1997年东南亚金融危机重演?亚洲五大央行出手,绝不能让悲剧重来!1美元掀桌子,亚洲货币遭遇一场全面风暴!在《美元开始收割了!》一文中暴哥说过,...【详细内容】
2024-04-19  Search:   点击:(3)  评论:(0)  加入收藏
电影《变形金刚:起源》首支预告片发布:擎天柱、威震天还是好朋友
快科技4月19日消息,日前,1986年之后首部《变形金刚》动画电影《变形金刚:起源》发布首款预告片,影片暂定9月13日北美上映。该片将时间线拨回赛博坦时期,实现了观众一直以来期待的...【详细内容】
2024-04-19  Search:   点击:(2)  评论:(0)  加入收藏
▌简易百科推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  小白debug  微信公众号  Tags:Docker   点击:(15)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22    51CTO  Tags:Docker   点击:(13)  评论:(0)  加入收藏
Containerd容器管理
Nginx 指定容器名称 使用 ctr container create 命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。容器基本操作容器基本操作主要是 ctr image 命令,查看命令帮...【详细内容】
2024-03-20  云原生运维圈  微信公众号  Tags:容器   点击:(15)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  云原生运维圈  微信公众号  Tags:Docker   点击:(29)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01    简易百科  Tags:Kubernetes   点击:(179)  评论:(0)  加入收藏
我们一起聊聊容器资源自愈
在企业实际在使用容器这类资源的时候,除了技术本身,要考虑的其他问题也会很多。企业管理的容器有千千万万,出于效率考虑,对于有特殊需求的容器如何进行批量创建和管理呢,这就需要...【详细内容】
2024-01-30  匠心独运维妙维效  微信公众号  Tags:容器   点击:(51)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  waynblog  微信公众号  Tags:Docker   点击:(69)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  编程技术汇  今日头条  Tags:Docker   点击:(84)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04    Linux中国  Tags:Docker   点击:(128)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  云云众生s  微信公众号  Tags:Kubernetes   点击:(124)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条