首页 > 其他分享 >30-Kubectl 命令行工具使用秘笈

30-Kubectl 命令行工具使用秘笈

时间:2024-01-11 13:55:35浏览次数:31  
标签:Kubectl 秘笈 kubectl 30 yaml 命令 get pod 资源

在本课程的最后一讲,我来为你介绍一些 kubectl 使用过程中的小技巧。kubectl 是我们日常操纵整个 Kubernetes 的利器,操作方便,功能强大。接下来,我会向你介绍常用的七个功能。

自动补全

我们可以通过如下命令进行命令行的自动补全,方便我们使用。

  • 如果你使用的是 bash,可以通过如下命令:

source <(kubectl completion bash) #你需要先安装 bash-completion
echo "source <(kubectl completion bash)" >> ~/.bashrc #这样就不需要每次都 source 一下了
  • 如果你使用的是 zsh,也有可用的命令:

source <(kubectl completion zsh)
echo "[[ $commands[kubectl] ]] && source <(kubectl completion zsh)" >> ~/.zshrc #这样就不需要每次都 source 一下了

命令行帮助

遇到任何关于命令行使用的问题,都可以通过“kubectl -h”命令来查看有哪些子命令、包含哪些参数、使用例子等等。

这条命令也是我使用比较多的,可以帮助你更快地熟悉和了解 kubectl 的使用。

集群管理

我们可以通过“kubectl cluster-info”命令查看整个集群信息,比如 apiserver 暴露的地址、dns 的地址、metrics-server 的地址。

还可以通过“kubectl version”命令查看到 kubectl 以及 apiserver 的版本。毕竟 apiserver 的版本对整个集群至关重要,决定了各个 api 的版本、feature gate、准入控制等等,

而各个 kubelet 节点的版本,你可以通过“kubectl get node”命令查看。

你可以通过这些版本号了解到整个集群的版本信息,对集群的维护和升级很有帮助。

资源查询

通过 kubectl 命令来查询集群中的资源是我们日常使用频率最高的。

你可以通过 kubectl get 查询到某类资源对象,代码如下:

kubectl get [资源]

假如我们想要查看集群中的所有节点,可以在代码的“资源”处输入“nodes”,如下所示:

kubectl get nodes

这里的资源名,我们可以使用资源名称的单数,比如 node;也可以使用其复数,比如 nodes;还可以使用其缩写名。

对于集群中定义的资源信息,比如资源名、对应的缩写、是否是 namespace 级别的资源,你可以通过“kubectl api-resources”命令获取。

如果我们想要查询某个资源对象,我们同样可以通过“kubectl get”命令,只不过要在原先的资源名后面加上“/对象名”。如下所示:

kubectl get [资源]/[对象名]

还是以 node 为例,我想查询 node01 节点,就可以通过“kubectl get node/node01”命令完成。当然,不使用“/”也是允许的,代码如下所示:

kubectl get [资源] [对象名]

如果你想看到关于这个对象更详细的信息,你可以“kubectl describe”一下,即:

kubectl describe [资源]/[对象名]

对于 namesppace 级别的资源,我们只需要在上述命令后面加上“-n [命名空间]”或“--namespace [命名空间]”就可以了。代码如下所示:

kubectl get [资源]/[对象名] -n [命名空间]

比如:

kubectl get pod pod-example -n demo

如果你没有指定 namespace 的话,默认是名为 default 的命名空间。

此外,如果你想要查看所有命名空间下的某类资源,可以在“资源”后面加上“--all-namespaces”。代码如下:

kubectl get [资源] --all-namespaces

比如:

kubectl get pod --all-namespaces

资源创建、更改、删除

你还可以通过 kubectl create 进行资源创建,代码如下:

kubectl create -f demo.yaml

通过在 yaml 文件中定义各种资源及对象,我们通过这条命令将其在集群中创建出来。

当然,kubectl create 还提供了一些子命令,方便通过命令行直接创建资源对象。你可以通过“kubectl create -h”查看其支持的子命令。

