Kubectl是Kubernetes中的一个命令行实用程序,用于针对Kubernetes集群运行命令。你可以使用它来执行各种任务,包括部署应用程序/微服务、查看和管理资源、检查日志文件等。在本教程中,小编将介绍用于管理Kubernetes ( K8S ) 集群的常用kubectl命令。
另外,小编是在Ubuntu 22.04上使用Minikube作为本地Kubernetes集群,以下整理所有的kubectl命令仅供参考。
创建Kubernetes对象/资源
在Kubernetes中,对象是持久实体,可确保你的集群达到所需状态。它们是集群中工作负载的构建块。对象包括副本集、部署、pod、守护进程集、服务、命名空间、配置映射和机密以及持久卷等。创建对象的最常见方法是使用通常带有.yaml或.yml文件扩展名的YAML清单文件。
要从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
$ 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
$ kubectl api-resources
列出可用的API版本,命令如下:
$ kubectl api-versions
Kubernetes Pod
在Kubernetes中,Pod是用户可以在集群中创建和管理的最小可部署单元。Pod包含一组具有共享卷和网络资源的容器,以及有关如何运行应用程序的说明。Pod是短暂且一次性的,这意味着它们的寿命很短,因此不会持续很长时间。因此,部署Pod的最佳方法是使用YAML文件进行声明性配置。
由于可以重复使用,因此更具可重复性和方便性。此外,它还确保Kubernetes持续监控YAML文件中定义的资源并按指定运行。
列出/删除Pod
要获取集群中正在运行的Pod列表,请运行以下命令:
$ kubectl get pods
要在标签旁边显示Pod,请运行以下命令:
$ kubectl get pods --show-labels
要列出所有命名空间中的所有Pod,请运行以下命令:
$ kubectl get pods --all-namespaces
要列出当前命名空间中的Pod并提供更多详细信息,请附加-o
Wide参数。
$ kubectl get pods -o wide
要显示特定Pod的详细状态,请运行以下命令:
$ 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
要删除特定Pod,请运行以下命令:
$ 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 Secrets
在Kubernetes中,Secrets是保存敏感和机密信息(例如用户名和密码)的对象。要列出现有机密,请运行以下命令:
$ 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日志
日志对于记录集群事件以及帮助调试和排除故障至关重要,你可以使用以下命令查看或配置日志详细程度,要打印特定Pod运行的日志:
$ 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
总结
以上这些都是用于管理Kubernetes集群的一些最常用kubectl命令,在管理Kubernetes集群时应该都会用到,特意整理出来供大家参考使用。
当然,以上只是一些Kubectl命令的概览,实际使用中还有更多命令和选项可以用于不同的操作和管理任务。可以通过kubectl –help或者kubectl <command> –help来查看更详细的命令帮助信息。