扫盲:一份一站式kubectl速查表!

引言

Kubectl提供丰富功能,可管理各类Kubernetes资源(节点、Pod、服务、部署、命名空间等),包括创建、删除、更新资源,以及获取资源信息。它支持多个命令行选项和标志,用于自定义操作。

在此我们提供一份一站式kubectl速查表,包含12个核心kubectl命令及其各类选项,主要覆盖节点、Pod、命名空间、服务、部署、守护进程集、事件、日志、副本集、服务账号、集群自检、部署与服务交互。

借助这份kubectl速查表,我们可以从容应对Kubernetes管理的复杂性,充分发挥其在容器化应用中的潜力。

1. 节点

节点是Kubernetes集群中的物理或虚拟工作机器,用于托管和运行Pod及其组件(容器)。每个集群至少有一个节点,节点包含 kubelet、kube-proxy和容器运行时。

  • kubectl get node:获取并显示集群中所有节点的信息。kubectl get node
    执行该命令的结果可能如下:NAME     STATUS   ROLES    AGE   VERSION
    node-1   Ready    <none>   10d   v1.28.3
    node-2   Ready    <none>   10d   v1.28.3
    node-3   Ready    <none>   10d   v1.28.3
  • kubectl delete node <node_name>:从集群中删除特定节点,受影响的Pod会重新调度到其他可用节点。kubectl delete node my-node
  • kubectl top node:显示集群中每个节点的资源使用统计信息(如CPU和内存消耗)。kubectl top node
    执行结果可能如下:NAME    CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
    node-1   5m          0%     123Mi          16%
    node-2   8m          1%     291Mi          38%
    node-3   2m          0%     90Mi           12%
  • kubectl describe nodes | grep ALLOCATED -A 5:提供集群中所有节点的详细信息,重点关注已分配资源和每个节点上运行的Pod。grep命令用于过滤输出,仅显示与已分配资源相关的信息。kubectl describe nodes | grep ALLOCATED -A 5
  • kubectl get pods -o wide | grep <node_name>:获取在特定节点上运行的Pod的信息。grep命令用于过滤输出,仅显示在指定节点上运行的Pod。kubectl get pods -o wide | grep my-node
  • kubectl get no -o wide:以详细格式提供集群中所有节点的详细信息(如IP地址和角色)。kubectl get no -o wide
  • kubectl describe no:提供集群中所有节点的详细信息,包括节点状态、系统详情和其他相关信息。kubectl describe no node-1
    执行结果可能如下:Name:               node-1
    Roles:              <none>
    Labels:             beta.kubernetes.io/arch=amd64
                        beta.kubernetes.io/os=linux
                        kubernetes.io/arch=amd64
                        kubernetes.io/hostname=node-1
                        kubernetes.io/os=linux
    Annotations:        node.alpha.kubernetes.io/ttl=0
  • kubectl annotate node <node_name>:为特定节点添加或更新注解。注解是键值对,用于提供节点的任意非标识信息或元数据。 注解中包含的信息包括:指向日志和监控仓库的标签或标识;构建、发布和镜像信息(如发布ID、时间戳和镜像哈希);调试信息(如客户端库的名称、构建版本信息)。kubectl annotate node my-node key=value
  • kubectl uncordon node <node_name>:将之前“cordoned”的节点标记为可调度。节点被封锁后,会被标记为“不可调度”,新Pod将不会被调度到该节点。 已在被封锁节点上运行的Pod仍可访问。若要查看特定时间哪些节点被封锁,可执行get nodes命令。kubectl get nodes
    执行“解除封锁”(uncordon)后,新Pod可被调度到该节点。解除封锁的命令如下:kubectl uncordon node my-node
  • kubectl label node:为节点添加、更新或删除标签。标签是键值对,可用于节点的分类和过滤,也可用于为节点附加额外信息或查找/选择所需节点。kubectl label node my-node key=value
    请将 <node_name> 替换为您要操作的节点的实际名称,本文示例中目标节点名为“my-node”。

2. Pod

Pod是Kubernetes中的基本构建块:一个Pod封装一个或多个紧密耦合的容器,并共享网络和存储资源。Pod在节点上调度和运行,是Kubernetes中最小的部署单元。

  • kubectl get po:获取集群中所有Pod的信息。kubectl get po
  • kubectl describe pod <pod_name>:提供特定Pod的详细信息,包括其当前状态、事件和关联的容器。kubectl describe pod my-pod
  • kubectl delete pod <pod_name>:从集群中删除特定Pod,将其从“期望状态”中移除。若适用,Kubernetes会自动创建新Pod,以维持期望的副本数。kubectl delete pod my-pod
  • kubectl create pod <pod_name>:使用描述Pod配置和规格的YAML或JSON文件创建新Pod。kubectl create pod my-pod --image=my-container-image
  • kubectl get pod -n <name_space>:获取特定命名空间下的Pod信息。kubectl get pod -n my-namespace
  • kubectl create pod <pod_name> -n <name_space>:在特定命名空间内创建新Pod,使用描述Pod配置和规格的YAML或JSON文件。kubectl create pod my-pod -n my-namespace --image=my-container-image
    请将<pod_name>替换为您要操作的Pod的实际名称,将<name_space>替换为目标命名空间。