假如我们想要在命名空间 demo 下创建一个名为 sa-demo 的 ServiceAccount 对象,我们可以通过如下命令进行:

kubectl create sa sa-demo -n demo

通常来说,从零开始写一个 yaml 文件很难,一般我们都是找一些资源的 yaml 例子拿来自己修改下。我并不推荐自己一点点去写 yaml,效率低下,而且还会出现缩进的问题。

我推荐通过 kubectl create 的这些命令来解决。通过命令行参数,我们可以让 kubectl 帮我们自动生成一些 yaml 文件,比如你可以通过下面的命令拿到了一个 deployment 的 yaml 文件,然后就可以对这个文件进一步地修改以达到你的期望定义。

kubectl create deploy my-deployment -n demo --image busybox --dry-run server -o yaml > my-deployment.yaml

这儿主要是用到了 dry-run 的能力。

你还可以通过 kubectl edit 直接修改这些资源:

kubectl edit [资源]/[对象名] -n [命名空间]

如果是集群级别的资源对象,那么代码中就不用加“-n”了。

或者你也可以通过修改 yaml 文件,然后 apply 到集群中:

kubectl apply -f demo.yaml

当然,这条命令还能被用来创建对象,如果对象已经存在就会对它进行更新。

对于资源对象的删除,可以直接通过 kubectl delete 进行:

kubectl delete [资源]/[对象名] [-n [命名空间]]

比如:

kubectl delete pod/pod-demo -n demo

如果你是通过 yaml 文件创建的某些资源对象,比如 flannel;yaml 文件中包含了很多对象,一个个删除太麻烦,也容易遗漏,你就可以通过如下命令删除:

kubectl delete -f flannel.yaml

日志

如果 pod 内只有一个容器,你可以通过“kubectl logs [pod 名] -n [命名空间]”命令查看该容器的日志。

如果有多个容器,就需要在“pod 名”后插入“-c [容器名]”,如下所示:

kubectl logs [pod 名] -c [容器名] -n [命名空间]

你还可以通过“-f”参数来实时查看容器最新的日志。更多参数,就需要你自己来探索了。

快速创建一个 Pod

我们可以通过如下命令快速创建一个 Pod,在我们做环境 debug 的时候非常方便:

kubectl run [pod 名] -n [命名空间] --image [镜像] [.....]

比如:

kubectl run pod1 -n debug-pod --image network-debug -- bash

其他参数,你可以通过 “kubectl run -h” 查看;也可以直接 exec 到容器里查看,代码如下:

kubectl exec -it [pod 名] -n [命名空间] bash

同样,如果有多个容器的话,需要知道一个容器名:

kubectl exec -it [pod 名] -c [容器名] -n [命名空间] bash

写在最后

kubectl 支持 JSONPath 模版,在官方文档中有详细的说明和例子,这里就不再重复了。

kubectl 能力非常强大,随着你不断地使用,你会发现更多 kubectl 中的小技巧,也会慢慢积累一些自己的使用技巧。以上我只是列举了一些常用的命令操作,你可以点击链接查看官方的 kubectl 小抄来学习。

本文中的例子,只使用到了部分参数,你可以通过 “-h”来查看其具体支持的各个参数。

如果你对本节课有什么想法或者疑问,欢迎在留言区留言,我们一起讨论。


标签:Kubectl,秘笈,kubectl,30,yaml,命令,get,pod,资源
From: https://www.cnblogs.com/huangjiale/p/17958436

