Kubernetes 系列:kubectl 常用命令(五)

技术 · 2023-06-27

KubectlKubernetes 的命令行配置工具,可与 Kubernetes API server通信。使用 Kubectl 可以创建、检查、更新和删除 Kubernetes 对象。这里列举一些对PodService等对象常用的命令。

集群管理

  • 显示集群中 master服务 的端点信息

    kubectl cluster-info
    kubectl cluster-info dump --namespaces <namespace_name> --output-directory=<dir>
  • 显示客户端和服务器上运行的 Kubernetes 版本

    kubectl version
  • 获取集群的配置

    kubectl config view
  • 列出可用的 API 资源

    kubectl api-versions
  • 列出所有内容

    kubectl get all --all-namespaces

Deployment

deployment 可以简写成 deploy
  • 列出一个或多个Deployment

    kubectl get deployment -n <namespace_name>
  • 显示一个或多个Deployment的详细信息

    kubectl describe deployment <deployment_name> -n <namespace_name>
  • 编辑和更新一个或多个Deployment的定义

    kubectl edit deployment <deployment_name> -n <namespace_name>
  • 创建一个新Deployment

    kubectl create deployment <deployment_name> -n <namespace_name>
  • 删除Deployment

    kubectl delete deployment <deployment_name> -n <namespace_name>
  • 查看Deployment的状态

    kubectl rollout status deployment <deployment_name> -n <namespace_name>

Events

events 可以简写成 ev
  • 列出系统中所有资源的最近事件

    kubectl get events -n <namespace_name>
  • 仅列出警告

    kubectl get events --field-selector type=Warning -n <namespace_name>
  • 列出事件但排除 Pod 事件

    kubectl get events --field-selector involvedObject.kind!=Pod -n <namespace_name>
  • 具有特定名称的单个节点的拉取事件

    kubectl get events --field-selector involvedObject.kind=Node, involvedObject.name=<node_name>
  • 从事件列表中过滤掉正常事件

    kubectl get events --field-selector type!=Normal -n <namespace_name>

日志

  • 打印 pod 的日志

    kubectl logs <pod_name> -n <namespace_name>
  • 打印 pod 最后一小时的日志

    kubectl logs --since=1h <pod_name> -n <namespace_name>
  • 获取最近20行日志

    kubectl logs --tail=20 <pod_name> -n <namespace_name>
  • 从服务获取日志并可选择选择哪个容器

    kubectl logs -f <service_name> [-c <$container>] -n <namespace_name>
  • 打印 Pod 的日志并跟踪新日志

    kubectl logs -f <pod_name> -n <namespace_name>
  • 打印 Pod 中容器的日志

    kubectl logs -c <container_name> <pod_name> -n <namespace_name>
  • 将 pod 的日志输出到名为“pod.log”的文件中

    kubectl logs <pod_name> pod.log -n <namespace_name>
  • 查看之前失败的 pod 的日志

    kubectl logs --previous <pod_name> -n <namespace_name>

对象配置文件

修改对象的另一个选项是通过配置yaml文件,强烈推荐使用这种方法。

  • 通过文件名或标准输入将配置应用于对象,覆盖现有配置。

    kubectl apply -f manifest_file.yaml
  • 创建对象

    kubectl create -f manifest_file.yaml
  • 在目录中的所有文件中创建对象

    kubectl create -f ./dir
  • 从 URL 创建对象

    kubectl create -f <url>
  • 删除对象

    kubectl delete -f manifest_file.yaml

Namespace

namespace 可以简写成 ns
  • 创建命名空间

    kubectl create namespace <namespace_name>
  • 列出一个或多个命名空间

    kubectl get namespace <namespace_name>
  • 显示一个或多个命名空间的详细状态

    kubectl describe namespace <namespace_name>
  • 删除命名空间

    kubectl delete namespace <namespace_name>
  • 编辑和更新命名空间的定义

    kubectl edit namespace <namespace_name>

Nodes

