Skip to content

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/sh

2. 执行单条命令

bash
# 查看容器内文件
kubectl exec nginx-pod -- ls /var/log

# 检查进程
kubectl exec nginx-pod -- ps aux

# 查看网络连接
kubectl exec nginx-pod -- netstat -tulnp

3. 多容器 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.log

4. 文件传输(替代方案)

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 tcpdump

2. 网络诊断

bash
# 测试服务连通性
kubectl exec -it client-pod -- curl -v http://service:8080

# DNS 解析测试
kubectl exec -it client-pod -- nslookup kubernetes.default

3. 环境变量检查

bash
kubectl exec my-pod -- env
kubectl exec my-pod -- printenv KUBERNETES_SERVICE_HOST

注意事项

  1. 容器要求

    • 容器必须处于运行状态
    • 容器镜像必须包含要执行的命令(如 bash/sh)
  2. 安全限制

    • 需要足够的 RBAC 权限
    • 某些安全策略可能禁止 exec 操作
  3. 替代方案

    • 对于只读容器,考虑使用 kubectl debug 创建临时调试容器
    • 对于生产环境,建议使用 sidecar 模式或服务网格进行调试
  4. 最佳实践

    • 避免在生产容器中安装调试工具
    • 使用 -- 明确分隔 kubectl 参数和要执行的命令
    • 调试完成后及时退出交互式会话

常见问题排查

  1. 无法连接

    bash
    kubectl describe pod [POD_NAME]
    kubectl logs [POD_NAME]
  2. 命令不存在

    bash
    kubectl exec busybox -- ls /bin
  3. 权限不足

    bash
    kubectl auth can-i create pods/exec

kubectl exec 是 Kubernetes 运维中不可或缺的调试工具,合理使用可以极大提高故障排查效率。