3. 命名空间

命名空间将Kubernetes集群划分为多个虚拟子集群,使多个团队可同时在一个集群上工作。

您的Kubernetes集群中可根据需要创建任意数量的命名空间,每个命名空间在逻辑上相互隔离,但可与集群中的其他命名空间交互。

所有Kubernetes资源(节点和持久卷除外)都存在于指定的命名空间中,这些命名空间要么是默认创建的,要么是由Kubernetes操作员创建的。

  • kubectl create namespace <namespace_name>:用于在Kubernetes中创建新命名空间。kubectl create namespace my-namespace
  • kubectl get namespace:获取集群中所有命名空间的信息。kubectl get namespace
  • kubectl describe namespace <namespace_name>:提供特定命名空间的详细信息,包括其标签、注解和相关联的资源。kubectl describe namespace my-namespace
  • kubectl delete namespace <namespace_name>:用于删除特定命名空间及其内部的所有资源。kubectl delete namespace my-namespace
  • kubectl edit namespace <namespace_name>:允许您使用默认编辑器修改特定命名空间的配置。kubectl edit namespace my-namespace

4. Services

服务支持集群内外不同Pod之间的通信,为每个Pod提供稳定的DNS名称和IP地址,使它们能够相互访问和交互。

即使之前的Pod(及其IP)已被删除,服务也能确保一个Pod始终能找到并与提供所需功能(如图像处理或Web服务)的Pod通信。

  • kubectl get services:获取集群中所有运行的服务的信息。kubectl get services
  • kubectl describe services <services_name>:提供特定服务的详细信息,包括其IP地址、端口和相关联的端点。kubectl describe service my-service
  • kubectl delete services -o wide:删除集群中的所有服务。-o wide标志用于显示被删除服务的额外信息。kubectl delete services -o wide
  • kubectl delete service <service_name>:删除集群中的特定服务。kubectl delete service my-service

5. Deployments

部署定义了一组Pod的期望状态(应如何创建或修改),并管理Pod的生命周期(应何时删除)。

部署可确保运行指定数量的副本,高效扩缩副本Pod,用新部署及其资源替换现有部署及其资源,并处理应用版本的更新和回滚。

  • kubectl create deployment <deployment_name>:在Kubernetes中创建具有指定名称的新部署。kubectl create deployment my-deployment
  • kubectl get deployment:获取集群中所有运行的部署的信息。kubectl get deployment
  • kubectl describe deployment <deployment_name>:提供特定部署的详细信息,包括副本数、当前状态和相关联的 Pod。kubectl describe deployment my-deployment
  • kubectl delete deployment <deployment_name>:删除特定部署及其所有相关资源(包括Pod和副本)。kubectl delete deployment my-deployment

6. DaemonSets

守护进程集确保特定Pod在集群的所有节点(或部分节点)上运行,且当新节点添加到集群时,Pod会自动添加到这些新节点上。

守护进程集用于后台任务或系统级服务,如运行集群存储、日志收集和节点监控守护进程。

  • kubectl get ds:获取集群中所有运行的守护进程集的信息。kubectl get ds
  • kubectl get ds -all-namespaces:获取集群中所有命名空间下运行的守护进程集的信息。kubectl get ds -all-namespaces
  • kubectl describe ds [daemonset_name] [namespace_name]:提供特定守护进程集的详细信息,包括其状态、Pod和相关联的事件。kubectl describe ds my-daemonset my-namespace

7. 事件

事件是集群内发生的事件或操作的记录,提供与集群相关的状态变化、错误或警告信息。

  • kubectl get events:获取集群中发生的事件信息,如资源的创建、删除或错误。kubectl get events
  • kubectl get events –field-selector involvedObject.kind != Pod:根据关联对象类型过滤事件。本示例中,排除与 Pod 相关的事件。kubectl get events --field-selector involvedObject.kind != Pod
  • kubectl get events –field-selector type != Normal:根据事件类型过滤事件。本示例中,排除“正常”(Normal)类型的事件。kubectl get events --field-selector type != Normal

8. 日志

