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> |
通过配置文件创建资源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 services
1。
6. Java应用在K8s中的特殊考虑
对于Java应用在Kubernetes中的运行,有一些特殊注意事项:
-
JVM内存设置 :在容器中运行Java应用时,需要确保JVM内存设置与容器限制匹配。通常建议设置
-XX:MaxRAMPercentage
而不是固定的-Xmx
值,这样可以更好地利用容器分配的内存。 -
启动命令与参数 :在Kubernetes中,你可以使用
command
和args
字段来指定容器启动命令和参数3:yamlcontainers: - name: java-container image: java:8 command: ["java", "-jar"] args: ["/app/my-java-app.jar", "--spring.profiles.active=prod"]
-
调试技巧 :如果需要在Java应用中调试,可以使用
kubectl port-forward
将本地调试端口转发到Pod中的调试端口(通常为5005),然后从IDE连接进行远程调试。
7. 实用技巧
-
使用别名提高效率:可以将常用命令设置为别名,例如:
bashalias 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]
-
快速查看资源使用情况:
bashkubectl top pods # 显示Pod的资源使用情况 kubectl top nodes # 显示节点的资源(CPU/Memory)使用情况 ```:cite[4]