Kubernetes 常见命令全解析:从入门到实战
第一章:Kubernetes 基础概念速览
1.1 什么是 Kubernetes?
Kubernetes(简称 k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。它解决了分布式系统中“如何高效管理大量容器”的难题,核心功能包括:
- 自动调度:根据资源需求将容器分配到合适的节点。
- 自我修复:当容器崩溃时自动重启,确保服务可用性。
- 水平扩展:根据负载动态调整容器数量。
- 服务发现:通过内置的 DNS 和负载均衡器暴露服务。
类比理解:
Kubernetes 就像一个“容器管家”,负责管理多个“虚拟房间”(节点),每个房间里运行着多个“住户”(容器)。管家会监控住户的健康状态,分配资源,并在房间不足时自动扩建。
1.2 核心组件与架构
Kubernetes 集群由以下组件构成:
- 控制平面(Master 节点):
- API Server:集群的入口,接收所有操作指令。
- etcd:分布式键值存储,保存集群状态数据。
- Scheduler:决定容器运行在哪个节点。
- Controller Manager:维护集群状态(如副本数、节点状态)。
- 工作节点(Worker 节点):
- Kubelet:节点上的代理,执行控制平面的指令。
- Container Runtime(如 Docker):实际运行容器的引擎。
- Kube-Proxy:管理网络规则,实现服务通信。
图示:
用户 → API Server → etcd/Scheduler/Controller → Kubelet → 容器 |
↑ ↓ |
监控与调度 运行容器 |
1.3 常用术语速查
| 术语 | 解释 |
|---|---|
| Pod | Kubernetes 的最小部署单元,通常包含一个或多个紧密相关的容器。 |
| Deployment | 管理 Pod 的控制器,支持滚动更新和自动回滚。 |
| Service | 定义一组 Pod 的访问策略,提供稳定的 IP 和 DNS 名称。 |
| Ingress | 外部流量进入集群的入口,支持路径路由和负载均衡。 |
| ConfigMap | 存储非敏感配置数据(如环境变量),供 Pod 使用。 |
| Secret | 存储敏感数据(如密码、密钥),以加密形式保存。 |
| Namespace | 逻辑隔离集群资源,避免命名冲突(如 dev、prod 环境)。 |
第二章:核心命令分类详解
2.1 集群信息与状态查询
2.1.1 查看集群基础信息
kubectl cluster-info
输出示例:
Kubernetes master is running at https://192.168.1.100:6443
KubeDNS is running at https://192.168.1.100:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
作用:快速确认集群是否可用,并获取 API Server 和核心服务(如 DNS)的访问地址。
2.1.2 检查节点状态
kubectl get nodes
输出示例:
NAME STATUS ROLES AGE VERSION
node-1 Ready <none> 10d v1.25.0
node-2 NotReady master 10d v1.25.0
关键字段:
STATUS:Ready表示节点健康,NotReady可能因网络或资源问题。ROLES:master为控制平面节点,<none>为工作节点。
深入操作:
kubectl describe node node-1 # 查看节点资源分配、污点等详细信息
kubectl top nodes # 显示节点 CPU/内存使用率(需安装 Metrics Server)
2.1.3 查看集群事件
kubectl get events --sort-by='.lastTimestamp'
作用:排查集群异常时,通过事件日志定位问题根源(如 Pod 崩溃、节点断开)。
2.2 Pod 管理命令
2.2.1 创建与删除 Pod
创建 Pod(声明式,推荐):
kubectl apply -f pod.yaml
示例 pod.yaml:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
快速创建 Pod(命令式):
kubectl run nginx-pod --image=nginx --port=80
删除 Pod:
kubectl delete pod nginx-pod
# 强制删除卡在 Terminating 状态的 Pod
kubectl delete pod nginx-pod --grace-period=0 --force
2.2.2 查看 Pod 状态
kubectl get pods -o wide # 显示 Pod 的 IP、所在节点等
kubectl describe pod nginx-pod # 查看 Pod 的详细事件和配置
状态解析:
Pending:Pod 正在调度或拉取镜像。Running:Pod 已启动。CrashLoopBackOff:容器频繁崩溃,需检查日志。
2.2.3 交互与调试
进入 Pod 终端:
kubectl exec -it nginx-pod -- /bin/bash
在 Pod 中执行命令:
kubectl exec nginx-pod -- date # 查看 Pod 内部时间
端口转发(将 Pod 端口映射到本地):
kubectl port-forward nginx-pod 8080:80 # 访问本地 8080 即可转发到 Pod 的 80 端口
复制文件到 Pod:
kubectl cp ./local-file nginx-pod:/tmp/remote-file
2.3 Deployment 管理命令
2.3.1 创建 Deployment
kubectl create deployment nginx-deploy --image=nginx --replicas=3
或通过 YAML 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
2.3.2 扩缩容
kubectl scale deployment nginx-deploy --replicas=5
自动扩缩容(需配置 HPA):
kubectl autoscale deployment nginx-deploy --min=2 --max=10 --cpu-percent=80
2.3.3 滚动更新与回滚
更新镜像:
kubectl set image deployment/nginx-deploy nginx=nginx:1.21
查看更新状态:
kubectl rollout status deployment/nginx-deploy
回滚到上一版本:
kubectl rollout undo deployment/nginx-deploy
查看更新历史:
kubectl rollout history deployment/nginx-deploy
2.4 Service 与网络管理
2.4.1 创建 Service
将 Deployment 暴露为 Service:
kubectl expose deployment nginx-deploy --type=NodePort --port=80
查看 Service 详情:
kubectl get svc nginx-deploy -o wide
输出示例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-deploy NodePort 10.96.123.456 <none> 80:31234/TCP 10m
- ClusterIP:仅集群内部访问。
- NodePort:通过节点 IP + 端口(如
31234)访问。 - LoadBalancer:云环境下的外部负载均衡器。
2.4.2 测试服务连通性
从集群内部访问:
kubectl run test-pod --image=busybox --rm -it --restart=Never -- sh
# 在容器内执行
wget -O- http://nginx-deploy
从外部访问 NodePort:
curl http://<节点IP>:31234
第三章:进阶技巧与实战场景
3.1 多环境管理(Namespace)
3.1.1 创建与切换 Namespace
kubectl create namespace dev
kubectl config set-context --current --namespace=dev # 切换默认命名空间
3.1.2 跨 Namespace 操作
kubectl get pods -n prod # 查看 prod 命名空间的 Pod
kubectl apply -n test -f pod.yaml # 在 test 命名空间创建资源
3.2 声明式配置与模板生成
3.2.1 生成 YAML 模板
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deploy.yaml
修改模板后应用:
kubectl apply -f deploy.yaml
3.2.2 合并多个 YAML 文件
kubectl apply -f ./k8s/ # 应用目录下所有 YAML 文件
3.3 资源监控与调优
3.3.1 安装 Metrics Server
作用:提供节点和 Pod 的资源使用率数据(kubectl top 依赖此组件)。
安装步骤:
- 下载 Metrics Server 的 YAML 文件:
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml - 修改
args添加--kubelet-insecure-tls(测试环境用,生产环境需配置证书):args: - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP - 应用配置:
kubectl apply -f components.yaml
3.3.2 查看资源使用
kubectl top pods # 查看 Pod 的 CPU/内存使用
kubectl top nodes # 查看节点的资源使用
3.4 调试技巧
3.4.1 临时调试容器
kubectl run debug --image=busybox --rm -it --restart=Never -- sh
作用:快速创建一个临时容器,用于测试集群内部网络或 DNS。
3.4.2 调试运行中的 Pod
kubectl debug nginx-pod -it --image=busybox --target=nginx # 进入 Pod 的指定容器调试
第四章:常见故障排查
4.1 Pod 无法启动
场景 1:ImagePullBackOff
现象:Pod 状态为 ImagePullBackOff。
原因:镜像拉取失败(如镜像不存在、私有仓库未配置 Secret)。
排查步骤:
- 查看事件日志:
kubectl describe pod <pod-name> | grep -A10 Events - 手动拉取镜像测试:
docker pull <image-name> # 本地测试镜像是否存在 - 配置私有仓库 Secret:
在 Pod 模板中引用:kubectl create secret docker-registry regcred --docker-server=<registry> --docker-username=<user> --docker-password=<pass>spec: imagePullSecrets: - name: regcred
场景 2:CrashLoopBackOff
现象:Pod 频繁重启。
原因:容器内进程崩溃(如应用配置错误、端口冲突)。
排查步骤:
- 查看容器日志:
kubectl logs <pod-name> --previous # 查看上一次运行的日志 - 进入容器检查:
kubectl exec -it <pod-name> -- /bin/sh
4.2 网络问题
场景 1:Service 无法访问
现象:通过 Service IP 或 DNS 无法访问后端 Pod。
排查步骤:
- 检查 Service 的 Endpoints:
kubectl get endpoints <service-name>- 如果 Endpoints 为空,说明 Selector 未匹配到 Pod。
- 测试 Pod 内部网络:
kubectl exec -it <pod-name> -- curl http://<other-pod-ip>
场景 2:DNS 解析失败
现象:容器内无法解析域名(如 nslookup kubernetes.default 失败)。
排查步骤:
- 检查 CoreDNS Pod 状态:
kubectl get pods -n kube-system | grep coredns - 查看 CoreDNS 日志:
kubectl logs -n kube-system <coredns-pod-name>
4.3 权限问题
场景 1:RBAC 权限不足
现象:执行 kubectl 命令时报错 forbidden。
排查步骤:
- 查看当前上下文的 ServiceAccount:
kubectl config view --minify | grep serviceaccount - 检查 RoleBinding 是否授权:
kubectl get rolebinding -n <namespace>
第五章:效率工具推荐
5.1 自动补全
Bash 补全:
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
Zsh 补全:
source <(kubectl completion zsh)
echo "source <(kubectl completion zsh)" >> ~/.zshrc
5.2 界面化管理工具
- K9s:终端 UI 工具,实时监控集群状态。
- Lens:图形化界面,支持多集群管理。
- Octant:Web 界面,集成日志、监控等功能。
总结
本文通过 基础概念→核心命令→进阶技巧→故障排查 的路径,系统梳理了 Kubernetes 的常见操作。掌握这些命令后,你可以:
- 快速部署和调试容器化应用。
- 高效管理集群资源(如扩缩容、滚动更新)。
- 独立排查 80% 以上的常见问题。
下一步建议:
- 在测试环境实践所有命令,加深理解。
- 阅读官方文档的 Tasks 章节 拓展知识。
- 尝试编写 Helm Chart 或 Kustomize 模板,提升配置管理效率。
Kubernetes 的学习是一个“用进废退”的过程,持续实践才能真正掌握其精髓!
更多推荐



所有评论(0)