kubectl命令整理(一直更新中。。。)

1、kubectl 停止服务运行命令

在Kubernetes中,使用kubectl停止服务运行主要有以下几种方式:

  1. 删除服务(适用于不再需要该服务的情况)
    • 如果你想完全停止一个服务并且不再部署它,可以使用kubectl delete命令。例如,如果你有一个名为my - service的服务,其定义在一个名为my - service.yaml的文件中,你可以使用以下命令删除它:
    kubectl delete -f my - service.yaml
    
    • 如果你是通过名称来创建的服务,也可以直接通过名称删除。假设服务名称是my - service,并且它是一个ClusterIP类型的服务,你可以使用以下命令:
    kubectl delete service my - service
    
  2. 缩放副本数为0(适用于Deployment等有副本概念的资源)
    • 对于DeploymentReplicaSetStatefulSet等资源,你可以将副本数(replicas)设置为0来停止服务的运行。例如,对于一个名为my - deploymentDeployment,你可以使用以下命令来更新其副本数为0:
    kubectl scale deployment my - deployment --replicas = 0
    
    • 这会将该Deployment管理的Pod副本数量调整为0,从而停止服务的运行。当你需要再次启动服务时,可以将副本数调整为合适的值,例如:
    kubectl scale deployment my - deployment --replicas = 3
    
  3. 删除Pod(比较粗暴的方式,不推荐用于生产环境的常规停止操作)
    • 你可以使用kubectl delete pod命令来删除服务对应的Pod。但要注意,这种方式比较直接,如果服务是由Deployment等控制器管理的,控制器会自动重新创建Pod来维持期望的副本数。例如,要删除一个名为my - pod的Pod,可以使用以下命令:
    kubectl delete pod my - pod
    

这些操作在实际的Kubernetes集群管理中应该谨慎使用,特别是在生产环境中,需要考虑服务的可用性、数据的保存等诸多因素。同时,不同版本的kubectl和Kubernetes可能会有一些细微的差异。

2、kubectl批量删除Eivcted状态的pod

方法一:使用管道命令组合

kubectl get pods -n <namespace> | grep Evicted | awk '{print $1}' | xargs kubectl delete pod -n <namespace>

这里的<namespace>需要替换为你实际要操作的Kubernetes命名空间。具体解释如下:

  1. kubectl get pods -n <namespace>:获取指定命名空间下的所有Pod信息。
  2. | grep Evicted:通过管道将上一步的输出作为输入,使用grep筛选出包含Evicted字样的行,也就是找出处于Evicted状态的Pod相关信息。
  3. | awk '{print $1}':再通过管道接收grep的输出,利用awk提取每行的第一个字段,通常在kubectl get pods输出格式中第一个字段就是Pod的名称,这样就得到了Evicted状态Pod的名称列表。
  4. | xargs kubectl delete pod -n <namespace>:最后通过管道将awk输出的Pod名称列表传给xargsxargs会将这些名称作为参数传递给kubectl delete pod -n <namespace>,从而实现对Evicted状态Pod的批量删除。

方法二:使用标签选择器(前提是Pod有合适的标签可用于区分)

假设在创建Pod时,给Pod打上了类似status=evicted的标签(实际应用中可根据具体情况设定合适标签),那么可以通过以下方式批量删除:

kubectl delete pods -n <namespace> -l status=evicted

这里-l--label-selector的缩写,通过指定标签选择器status=evicted,就可以一次性删除带有该标签的所有Pod,也就是批量删除了处于Evicted状态的Pod(前提是之前正确打了相关标签)。

方法三:直接基于状态进行删除(可能会误删其他类似状态的Pod)

可以直接使用kubectl--field-selector参数来基于Pod的状态进行删除,例如:

kubectl delete pods -n <namespace> --field-selector=status.phase=Evicted

这种方法直接根据Evicted状态来筛选并删除Pod,但要注意的是,如果存在其他情况也可能导致Pod处于类似Evicted的状态(比如自定义的Pod终止流程中某个阶段也标记为类似状态),那么这种方法可能会误删这些非真正被驱逐的Pod,所以使用时要谨慎。

