🚀 Kubernetes核心命令详解:Java开发者必备指南

1. 基础资源查看命令

掌握资源查看命令是我们了解集群状态和应用部署情况的起点。

命令类别 示例命令 说明
查看资源列表 kubectl get pods 查看当前命名空间的所有Pod2
kubectl get pods -n <namespace> 查看指定命名空间的Pod2
kubectl get pods -Akubectl get pods --all-namespaces 查看所有命名空间的Pod2
kubectl get all 查看当前命名空间下的所有资源(Pod, Service, Deployment等)4
查看详细信息 kubectl get pods -o wide 查看Pod的详细信息(IP、所在节点等)1
kubectl get pods -o yaml 以YAML格式显示资源定义4
kubectl describe pod <pod-name> 查看Pod的详细描述(状态、事件、容器等)4
按标签筛选 kubectl get pods -l app=my-app 获取所有具有标签app=my-app的Pods1
查看节点和命名空间 kubectl get nodes 查看所有节点状态2
kubectl get namespaceskubectl get ns 查看命名空间2

这些命令能帮我们快速了解应用在集群中的运行状态。比如,当我们发现Java应用没有正常启动时,使用 kubectl get pods -o wide 可以查看Pod分配到了哪个节点,使用 kubectl describe pod <pod-name> 可以查看详细的事件信息,这常用于诊断调度失败、镜像拉取错误等原因2。

2. 应用部署与管理命令

这些命令用于部署和管理我们的Java应用程序。

命令 说明 示例
kubectl create -f <file.yaml> 通过配置文件创建资源1 kubectl create -f demo-deployment.yaml
kubectl apply -f <file.yaml> 推荐方式:通过配置文件创建或更新资源(声明式管理)2 kubectl apply -f java-app-deployment.yaml
kubectl apply -f <directory/> 应用某个目录下的所有YAML配置文件4 kubectl apply -f ./k8s-configs
kubectl delete -f <file.yaml> 删除通过YAML文件创建的资源4 kubectl delete -f java-app-deployment.yaml
kubectl scale deployment/<deploy-name> --replicas=<number> 将Deployment的副本数扩缩到指定数量4 kubectl scale deployment/my-java-app --replicas=3
kubectl rollout status deployment/<deploy-name> 查看Deployment的滚动更新状态4 kubectl rollout status deployment/my-java-app
kubectl rollout undo deployment/<deploy-name> 回滚到上一个版本4 kubectl rollout undo deployment/my-java-app
kubectl edit deployment <name> 在线编辑集群中已存在的资源配置(自动打开默认编辑器)2 kubectl edit deployment my-java-app

对于Java应用部署,推荐使用 kubectl apply -f 而不是 create -f,因为apply是"声明式更新",如果资源已存在则会更新,不存在则创建,更适合生产环境2。这在你需要更新Java应用配置或镜像版本时特别有用。

3. 日志查看与故障排查命令

当我们的Java应用出现问题时,这些命令是我们排查故障的主要工具。

命令 说明 示例
kubectl logs <pod-name> 查看Pod中第一个容器的日志4 kubectl logs my-java-pod
kubectl logs <pod-name> -c <container-name> 查看Pod中指定容器的日志(多容器场景)4 kubectl logs my-java-pod -c app-container
kubectl logs -f <pod-name> 实时流式输出Pod的日志(类似tail -f)4 kubectl logs -f my-java-pod
kubectl logs -f <pod-name> --previous 查看上一个容器实例的日志(用于容器崩溃重启)4 kubectl logs -f my-java-pod --previous
kubectl exec -it <pod-name> -- /bin/sh 在Pod的第一个容器中打开一个交互式Shell4 kubectl exec -it my-java-pod -- /bin/sh
kubectl exec -it <pod-name> -c <container-name> -- /bin/bash 在Pod的指定容器中打开一个交互式Bash4 kubectl exec -it my-java-pod -c app-container -- /bin/bash
kubectl port-forward <pod-name> <local-port>:<pod-port> 将本地端口转发到Pod的端口,用于本地访问调试4 kubectl port-forward my-java-pod 8080:8080