相关文章

  • 32Bit、基于ARM CPU的STM32F100C6T6BTR、STM32G030F6P6TR微控制器(MCU)
    1、STM32F1系列主流MCU:STM32F100C6T6BTR ICMCU32BIT32KBFLASH48LQFPSTM32F1系列主流MCU满足了工业、医疗和消费类市场的各种应用需求。该系列在集成一流的外设和低功耗、低电压运行等基础上实现了高性能,同时还以可接受的价格实现了高集成度,并具有简单的架构和简便易用的工具......
  • P1307题解
    思路1.定义及输入原数/反转后的数intn,cnt=0;//反转后的数一定要归零!cin>>n;2.用while循环反转while(n!=0){//只要n还没有被分解完,就继续分解cnt=cnt*10+n%10;//cnt每次*10再加上分离出的数位(*10为了防0)n/=10;//n减一位}3.输出cout<<cnt;至此,这道题就做完......
  • 西门子S7-1200与S7-300PLC之间的区别有哪些?
    S7-1200作为新推出的紧凑型控制器,其产品定位在原有的SIMATICS7-200和S7-300之间,它与S7-300的区别主要体现在硬件、通信、工程、存储器、功能块、计数器、定时器、工艺功能等方面。一、硬件的区别在硬件扩展方面,S7-300的主机架多支持八个扩展模块,而S7-1200支持扩展多八个信号模块和......
  • NX2306 建模- 实体表面印字(平面,圆柱面,曲面表面的阴阳文)
    【写在每个笔记前面:个人学习记录,如有错误,烦请指正,不胜感激。】 1、平面印字step1、【插入】→【曲线】→【文本】,按照图右,进行相关定义   step2、【拉伸】,选择对应的文字为曲线阴文:向下减去对应厚度即可;    阳文:向上拉伸合并即可  2、圆柱面印字方法一:上......
  • MSB30M-ASEMI小贴片整流桥MSB30M
    编辑:llMSB30M-ASEMI小贴片整流桥MSB30M型号:MSB30M品牌:ASEMI封装:UMSB-4最大平均正向电流:3A最大重复峰值反向电压:1000V产品引线数量:4产品内部芯片个数:4产品内部芯片尺寸:50MIL峰值正向漏电流:<10ua恢复时间:>2000ns浪涌电流:50A芯片材质:光阻GPP最大正向电压:1.90V工作结温:-55℃~150℃包装方......
  • 世微AP3464同步降压恒压IC 4-30V2.4A输出车充专用驱动芯片
    AP3464是一款支持宽电压输入的同步降压电源管理芯片,输入电压4-30V范围内可实现2.4A的连续电流输出。通过调节FB端口的分压电阻,设定输出1.8V到28V的稳定电压。AP3464具有的恒压/恒流(CC/CV)特性。AP3464采用电流模式的环路控制原理,实现了快速的动态响应。A......
  • 雅意2.0:打造专为中文优化的300亿参数多语言模型
    前言雅意2.0,作为一款专注于中文语境的开源大型语言模型,其在多语言处理方面的能力尤为突出。该模型不仅具有300亿参数规模的庞大体量,还在多个关键领域取得了显著的技术突破。Huggingface模型下载:https://huggingface.co/wenge-research/AI快站模型免费加速下载:https://aifasthub.com......
  • 2023-2024-1 20231305 《计算机基础与程序设计》课程总结
    第1周作业https://www.cnblogs.com/zhen-meng/p/17740268.html第2周作业https://www.cnblogs.com/zhen-meng/p/17750180.html第3周作业https://www.cnblogs.com/zhen-meng/p/17765972.html第4周作业https://www.cnblogs.com/zhen-meng/p/17781309.html第5周作业https://www.cn......
  • D13005M-ASEMI高频电源开关D13005M
    编辑:llD13005M-ASEMI高频电源开关D13005M型号:D13005M品牌:ASEMI集电极电流:4A集电极电压:700V集电极-发射极电压:450V发射极-基极电压:12V集电极电流(脉冲):8A芯片个数:1封装:TO-220F工作温度:-50°C~150°C引脚数量:3集电极损耗:70W类型:插件塑封二极管、高压、高速D13005M描述:D13005M拥有广泛的......
  • 2023-2024-1 20231307 《计算机基础与程序设计》第七周学习总结
    作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第七周作业这个作业的目标数组与链表、基于数组和基于链表实现数据结构、无序表与有序表、树、图、子程序与参数作业正文https://www.cnblogs.c......