以下多数技巧均使用 kubectl——一款能对 Kubernetes 集群执行命令的强大命令行工具。
若需了解 Kubernetes 背景知识后再深入技巧学习,请参考以下资源:
您可以通过命名空间(例如 Dev1、Dev2、QA1、QA2 等)将 Kubernetes 集群划分为多个环境,每个环境可由不同用户管理。编写 kubectl 命令的不便之处在于,每次都需要 在末尾添加 --namespace
选项。用户常会遗漏此步骤,导致在错误命名空间中创建对象(pod、服务、部署)。
通过此技巧,您可以在运行 kubectl 命令前预设命名空间偏好。执行 kubectl 命令前运行以下命令,它将为当前上下文的后续所有 kubectl 操作保存命名空间设置:
kubectl config set-context $(kubectl config current-context) --namespace=mynamespace
以下列出与命名空间相关的最常用的实用命令:
Kubernetes 命令通常较为冗长,因此为 kubectl 设置别名会非常实用。您无需再反复输入完整命令,这在需要单次会话中执行多条 Kubernetes 命令时能极大提升效率。
下文列举了常用命令的别名设置。在执行 kubectl 命令前运行这些别名可节省时间。 示例:您只需输入 K 而无需输入 kubectl:
虽然存在多种 YAML 文件编辑器,但在终端操作时往往需要快速调优已生成的 YAML 文件。此时使用经典的 vi 编辑器(最初为 Unix 系统开发的文本编辑器)是理想选择。
vi 编辑器不仅拥有完善的文档支持,还获得活跃的开源社区贡献。然而在创建 YAML 文件时,vi 编辑器存在空格处理问题。我们需要一种实现用制表符缩进、用空格对齐的功能。在 YAML 编写过程中,使用制表符与空格的混用总会引发语法问题(例如敲击回车时默认生成 2 空格 YAML 格式)。
那么有何解决方案呢?在使用 vi 编辑器创建 YAML 文件前,创建包含以下配置行的 ~/.vimrc 文件以使编辑更便捷:
我们可以通过 kubectl 命令行工具创建复杂的 YAML 文件。
大多数开发人员认为直接编写 YAML 文件颇为耗时,且 Kubernetes 的 YAML 文件往往冗长且难以手动编写。相比从空白编辑器开始创建,通过 kubectl 命令生成 YAML 文件会轻松许多。
下列命令将创建名为 yamlfile 的 YAML 文件 。通过 kubectl 命令生成 YAML 后,您可根据需求进行修改,无需从零开始编写:
kubectl run busybox --image=busybox --dry-run=client -o yaml -- restart=Never > yamlfile.yaml
kubectl create job my-job --dry-run=client -o yaml --image=busybox -- date>yamlfile.yaml
kubectl get -o yaml deploy/nginx > 1.yaml(确保您 拥有一个名为 nginx 的部署)
kubectl run busybox --image=busybox --dry-run=client -o yaml --restart=Never -- /bin/sh -c "while true; do echo hello; echo hello again;done" > yamlfile.yaml
kubectl run wordpress --image=wordpress –-expose –-port=8989 - -restart=Never -o yaml
kubectl run test --image=busybox --restart=Never --dry - run=client -o yaml -- bin/sh -c 'echo test;sleep 100' > yamlfile.yaml(请注意 --bin 参数位于末尾。此命令将生成 yaml 文件。)
(请注意 --bin 参数位于末尾。此命令将生成 yaml 文件。)
另一种生成 YAML 文件的有效方法是使用 wget 命令直接从互联网获取文件。
在技巧 1 中,我们学习了使用 Kubernetes 命名空间的相关命令并保存设置,从而避免每次手动添加参数。现在我们将扩展该技巧,简化命名空间与 kubectl 上下文之间的切换操作。
现有多种工具可辅助此操作,我们推荐分别使用 kubectx 和 kubens 来管理上下文与命名空间。 您可以在 此处查看 kubectx 与 kubens 的详细说明。
以下载 kubectx 和 kubens 工具的 Linux 二进制文件为例:
wget https://github.com/ahmetb/kubectx/releases/download/v0.9.0/kubectx_v0.9.0_linux_x86_64.tar.gz
wget https://github.com/ahmetb/kubectx/releases/download/v0.9.0/kubens_v0.9.0_linux_x86_64.tar.gz
通过以下命令解压:
tar -xvf kubectx_v0.9.0_linux_x86_64.tar.gz
tar -xvf kubens_v0.9.0_linux_x86_64.tar.gz
最后将它们移动到 PATH 中:
安装完成后,只需使用 kubens 即可列出命名空间并在其间切换:
当操作多个集群时,kubectx 能让上下文切换变得轻松自如:
您是否了解 kubectl 为 BASH 和 ZSH 提供了自动补全功能?这是一项可选配置。
假设您已理解 Kubernetes 概念并具备 kubectl 使用经验,但可能不擅长记忆命令。首先安装 bash-completion,随后启用 kubectl 自动补全功能。您可以在“安装和设置 kubectl”文档页面找到适用于您环境的具体配置说明。
以下是启用自动补全功能的配置选项:
现在,尽情使用 Tab 键吧!
top 命令或许是监控进程与系统资源最常用的工具之一。它提供基于字符的简易界面,可快速获取关键信息。
查看各节点资源利用率:
查看各 Pod 资源利用率:
实用的 watch 命令能按指定间隔刷新显示,无需反复手动执行。以下示例设定每 5 秒运行一次(默认间隔为 2 秒):
watch kubectl top node -n 5
注意: watch 命令需根据您的环境另行下载。
您的 Kubernetes 集群需要运行 heapster 服务才能使 top 命令正常工作,否则将出现以下错误: “Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)”
kubectl 命令提供的是 apiserver 所存储资源的汇总视图。apiserver 实际存储的字段远多于显示内容。您可以通过 kubectl get 命令获取原始资源输出,从而创建自定义可视化界面与命令。
使用以下命令以 JSON 格式输出原始资源:
kubectl get deployments -o json
您也可以直接通过 API 调用访问资源:
kubectl get --raw=/apis/apps/v1/deployments
甚至可以将输出与 jq 等工具结合,实现多样化可视化呈现、输出过滤或将数据传递至其他工具进行高级自动化处理。
例 如,在包含多命名空间与多部署的集群中排查问题可能较为困难,但以下示例使用原始 API 扫描集群内所有部署,并筛选出仅含故障副本的部署:
kubectl get --raw=/apis/apps/v1/deployments | jq '.items[]
| {name: .metadata.name, replicas: .status.replicas, available:
(.status.availableReplicas // 0), unavailable:
(.status.unavailableReplicas // 0)} | select (.unavailable > 0)'
对上述命令的简要说明:
kubectl get --raw=/apis/apps/v1/deployments | jq .
kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] |
{name: .metadata.name, replicas: .status.replicas, available:
(.status.availableReplicas // 0), unavailable:
(.status.unavailableReplicas // 0)}'
kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] |
{name: .metadata.name, replicas: .status.replicas, available:
(.status.availableReplicas // 0), unavailable:
(.status.unavailableReplicas // 0)} | select (.unavailable > 0)'
希望这些技巧和窍门能助您提升 Kubernetes 使用效率。若您有钟爱的技巧或原创心得,欢迎与我们分享。
请记得体验 IBM Cloud Kubernetes Service ,将所学技巧投入实践。
想要获得免费 Kubernetes 实操经验?欢迎使用 IBM CloudLab——这款全新交互平台提供 Kubernetes 认证教程 ,无需任何成本与配置。
Red Hat OpenShift on IBM Cloud 是一个完全托管的 OpenShift 容器平台 (OCP)。
容器解决方案能够运行和扩展容器化工作负载,并实现安全性、开源创新和快速部署。
利用 IBM 的云咨询服务发掘新功能并提升业务敏捷性。了解如何通过混合云战略和专家合作共同制定解决方案、加快数字化转型并优化性能。