日志记录集群和集群组件中发生的事件的输出和诊断信息,对调试和容器监控至关重要。例如,您可配置日志,以提供Pod状态变化或调度器将Pod分配到节点的分步详情。

  • kubectl logs <pod_name>:获取特定 Pod 的日志。kubectl logs my-pod
  • kubectl logs –since=1h <pod_name>:获取特定Pod在指定时间段内的日志。本示例中,获取过去1小时的日志。kubectl logs --since=1h my-pod
  • kubectl logs –tail=20 <pod_name>:获取特定Pod的最后20行日志。kubectl logs --tail=20 my-pod
  • kubectl logs -c <container_name> <pod_name>:获取Pod中特定容器的日志。当一个Pod包含多个容器时,此命令非常有用。kubectl logs -c my-container my-pod
  • kubectl logs <pod_name> > pod.log:获取特定 Pod 的日志,并将其保存到名为“pod.log”的文件中。kubectl logs my-pod > pod.log

9. 副本集

副本集确保在任何给定时间运行指定数量的相同Pod(副本)。无论Pod的临时性如何,副本集配置都能确保始终有预配置数量的相同Pod可用。

副本集包含一个选择器(用于说明应如何获取Pod以及获取哪些Pod),还包含一个Pod模板(用于提供要添加到新Pod中的数据)。

  • kubectl get replicasets:获取集群中所有运行的副本集的信息。kubectl get replicasets
  • kubectl describe replicasets <replicaset_name>:提供特定副本集的详细信息,包括其副本、Pod和相关联的事件。kubectl describe replicasets my-replicaset
  • kubectl scale –replicas=[x]:将副本集中的副本数扩缩到[x]指定的期望数量。kubectl scale --replicas=3 my-replicaset
    此命令会将副本集my-replicaset的副本数扩缩到3。副本集将维持3个Pod实例的期望状态:若当前副本数少于3,则创建更多Pod;若多于3,则删除多余的 Pod。

10. 服务账号

服务账号为集群内的Pod和应用提供身份,使其能够与其他资源(如API或其他服务)交互,用于Kubernetes集群中的认证和授权。

  • kubectl get serviceaccounts:获取集群中所有服务账号的信息。kubectl get serviceaccounts
  • kubectl describe serviceaccounts:提供集群中所有服务账号的详细信息,包括其密钥和相关联的资源。kubectl describe serviceaccounts
  • kubectl replace serviceaccounts:用提供的或修改后的配置替换集群中所有现有的服务账号。kubectl replace serviceaccounts -f path/to/serviceaccounts.yaml
    此命令会用位于 path/to/serviceaccounts.yaml 的 YAML 文件中指定的新服务账号或更新后的服务账号,替换集群中现有的服务账号。YAML 文件中未提及的现有服务账号将被删除。
  • kubectl delete serviceaccounts:此kubectl命令用于从集群中删除特定的服务账号。kubectl delete serviceaccounts my-serviceaccount

11. 集群自检

集群自检指检查集群及其内部的所有组件(Pod、节点、部署等),包括收集组件状态信息(如当前Pod数量是否满足期望数量),以及通过分析获取组件健康状况的相关洞察。

  • kubectl version:获取kubectl客户端和Kubernetes服务器的版本信息。kubectl version
  • kubectl cluster-info:提供Kubernetes集群的信息,包括集群端点、API版本等。kubectl cluster-info
  • kubectl config view:显示当前kubectl配置,包括集群、用户和上下文。kubectl config view
  • kubectl describe node <node_name>:提供集群中特定节点的详细信息,包括节点状态、状态条件、容量等。kubectl describe node my-node

12. 部署与服务交互

Kubectl速查表内容涉及:管理和控制在Pod中运行的应用的生命周期,以及促进集群内通信。

  • kubectl logs deploy/my-deployment:获取特定部署(本示例中为 my-deployment)的日志。kubectl logs deploy/my-deployment
  • kubectl logs deploy/my-deployment -c my-container:获取部署中特定容器(本示例中为 my-container)的日志。kubectl logs deploy/my-deployment -c my-container
  • kubectl port-forward svc/my-service 5000:设置端口转发,使您能在本地5000端口访问集群中的服务(本示例中为 my-service)。kubectl port-forward svc/my-service 5000
  • kubectl port-forward deploy/my-deployment 5000:6000:设置端口转发,使您能在本地5000端口访问部署中的特定 Pod(本示例中为 my-deployment),并将流量转发到容器的6000端口。kubectl port-forward deploy/my-deployment 5000:6000
  • kubectl exec deploy/my-deployment — ls:用于在部署中的特定Pod(本示例中为 my-deployment)内执行命令(本示例中为ls),列出指定容器中的文件和目录。kubectl exec deploy/my-deployment -- ls

添加好友,邀你入群,运维人的圈子,每日精彩分享,更有小伙伴们的热议!

声明:来自木讷大叔爱运维,仅代表创作者观点。链接:https://eyangzhen.com/4299.html

木讷大叔爱运维的头像木讷大叔爱运维

相关推荐

关注我们
关注我们
购买服务
购买服务
返回顶部