node 可以简写成 no
  • 更新一个或多个节点上的污点

    kubectl taint node <node_name>
  • 列出一个或多个节点

    kubectl get node -n <namespace_name>
  • 删除一个或多个节点

    kubectl delete node <node_name> -n <namespace_name>
  • 显示节点的资源使用情况(CPU/内存/存储)

    kubectl top node -n <namespace_name>
  • 每个节点的资源分配

    kubectl describe nodes | grep Allocated -A 5
  • 节点上运行的 Pod

    kubectl get pods -o wide | grep <node_name>
  • 更新一个或多个节点的Annotations信息

    kubectl annotate node <node_name> -n <namespace_name>
  • 将节点标记为不可调度

    kubectl cordon node <node_name> -n <namespace_name>
  • 将节点标记为可调度

    kubectl uncordon node <node_name> -n <namespace_name>
  • 排空节点以准备维护

    kubectl drain node <node_name> -n <namespace_name>
  • 添加或更新一个或多个节点的标签

    kubectl label node

Pod

pod 可以简写成 po
  • 列出一个或多个 Pod

    kubectl get pod -n <namespace_name>
  • 删除 Pod

    kubectl delete pod <pod_name> -n <namespace_name>
  • 显示 pod 的详细状态

    kubectl describe pod <pod_name> -n <namespace_name>
  • 创建一个 Pod

    kubectl create pod <pod_name> -n <namespace_name>
  • 对 pod 中的容器执行命令

    kubectl exec <pod_name> -c <container_name> <command>
  • 在单容器 Pod 上获取交互式 shell

    kubectl exec -it <pod_name> /bin/sh
  • 显示 Pod 的资源使用情况(CPU/内存/存储)

    kubectl top pod -n <namespace_name>
  • 添加或更新 pod 的Annotations信息

    kubectl annotate pod <pod_name> <annotation> -n <namespace_name>
  • 添加或更新 Pod 的标签

    kubectl label pod <pod_name> -n <namespace_name>

Replication Controllers

  • 列出Replication Controllers

    kubectl get rc -n <namespace_name>

ReplicaSets

  • 列出ReplicaSet

    kubectl get rs -n <namespace_name>
  • 显示一个或多个ReplicaSet的详细状态

    kubectl describe rs <replicaset_name> -n <namespace_name>
  • 扩展ReplicaSet

    kubectl scale --replicas=[x]  -n <namespace_name>

Secrets

  • 创建一个secret

    kubectl create secret -n <namespace_name>
  • 列出secret

    kubectl get secrets -n <namespace_name>
  • 列出有关secret的详细信息

    kubectl describe secrets -n <namespace_name>
  • 删除secret

    kubectl delete secret <secret_name> -n <namespace_name>

Services

  • 列出一项或多项服务

    kubectl get svc -n <namespace_name>
  • 显示服务的详细状态

    kubectl describe svc -n <namespace_name>
  • replication controller,servicedeploymentpod 公开为新的 Kubernetes 服务

    kubectl expose deployment [deployment_name] -n <namespace_name>
  • 编辑和更新一项或多项服务的定义

    kubectl edit services -n <namespace_name>

Service Accounts

  • 列出服务帐户

    kubectl get sa -n <namespace_name>
  • 显示一个或多个服务帐户的详细状态

    kubectl describe sa -n <namespace_name>
  • 更换服务帐户

    kubectl replace sa -n <namespace_name>
  • 删除服务帐户

    kubectl delete sa <service_account_name> -n <namespace_name>

命令常用选项

在 Kubectl 中,可以使用命令指定可选参数,以下是一些最常见的参数。

  • -o 输出格式。例如,如果想以 ps 输出格式列出所有 pod 并显示更多信息。

    kubectl get pods -o wide
  • -n --namespace 的简写。例如,如果想列出指定命名空间中的所有 Pod,可以执行以下命令:

    kubectl get pods -n <namespace_name>
  • -f 用于创建资源的文件名、目录或 URL。例如,使用名为 pod_demo.yaml 的文件中的数据创建 pod 时。

    kubectl create -f ./pod_demo.yaml

结语

这里列举的一些常用操作对象的命令,还有很多的命令可以通过官方文档去查找。

Kubernetes k8s kubectl
Theme Jasmine by Kent Liao