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

159 阅读5分钟

1. 基础资源查看命令

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

命令类别示例命令说明
查看资源列表kubectl get pods查看当前命名空间的所有Pod2
kubectl get pods -n <namespace>查看指定命名空间的Pod2
kubectl get pods -A 或 kubectl 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 namespaces 或 kubectl get ns查看命名空间2

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

2. 应用部署与管理命令

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

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

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

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

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

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

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

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

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

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

5. 资源类型缩写

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

资源类型缩写资源类型缩写
podsposervicessvc
deploymentsdeployreplicasetsrs
namespacesnsconfigmapscm
persistentvolumeclaimspvcpersistentvolumespv
ingressing

例如,我们可以使用 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:

    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. 实用技巧

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

    alias k='kubectl'
    alias kgp='kubectl get pods'
    alias kgs='kubectl get services'
    alias klog='kubectl logs -f'
    

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

  • 按资源使用率排序

    # 按重启次数排序查看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]
    
  • 快速查看资源使用情况

    kubectl top pods  # 显示Pod的资源使用情况
    kubectl top nodes # 显示节点的资源(CPU/Memory)使用情况
    ```:cite[4]