3、kubectl logs的基本用法

  1. 基本用法:查看单个Pod的日志

    • 命令格式kubectl logs <pod - name>
    • 示例:假设存在一个名为my - pod的Pod,运行以下命令查看它的日志:
      kubectl logs my - pod
      
  2. 指定容器查看日志(针对多容器Pod)

    • 命令格式kubectl logs <pod - name> - c <container - name>
    • 示例:如果my - pod包含两个容器container - 1container - 2,要查看container - 1的日志,使用以下命令:
      kubectl logs my - pod - c container - 1
      
  3. 查看最后几条日志(通过--tail-n选项)

    • 命令格式kubectl logs <pod - name> [--tail|-n] <number - of - lines>
    • 示例:查看my - pod日志的最后10行,命令如下:
      kubectl logs my - pod - n 10
      
  4. 查看从开头的指定字节数日志(使用--limit - bytes选项)

    • 命令格式kubectl logs <pod - name> --limit - bytes <number - of - bytes>
    • 示例:查看my - pod从开头起的1024字节内容,命令为:
      kubectl logs my - pod --limit - bytes 1024
      
  5. 按标签选择多个Pod查看日志(使用--selector-l选项)

    • 命令格式kubectl logs - l <label - selector>
    • 示例:若所有后端服务的Pod都带有标签app = backend - service,查看这些后端服务Pod的日志,命令如下:
      kubectl logs - l app = backend - service
      
    • 结合容器名称查看多容器Pod组的日志:如果这些Pod中有多个容器,并且只想查看特定容器的日志,可添加- c <container - name>参数。例如,要查看标签为app = backend - service的Pod中container - X的日志,命令是:
      kubectl logs - l app = backend - service - c container - X
      
  6. 根据Pod所在命名空间查看日志(使用--namespace-n选项)

    • 命令格式kubectl logs - n <namespace - name>
    • 示例:要查看production命名空间中的服务日志,命令如下:
      kubectl logs - n production
      
    • 结合标签选择器或Pod名称等其他条件来更精准地查看日志:例如,查看production命名空间中标签为app = frontend - service的Pod的日志,命令为:
      kubectl logs - n production - l app = frontend - service
      
  7. 持续跟踪日志更新(使用-f选项,类似tail - f

    • 命令格式kubectl logs - f <pod - name>
    • 示例:持续跟踪my - pod的日志,当有新的日志产生时,会自动在终端显示,命令如下:
      kubectl logs - f my - pod
      
  8. 查看容器重启后的日志(使用--previous-p选项)

    • 命令格式kubectl logs - p <pod - name>
    • 示例:查看my - pod中容器上一次启动后的日志内容,命令为:
      kubectl logs - p my - pod
      
  9. 设置日志时间戳显示格式(部分版本支持,使用--timestamps-t选项以及--date - format选项)

    • 显示时间戳
      • 命令格式kubectl logs - t <pod - name>
      • 示例:在每一行日志前显示时间戳,命令如下:
        kubectl logs - t my - pod
        
    • 指定时间戳格式
      • 命令格式kubectl logs - t --date - format="<format - string>" <pod - name>
      • 示例:按照YYYY - MM - DD HH:MM:SS格式显示时间戳,命令为:
        kubectl logs - t --date - format="%Y - %m - %d %H:%M:%S" my - pod
        
### kubectl 命令使用指南 `kubectl` 是 Kubernetes 的核心命令行工具,用于管理和操作集群中的各种资源。以下是关于 `kubectl` 命令的一些常见用法及其解释。 #### 进入容器的交互式 Shell 通过以下命令可以进入指定 Pod 中某个容器的交互式 Shell: ```bash kubectl exec -it pod_name -c container_name -n namespace -- /bin/sh ``` 此命令允许用户直接访问运行在 Kubernetes 集群上的容器内部环境[^1]。其中 `-it` 参数表示以交互模式启动终端;`pod_name` 表示目标 Pod 名称;`container_name` 表示目标容器名称;`namespace` 则指定了命名空间。 #### 创建资源 创建新资源可以通过 YAML 文件完成,也可以直接通过命令实现。例如,基于配置文件创建 Deployment 可以这样操作: ```bash kubectl create -f deployment.yaml ``` 如果需要动态定义简单的对象,则可以直接传递参数给某些特定类型的资源。比如创建一个名为 my-nginx 的 Nginx 服务实例: ```bash kubectl run my-nginx --image=nginx ``` 上述方法适用于快速测试场景下的简单部署需求[^2]。 #### NFS 相关设置 (扩展阅读) 虽然这不是严格意义上的 `kubectl` 功能范围内的事情,但在实际生产环境中经常需要用到外部存储支持的应用程序数据持久化方案之一就是 Network File System(NFS)[^3]。安装并启用NFS服务器之后还需要调整目录权限以便让客户端能够正常挂载共享卷路径 `/data/volumes/{v1,v2,v3}` 给不同的应用组件使用。 ### 示例代码片段 下面给出一段综合性的脚本样例来展示如何利用这些知识点一起工作: ```bash #!/bin/bash # 安装NFS服务端软件包以及初始化基本结构 yum -y install nfs-utils systemctl start nfs && systemctl enable nfs mkdir -pv /data/volumes/{v1,v2,v3} chown nobody.nobody /data/volumes/{v1,v2,v3} # 应用YAML描述符构建新的微服务单元 kubectl apply -f service-definition.yml # 登录到刚上线的服务节点上验证状态 POD_NAME=$(kubectl get pods | grep 'my-service' | awk '{print $1}') NAMESPACE="default" CONTAINER="main-app" kubectl exec -it ${POD_NAME} -c ${CONTAINER} -n ${NAMESPACE} -- /bin/sh ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值