k8s基础命令
这篇文章将围绕 kubectl 这个指挥工具,介绍最核心的基础命令。我们将通过一组简单的示例,带你体验从部署应用、排查问题到删除资源的完整流程。
初识 kubectl 语法
在开始之前,我们先要了解 kubectl 命令的基本“句式” :
kubectl [command] [TYPE] [NAME] [flags]
command:你想对资源执行的操作,例如get(查看)、create(创建)、describe(描述详情)、delete(删除)。TYPE:资源类型,如pod、deployment、service。它支持单数、复数或缩写(如po、deploy、svc)。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 10sREADY列显示有 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 5smy-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 pods和kubectl get services,就会发现相关资源已被清除。
总结
本文带你快速浏览了 Kubernetes 中最常用的几个基础命令。从创建 Deployment 开始,使用 get 观察状态,用 describe 和 logs 进行问题排查,通过 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> | 删除资源 |
更多推荐
所有评论(0)