对于Java应用,我们经常需要查看GC日志或应用日志来诊断问题。使用 kubectl logs -f 可以实时查看日志输出,这在排查运行时问题时非常有用。如果我们的Pod中有多个容器(比如Java应用容器和日志收集器容器),记得使用 -c 参数指定容器名称。

4. 集群管理与上下文切换命令

当我们需要管理多个集群或在不同环境间切换时,这些命令非常有用。

命令 说明 示例
kubectl cluster-info 显示集群主节点和服务的地址4 kubectl cluster-info
kubectl config get-contexts 显示所有上下文(context)列表4 kubectl config get-contexts
kubectl config current-context 显示当前正在使用的上下文4 kubectl config current-context
kubectl config use-context <context-name> 切换到指定的上下文(集群/用户/命名空间)4 kubectl config use-context production-cluster
kubectl config set-context --current --namespace=<ns> 为当前上下文设置默认的命名空间4 kubectl config set-context --current --namespace=java-apps

5. 资源类型缩写

Kubernetes支持资源类型名称的缩写,可以大大提高命令输入效率1。

资源类型 缩写 资源类型 缩写
pods po services svc
deployments deploy replicasets rs
namespaces ns configmaps cm
persistentvolumeclaims pvc persistentvolumes pv
ingress ing

例如,我们可以使用 kubectl get po 代替 kubectl get pods,使用 kubectl get svc 代替 kubectl get services1。

6. Java应用在K8s中的特殊考虑

对于Java应用在Kubernetes中的运行,有一些特殊注意事项:

  1. JVM内存设置 :在容器中运行Java应用时,需要确保JVM内存设置与容器限制匹配。通常建议设置-XX:MaxRAMPercentage而不是固定的-Xmx值,这样可以更好地利用容器分配的内存。

  2. 启动命令与参数 :在Kubernetes中,你可以使用commandargs字段来指定容器启动命令和参数3:

    yaml 复制代码
    containers:
    - name: java-container
      image: java:8
      command: ["java", "-jar"]
      args: ["/app/my-java-app.jar", "--spring.profiles.active=prod"]
  3. 调试技巧 :如果需要在Java应用中调试,可以使用kubectl port-forward将本地调试端口转发到Pod中的调试端口(通常为5005),然后从IDE连接进行远程调试。

7. 实用技巧

  • 使用别名提高效率:可以将常用命令设置为别名,例如:

    bash 复制代码
    alias k='kubectl'
    alias kgp='kubectl get pods'
    alias kgs='kubectl get services'
    alias klog='kubectl logs -f'

    将这些别名添加到你的~/.bashrc~/.zshrc文件中4。

  • 按资源使用率排序

    bash 复制代码
    # 按重启次数排序查看Pod(常用于找有问题的Pod)
    kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
    
    # 查看资源使用情况
    kubectl top pods --sort-by=cpu
    kubectl top pods --sort-by=memory
    ```:cite[4]
  • 快速查看资源使用情况

    bash 复制代码
    kubectl top pods  # 显示Pod的资源使用情况
    kubectl top nodes # 显示节点的资源(CPU/Memory)使用情况
    ```:cite[4]
相关推荐
当无5 分钟前
Mac 使用Docker部署Mysql镜像,并使用DBever客户端连接
后端
野生的午谦5 分钟前
PostgreSQL 部署全记录:Ubuntu从安装到故障排查的完整实践
后端
##学无止境##34 分钟前
Java设计模式-观察者模式
java·观察者模式·设计模式
David爱编程39 分钟前
可见性问题的真实案例:为什么线程看不到最新的值?
java·后端
00后程序员1 小时前
移动端网页调试实战,iOS WebKit Debug Proxy 的应用与替代方案
后端
whitepure1 小时前
我如何理解与追求整洁代码
java·后端·代码规范
用户8356290780511 小时前
Java高效读取Excel表格数据教程
java·后端
yinke小琪1 小时前
今天解析一下从代码到架构:Java后端开发的"破局"与"新生"
java·后端·架构
码出极致1 小时前
支付平台资金强一致实践:基于 Seata TCC+DB 模式的余额扣减与渠道支付落地案例
后端·面试
掘金一周1 小时前
DeepSeek删豆包冲上热搜,大模型世子之争演都不演了 | 掘金一周 8.28
前端·人工智能·后端