这篇文章将围绕 kubectl 这个指挥工具,介绍最核心的基础命令。我们将通过一组简单的示例,带你体验从部署应用、排查问题到删除资源的完整流程。

初识 kubectl 语法

在开始之前,我们先要了解 kubectl 命令的基本“句式” :

kubectl [command] [TYPE] [NAME] [flags]
  • command:你想对资源执行的操作,例如 get(查看)、create(创建)、describe(描述详情)、delete(删除)。
  • TYPE:资源类型,如 poddeploymentservice。它支持单数、复数或缩写(如 podeploysvc)。
  • NAME:资源的具体名称。如果省略名称,则会显示该类型的所有资源。
  • flags:可选参数,例如用 -n 指定命名空间(Namespace),用 -o wide 查看更详细的信息。

实战演练:部署并访问 Nginx

为了让命令更具体,我们将在集群中部署一个 Nginx 应用。

1. 创建资源:Deployment

Deployment 是管理 Pod 的控制器,它定义了应用的期望状态,比如使用哪个镜像、运行几个副本。使用 kubectl create deployment 命令可以非常方便地创建一个 Deployment 。

# 创建一个名为 my-nginx 的部署,使用 nginx 最新镜像
kubectl create deployment my-nginx --image=nginx --replicas=2
2. 查看资源状态:get

创建完成后,第一步通常是检查资源是否成功运行。kubectl get 命令是我们的“眼睛”,用来列出集群中的各类资源 。

  • 查看 Deployment

    kubectl get deployments
    

    运行结果示例

    NAME       READY   UP-TO-DATE   AVAILABLE   AGE
    my-nginx   2/2     2            2           10s
    

    READY 列显示有 2 个 Pod 正在运行,符合我们的预期。

  • 查看 Pod

    kubectl get pods
    

    运行结果示例

    NAME                        READY   STATUS    RESTARTS   AGE
    my-nginx-6b9f6b4b5c-27kqg   1/1     Running   0          20s
    my-nginx-6b9f6b4b5c-vz9b2   1/1     Running   0          20s
    

    我们可以看到两个状态为 Running 的 Pod,它们的名字是 Deployment 自动生成的。

  • 查看更多细节:如果觉得信息不够,可以加上 -o wide 参数,这样就能看到 Pod 运行的节点和 IP 地址了 。

    kubectl get pods -o wide
    
3. 深入排查:describe 和 logs

如果 Pod 状态不是 Running,或者应用行为不符合预期,就需要进行更深入的检查了。

  • 查看事件(Events)kubectl describe 命令会显示资源的详细生命周期事件,是排查启动失败、镜像拉取问题等的利器 。假设我们想知道某个 Pod 的详细信息:

    # 请将 pod-name 替换为上面查看到的实际 Pod 名称
    kubectl describe pod my-nginx-6b9f6b4b5c-27kqg
    

    这个命令的输出很长,但最有价值的部分通常在底部 Events 段,这里记录了 Pod 整个生命周期中发生的关键事件,比如镜像拉取成功、容器创建等。

  • 查看日志(Logs):当应用启动成功但出现逻辑错误时,kubectl logs 命令就派上了用场。它可以打印容器内部的标准输出日志 。

    # 查看指定 Pod 的日志
    kubectl logs my-nginx-6b9f6b4b5c-27kqg
    

    如果 Pod 内有多个容器,需要用 -c 指定容器名。如果 Pod 崩溃重启了,可以用 --previous 查看上一个容器的日志。

4. 在容器内执行命令:exec

有时候我们需要进入容器内部进行调试,比如查看文件系统、测试网络连通性。kubectl exec 命令可以做到这一点 。

# 在指定的 Pod 中执行命令,这里我们打开一个交互式的 bash shell
kubectl exec -it my-nginx-6b9f6b4b5c-27kqg -- /bin/bash

执行成功后,你会发现终端的提示符变了,说明你已经进入了 Nginx 容器内部。输入 exit 可以退出。

5. 暴露服务:expose

Pod 通常有自己的 IP,但这个 IP 是易变的。为了让应用能够稳定地被集群内部或外部访问,我们需要创建一个 Service 资源。kubectl expose 命令可以将 Deployment 暴露为一个服务 。

# 暴露 my-nginx 部署,端口为 80,类型为 NodePort(以便从集群外访问)
kubectl expose deployment my-nginx --port=80 --type=NodePort
  • 查看服务
    kubectl get services
    
    运行结果示例
    NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        1h
    my-nginx     NodePort    10.104.112.75   <none>        80:31234/TCP   5s
    
    可以看到 my-nginx 服务已经创建,PORT(S) 列显示 80:31234,意味着访问集群任一节点的 31234 端口,即可访问到我们的 Nginx 服务。
6. 资源调整与删除
  • 扩缩容:当流量增加时,我们可以轻松地扩展 Pod 数量 。

    kubectl scale deployment my-nginx --replicas=3
    

    再次执行 kubectl get pods,会发现 Pod 数量变为了 3 个。

  • 删除资源:实验结束后,需要及时清理资源,避免占用系统资源。

    # 删除我们创建的服务
    kubectl delete service my-nginx
    # 删除部署(这会连带删除它管理的 Pod)
    kubectl delete deployment my-nginx
    

    再次运行 kubectl get podskubectl get services,就会发现相关资源已被清除。

总结

本文带你快速浏览了 Kubernetes 中最常用的几个基础命令。从创建 Deployment 开始,使用 get 观察状态,用 describelogs 进行问题排查,通过 exec 进入容器内部,再用 expose 将服务对外暴露,最后用 delete 完成清理。

命令分类常见用法示例作用
kubectl get查看资源kubectl get pods -o wide列出资源,-o wide 查看详细信息
kubectl describe诊断kubectl describe pod <pod-name>显示资源的详细状态和生命周期事件
kubectl logs诊断kubectl logs <pod-name>打印 Pod 容器的日志
kubectl exec交互kubectl exec -it <pod-name> -- /bin/bash在 Pod 容器内执行命令
kubectl expose网络kubectl expose deployment <name> --port=80将 Deployment/Pod 暴露为 Service
kubectl delete清理kubectl delete deployment <name>删除资源

更多推荐