5个冷门且实用的Kubectl使用技巧,99%的人都要知道

kubectl 是 k8s 官方附带的命令行工具,可以方便的操作 k8s 集群。这篇文章主要介绍一些 kubectl 的别样用法,希望读者有一定基础的 k8s 使用经验。
有一篇文章也介绍了一些技巧,写博客的时候正好搜到了,正好也分享出来吧。
ready-to-use commands and tips for kubectl
1、打印当前使用的api # kubectl 的主要作用就是与 apiserver 进行交互, 而交互的过程, 我们可以通过下面的方式来打印, # 这个命令尤其适合调试自己的api接口时使用.$ kubectl get ns -v=9
2、按状态筛选容器以及删除 这是我在这里学到的命令:force delete evicted / terminated pods in kubernetes
kubectl get pods --all-namespaces --field-selector status.phase=pending -o json | jq '.items[] | kubectl delete pods (.metadata.name) -n (.metadata.namespace)' | xargs -n 1 bash -c# 这个命令要拆开来看# 首先, 获取所有ns中状态为pending的pods, 并以json形式输出# 这个语句其实由很多变体, 比如,我想查找failed的状态, 或是某个deploymentkubectl get pods --all-namespaces --field-selector status.phase=pending -o json # 针对json变量进行处理, 生成可用的脚本# 这里是我想介绍的重点, 利用jq以及kubectl的输出, 构建出可用的命令jq '.items[] | kubectl delete pods (.metadata.name) -n (.metadata.namespace)'# 执行每一条命令# 注意, 这种命令一定要好好调试, 删掉预期之外的pod就不好了.xargs -n 1 bash -c# 例如, 下面的语句可以找到所有的pods并打印可以执行的语句kubectl get pods --all-namespaces --field-selector status.phase=running -o json | jq '.items[] | kubectl get pods (.metadata.name) -o wide -n (.metadata.namespace)'kubectl get pods metrics-server-6d684c7b5-gtd6q -o wide -n kube-systemkubectl get pods local-path-provisioner-58fb86bdfd-98frc -o wide -n kube-systemkubectl get pods nginx-deployment-574b87c764-xppmx -o wide -n default# 当然, 如果只是删除单个ns下面的一些pods, 我会选择下面的方法, 但是它操作多个ns就很不方便了.kubectl -n default get pods | grep completed | awk '{print $1}' | xargs kubectl -n default delete pods 3、统计具体某台机器上运行的所有pod kubectl可以使用两种选择器, 一种是label, 一种是field, 可以看官网的介绍:
labels and selectors
field selectors
# 它是一种选择器, 可以与上面的awk或者xargs配合使用.# 我个人平时都不喜欢用这个, 直接get全部pods, 然后grep查找感觉更快kubectl get pods --all-namespaces -o wide --field-selector spec.nodename=pve-node1 4、统计 pod 在不同机器的具体数量分布   不知道有读者看过我的这篇文章: 基于kubernetes的paas平台中细力度控制pods方案的实现。https://corvo.myseu.cn/2021/04/30/2021-04-30-基于kubernetes的paas平台中细力度控制pod/
均衡分布的工作前提是得知pod在各个机器的分布情况。最好的办法就是我们得到pod信息之后进行简单的统计,这个工作可以使用awk实现。
kubectl -n default get pods -o wide -l app=nginx | awk '{print $7}'| awk '{ count[$0]++ } end { printf(%-35s: %s,word,count); for(ind in count){ printf(%-35s: %d,ind,count[ind]); } }'# 执行结果如下word : countnode : 1pve-node1 : 1pve-node2 : 1 5、kubectl proxy的使用 你可以理解为这个命令为 k8s 的 apiserver 做了一层代理,使用该代理,你可以直接调用 api 而不需要经过鉴权。启动之后,甚至可以实现 kubectl 套娃,下面是一个例子:
# 当你没有设置kubeconfig而直接调用kubectl时kubectl get ns -v=9# 可以打印出下面类似的错误curl -k -v -xget -h accept: application/json, */* -h user-agent: kubectl/v1.21.3 (linux/amd64) kubernetes/ca643a4 'http://localhost:8080/api?timeout=32s'skipped caching discovery info due to get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1 connect: connection refused # 也就是说当你不指定kubeconfig文件时, kubectl会默认访问本机的8080端口# 那么我们先启动一个kubectl proxy, 然后指定监听8080, 再使用kubectl直接访问, 是不是就可行了呢, # 事实证明, 安全与预想一致.kubeconfig=~/.kube/config-symv3 kubectl proxy -p 8080kubectl get nsname status agedefault active 127d 默认启动的 proxy 是屏蔽了某些 api 的,并且有一些限制,例如无法使用 exec 进入 pod 之中可以使用 kubectl proxy —help 来看,例如


摄像机具备怎样的技术特点
云存储对云视频监控系统有什么好处?
被遗忘的苹果手机iPhone SE,还能有第二代么?
华为以2314件专利授权量位列国内发明第一
移动通信中的智能天线设计介绍
5个冷门且实用的Kubectl使用技巧,99%的人都要知道
CH9434嵌入式Linux与安卓系统驱动移植和使用教程
AB类放大器,AB类放大器是什么意思
Silicon Labs取得ZigBee IP黄金单元认证
华为在业界首实现业务与站点配套智能联动
工业机器人的高精密RV减速器技术迎来新发展
CISSOID、NAC和Advanced Conversion三强联手开发 高功率密度碳化硅(SiC)逆变器
超声波在医疗领域的应用,医用超声设备的市场规模
利用AV功放自测系统实现音响功能
6P14小型电子管功放的制作,6P14 vacuum tube amplifier
利用超声波传感器在ARM9与linux平台中实现移动机器人导航的设计
12位ADC升级移植内部8位ADC-12-Bit ADC U
dfrobot透明保护壳(兼容乐高积木)简介
新兴记忆体如何处理物联网所创造的机会
电机绕组的磁势讲解