kubectl exec - Kubernetes 容器命令执行工具
kubectl exec 是 Kubernetes 中用于在运行中的容器内执行命令的核心命令,主要用于容器调试、日志查看和故障排查等场景。
基本语法
bash
kubectl exec [POD_NAME] [-c CONTAINER_NAME] -- [COMMAND] [args...]核心参数
| 参数 | 描述 | 示例 |
|---|---|---|
-i, --stdin | 保持标准输入打开 | kubectl exec -it nginx -- bash |
-t, --tty | 分配伪终端 | kubectl exec -it nginx -- bash |
-c, --container | 指定容器名称 | kubectl exec -c sidecar nginx -- ls |
--namespace | 指定命名空间 | kubectl exec -n kube-system etcd-node1 -- sh |
典型使用场景
1. 交互式 Shell 访问
bash
# 进入 Pod 的默认容器
kubectl exec -it nginx-pod -- /bin/bash
# 进入指定容器
kubectl exec -it nginx-pod -c sidecar -- /bin/sh2. 执行单条命令
bash
# 查看容器内文件
kubectl exec nginx-pod -- ls /var/log
# 检查进程
kubectl exec nginx-pod -- ps aux
# 查看网络连接
kubectl exec nginx-pod -- netstat -tulnp3. 多容器 Pod 操作
bash
# 列出 Pod 中的所有容器
kubectl get pod nginx-pod -o jsonpath='{.spec.containers[*].name}'
# 在特定容器中执行命令
kubectl exec nginx-pod -c log-collector -- tail -f /var/log/app.log4. 文件传输(替代方案)
bash
# 从容器复制文件到本地
kubectl exec nginx-pod -- cat /etc/nginx/nginx.conf > local.conf
# 将本地文件内容传入容器
cat local.conf | kubectl exec -i nginx-pod -- tee /tmp/test.conf高级用法
1. 调试工具安装
bash
# 临时安装调试工具(适用于可写容器)
kubectl exec -it debug-pod -- apk add --no-cache curl
kubectl exec -it debug-pod -- apt-get update && apt-get install -y tcpdump2. 网络诊断
bash
# 测试服务连通性
kubectl exec -it client-pod -- curl -v http://service:8080
# DNS 解析测试
kubectl exec -it client-pod -- nslookup kubernetes.default3. 环境变量检查
bash
kubectl exec my-pod -- env
kubectl exec my-pod -- printenv KUBERNETES_SERVICE_HOST注意事项
容器要求:
- 容器必须处于运行状态
- 容器镜像必须包含要执行的命令(如 bash/sh)
安全限制:
- 需要足够的 RBAC 权限
- 某些安全策略可能禁止 exec 操作
替代方案:
- 对于只读容器,考虑使用
kubectl debug创建临时调试容器 - 对于生产环境,建议使用 sidecar 模式或服务网格进行调试
- 对于只读容器,考虑使用
最佳实践:
- 避免在生产容器中安装调试工具
- 使用
--明确分隔 kubectl 参数和要执行的命令 - 调试完成后及时退出交互式会话
常见问题排查
无法连接:
bashkubectl describe pod [POD_NAME] kubectl logs [POD_NAME]命令不存在:
bashkubectl exec busybox -- ls /bin权限不足:
bashkubectl auth can-i create pods/exec
kubectl exec 是 Kubernetes 运维中不可或缺的调试工具,合理使用可以极大提高故障排查效率。
