Kubectl 是 Kubernetes 中的命令行实用程序,用于对 Kubernetes 集群运行命令。您可以使用它来执行各种任务,包括部署应用程序/微服务、查看和管理资源、检查日志文件等等。
在本教程中,我们将介绍用于管理 Kubernetes (K8S) 集群的常用 kubectl 命令。
我们在 Ubuntu 22.04 上使用 Minikube 作为我们的本地 Kubernetes 集群。
创建 Kubernetes 对象/资源
在 Kubernetes 中,对象是持久性实体,可确保集群达到所需状态。它们是集群中工作负载的构建基块。对象包括副本集、部署、Pod、守护程序集、服务、命名空间、配置映射和密钥,以及持久卷等。
创建对象的最常见方法是使用 YAML 清单文件,通常带有.yaml
or .yml
文件扩展名。
要从 YAML 清单文件创建对象,请运行:
$ kubectl apply -f ./file1.yaml
若要从多个 YAML 文件创建资源,请运行:
$ kubectl apply -f ./file1.yaml -f ./file2.yaml
若要从目录中的所有清单文件创建资源,请运行:
$ kubectl apply -f ./dir
要从 URL 创建资源,请执行:
$ kubectl apply -f https://sample-url.io
Kubernetes 集群中的节点
节点是运行支持工作负载的 Pod 和其他资源的物理机或虚拟机。每个节点都由一个称为控制窗格的主节点管理,该节点包含运行 Pod 所需的多个服务。一个集群通常有多个节点。
若要获取群集上的节点数,请运行:
$ kubectl get nodes
要让 Pod 在节点上运行,请执行:
$ kubectl get pods -o wide | grep <node_name>
若要将节点标记为“不可调度”,请运行。
$ kubectl cordon minikube
node/minikube cordoned
要将节点标记为可调度,请运行。
$ kubectl uncordon minikube
node/minikube uncordoned
要显示 RAM 和 CPU 运行等资源使用率指标,请执行以下操作:
$ kubectl top node <node_name>
若要删除一个或多个节点,请运行以下命令:
$ kubectl delete node <node_name>
集群管理和上下文
Kubernetes 集群是一组运行容器化应用程序的节点或服务器。一个节点可以运行一个或多个 Pod,其中包含一个或多个正在运行的容器。
列出有关主节点的信息。
$ kubectl cluster-info
检查 kubectl 版本。
$ kubectl version --short
显示 Kubernetes 集群配置。
$ kubectl config view
显示上下文。
$ kubectl config get-contexts
列出可用的 API 资源。
$ kubectl api-resources
列出可用的 API 版本。
$ kubectl api-versions
Kubernetes Pod
在 Kubernetes 中,Pod 是您可以在集群中创建和管理的最小可部署单元。容器包含一组容器,其中包含共享卷和网络资源,以及有关如何运行应用程序的说明。
豆荚是短暂的和一次性的,这意味着它们是短暂的,因此不会持续很长时间。因此,部署 Pod 的最佳方法是使用 YAML 文件的声明性配置。
由于可以重复使用,因此更具可重复性和便利性。此外,它还确保 YAML 文件中定义的资源受到 Kubernetes 的持续监控并按指定运行。
列出/删除 Pod
要获取集群中正在运行的 Pod 的列表,请运行以下命令:
$ kubectl get pods
要在窗格标签旁边显示窗格,请运行:
$ kubectl get pods --show-labels
要列出所有命名空间中的所有 Pod,请运行:
$ kubectl get pods --all-namespaces
要列出当前命名空间中的 Pod 并提供更多详细信息,请附加 wide 参数。-o
$ kubectl get pods -o wide
要显示特定容器的详细状态,请运行:
$ kubectl describe pod <pod-name>
要向 Pod 添加标签,请运行以下命令:
$ kubectl label pods my-pod new-label=awesome
要删除标签,请执行:
$ kubectl label pods my-pod new-label-
要获取具有容器 pod 的交互式 shell,请运行以下命令:
$ kubectl exec -it <pod_name> /bin/sh
要删除特定容器,请运行以下命令:
$ kubectl delete pod <pod name>
群集中的 ReplicaSet
ReplicaSet (RS) 确保在任何给定时间始终有稳定数量的正在运行的 Pod。它保证了 YAML 清单文件中定义的特定数量的 Pod 的可用性。
若要获取集群中的 ReplicaSet 数,请运行以下命令:
$ kubectl get replicasets
若要获取有关特定副本集的详细信息,请运行以下命令:
$ kubectl describe replicasets <replicasetname>
Pod 中的服务
服务是对 Pod 的网络抽象。服务提供 Pod 之间的发现和路由。例如,服务可以将应用程序的前端连接到其后端,每个后端都在单独的部署中运行。
若要列出服务,请运行:
$ kubectl get services
若要获取有关服务的更多详细信息,请运行以下命令:
$ kubectl describe services
Pod 中的服务帐户
服务账号是集群中 Pod 用于访问 Kubernetes API 服务器的对象。
若要列出服务帐户,请运行:
$ kubectl get serviceaccounts
若要获取有关服务帐户的更多详细信息,请执行:
$ kubectl describe serviceaccounts
若要删除服务帐户,请使用以下语法。
$ kubectl delete serviceaccounts <serviceaccount>
命名空间
命名空间是提供一种方法的单元,通过该方法,单个集群可以进一步细分为多个子集群,然后可以单独管理这些子集群。
要列出命名空间,请运行:
$ kubectl get namespaces
若要显示有关命名空间的详细信息,请使用以下语法:
$ kubectl describe namespace <namespace_name>
若要创建命名空间,请运行以下命令:
$ kubectl create namespace <namespace_name>
若要编辑或修改命名空间,请运行以下命令:
$ kubectl edit namespace <namespace_name>
要显示命名空间的资源使用情况,请运行:
$ kubectl top namespace <namespace_name>
若要删除命名空间,请运行以下命令:
$ kubectl delete namespace <namespace_name>
Kubernetes 机密
在 Kubernetes 中,机密是一个保存敏感和机密信息(如用户名和密码)的对象。
若要列出现有机密,请运行以下命令:
$ kubectl get secret
要列出有关现有密钥的详细信息,请执行:
$ kubectl describe secrets
若要创建密钥,请运行
$ kubectl create secret [flags] [options]
若要删除机密,请运行:
$ kubectl delete secret <secret_name>
Kubernetes 部署
部署是一个对象,可用于声明应用程序的所需状态。您可以定义副本数、Pod 的映像、Pod 数和其他资源。
若要获取部署数,请运行以下命令:
$ kubectl get deployment
列出特定部署的详细状态。
$ kubectl describe deployment <deployment-name>
若要删除部署,请运行以下命令:
$ kubectl delete deployment <deployment-name>
若要创建新部署,请执行以下命令:
$ kubectl create deployment <deployment-name>
Kubernetes 事件
在 Kubernetes 中,事件是响应资源(如 Pod、容器或节点)状态的变化而生成的对象。一个很好的例子是将 Pod 的状态从“待处理”更改为“正在运行”,或从“成功”更改为“失败”。
若要列出所有事件,请运行:
$ kubectl get events
要列出事件但排除 Pod 事件,请运行以下命令:
$ kubectl get events --field-selector involvedObject.kind!=Pod
要将事件与时间戳一起列出并按创建时间排序,请运行:
$ kubectl get events --sort-by=.metadata.creationTimestamp
Kubernetes 日志
日志对于记录群集事件以及帮助调试和排除故障至关重要。您可以使用以下命令查看或配置日志详细程度:
要打印特定容器运行的日志,请执行以下操作:
$ kubectl logs <pod_name>
要打印并跟踪特定 Pod 执行的实时日志,请执行以下操作:
$ kubectl logs -f <pod_name>
要打印 Pod 过去 X 小时(比如 3 小时)的日志,请运行:
$ kubectl logs --since=3h <pod_name>
要打印 Pod 中特定容器的日志,请运行
$ kubectl logs -c <container_name> <pod_name>
生成最近的 20 行日志
$ kubectl logs --tail=20 <pod_name>
生成 Pod 的日志,并将日志保存在名为 pod.log 的日志文件中
$ kubectl logs <pod_name> pod.log