目录
前言
kubectl 是针对Kubernetes集群运行命令的命令行界面,对于任何使用 Kubernetes 的软件工程师来说都是一个重要的工具。它提供了大量的命令,每个命令都有自己的一组选项,使其成为管理 Kubernetes 环境和排除故障的强大工具。本文旨在阐明 kubectl 软件工程师在日常操作中使用的一些最有用的命令。
1.检查集群状态
- kubectl cluster-info:提供有关集群及其主要服务的基本信息
- kubectl get nodes:可用于托管应用程序的所有节点
2.使用Pod
Pod 是 Kubernetes 中最小的可部署单元。
- kubectl get pods:列出默认命名空间中的所有Pod
- kubectl describe pod [pod-name]:获取有关特定Pod的详细信息,包括事件和状态
- kubectl logs [pod-name]:显示指定Pod的日志,有助于调试
- kubectl exec -it [pod-name] -- /bin/bash:在指定Pod内打开一个交互式Shell,对于调试和检查很有用
3.使用部署
部署是管理 Pod 的更高级别概念。
- kubectl get deployments:列出默认命名空间中的所有部署
- kubectl describe deployment [deployment-name]:提供有关特定部署的详细信息
- kubectl scale deployment [deployment-name] --replicas=[number-of-replicas]:通过增加或减少副本数量来帮助扩展部署
- kubectl rollout status deployment [deployment-name]:显示部署部署的状态。
4.使用服务
服务是公开在一组 Pod 上运行的应用程序的抽象方式。
- kubectl get services:列出默认命名空间中的所有服务
- kubectl describe service [service-name]:提供有关特定服务的详细信息
- kubectl expose deployment [deployment-name] --type=NodePort --name=[service-name]:将部署公开为服务,使其可以在集群内或从 Internet 进行访问
5.使用 ConMap 和 Secret
ConfigMap和Secrets是 Kubernetes 对象,可让用户将应用程序的配置与代码分开。
- kubectl get configmaps:列出默认命名空间中的所有 ConfigMap
- kubectl get secrets:列出默认命名空间中的所有机密
- kubectl create configmap [configmap-name] --from-file=[path-to-file]:从文件创建一个新的 ConfigMap
- kubectl create secret generic [secret-name] --from-literal=key=value:创建一个新的秘密
6.调试与故障排除
Kubernetes 提供了多个命令来帮助查找和纠正问题
- kubectl top node:显示每个节点的CPU和内存使用情况,这对于识别负载较高的节点很有用
- kubectl top pod:显示每个 Pod 的 CPU 和内存使用情况,这对于识别使用大量资源的 Pod 很有用
- kubectl get events --sort-by=.metadata.creationTimestamp:列出默认命名空间中的所有事件,按创建时间排序。这有助于识别集群中最近可能发生的问题
7.清理
Kubernetes 提供了清理资源的命令
- kubectl delete pod [pod-name]:删除指定的Pod
- kubectl delete deployment [deployment-name]:删除指定的部署
- kubectl delete service [service-name]:删除指定的服务
- kubectl delete all --all:删除默认命名空间中的所有资源
kubectl delete all --all [WARNING]切勿随意使用
8.使用命名空间
命名空间用于许多用户分布在多个团队的环境中。
- kubectl get namespaces:列出集群中的所有命名空间
- kubectl create namespace [namespace-name]:创建一个新的命名空间
- kubectl config set-context --current --namespace=[namespace-name]:更改当前上下文的命名空间
9.管理持久卷
持久卷为 Pod 提供存储数据的方法。
- kubectl get pv:列出所有持久卷
- kubectl describe pv [volume-name]:提供有关特定卷的详细信息
- kubectl get pvc:列出所有持久卷声明,这是用户对存储的请求
10.处理节点
节点是 Kubernetes 中的工作机器,是系统的重要组成部分。
- kubectl cordon [node-name]:将节点标记为不可调度,阻止新的Pod在该节点上调度
- kubectl uncordon [node-name]:删除节点上的不可调度标记,允许新的pod在该节点上调度
- kubectl drain [node-name]:排空节点以准备维护
11.资源配额和限制范围
这些命令对于管理计算资源的消耗非常有用
- kubectl get quota:列出当前命名空间下所有资源配额
- kubectl describe limitrange [limit-range-name]:提供有关特定限制范围的详细信息
12.访问API对象
这些命令允许您访问原始 API 对象
- kubectl api-resources:列出服务器上所有可用的API资源
- kubectl explain [resource]:提供资源的文档
13.总结
命令 | 含义 | 命令分类 |
---|---|---|
kubectl cluster-info | 提供有关集群及其主要服务的基本信息 | 检查集群状态 |
kubectl get nodes | 可用于托管应用程序的所有节点 | |
kubectl get pods | 列出默认命名空间中的所有Pod | 使用Pod |
kubectl describe pod [pod-name] | 获取有关特定Pod的详细信息,包括事件和状态 | |
kubectl logs [pod-name] | 显示指定Pod的日志,有助于调试 | |
kubectl exec -it [pod-name] -- /bin/bash | 在指定Pod内打开一个交互式Shell,对于调试和检查很有用 | |
kubectl get deployments | 列出默认命名空间中的所有部署 | 使用部署 |
kubectl describe deployment [deployment-name] | 提供有关特定部署的详细信息 | |
kubectl scale deployment [deployment-name] --replicas=[number-of-replicas] | 通过增加或减少副本数量来帮助扩展部署 | |
kubectl rollout status deployment [deployment-name] | 显示部署部署的状态 | |
kubectl get services | 列出默认命名空间中的所有服务 | 使用服务 |
kubectl describe service [service-name] | 提供有关特定服务的详细信息 | |
kubectl expose deployment [deployment-name] --type=NodePort --name=[service-name] | 将部署公开为服务,使其可以在集群内或从 Internet 进行访问 | |
kubectl get configmaps | 列出默认命名空间中的所有 ConfigMap | 使用 ConMap 和 Secret |
kubectl get secrets | 列出默认命名空间中的所有机密 | |
kubectl create configmap [configmap-name] --from-file=[path-to-file] | 从文件创建一个新的 ConfigMap | |
kubectl create secret generic [secret-name] --from-literal=key=value | 创建一个新的秘密 | |
kubectl top node | 显示每个节点的CPU和内存使用情况,这对于识别负载较高的节点很有用 | 调试与故障排除 |
kubectl top pod | 显示每个 Pod 的 CPU 和内存使用情况,这对于识别使用大量资源的 Pod 很有用 | |
kubectl get events --sort-by=.metadata.creationTimestamp | 列出默认命名空间中的所有事件,按创建时间排序。这有助于识别集群中最近可能发生的问题 | |
kubectl delete pod [pod-name] | 删除指定的Pod | 清理 |
kubectl delete deployment [deployment-name] | 删除指定的部署 | |
kubectl delete service [service-name] | 删除指定的服务 | |
kubectl delete all --all | 删除默认命名空间中的所有资源 | |
kubectl get namespaces | 列出集群中的所有命名空间 | 使用命名空间 |
kubectl create namespace [namespace-name] | 创建一个新的命名空间 | |
kubectl config set-context --current --namespace=[namespace-name] | 更改当前上下文的命名空间 | |
kubectl get pv | 列出所有持久卷 | 管理持久卷 |
kubectl describe pv [volume-name] | 提供有关特定卷的详细信息 | |
kubectl get pvc | 列出所有持久卷声明,这是用户对存储的请求 | |
kubectl cordon [node-name] | 将节点标记为不可调度,阻止新的Pod在该节点上调度 | 处理节点 |
kubectl uncordon [node-name] | 删除节点上的不可调度标记,允许新的pod在该节点上调度 | |
kubectl drain [node-name] | 排空节点以准备维护 | |
kubectl get quota | 列出当前命名空间下所有资源配额 | 资源配额和限制范围 |
kubectl describe limitrange [limit-range-name] | 提供有关特定限制范围的详细信息 | |
kubectl api-resources | 列出服务器上所有可用的API资源 | 访问API对象 |
kubectl explain [resource] | 提供资源的文档 |