Rancher Desktop(WSL2/Win11)中mssql-tools Pod出现CrashLoopBackOff故障
问题原因与解决方案
问题根源
从kubectl describe pod的输出能看到,容器退出原因是Completed、退出码为0——这说明容器正常启动后立刻执行完默认命令就退出了。Kubernetes默认重启策略为Always,会不断重启退出的容器,最终导致CrashLoopBackOff状态。
而直接用Docker运行时能正常使用,是因为你用了-it参数,Docker会为容器分配伪终端并进入交互模式,容器内的shell会持续运行;但Kubernetes默认以后台模式启动容器,没有长期运行的前台进程时,容器就会立即终止。
解决方案
有三种常见处理方式,按需选择:
1. 让容器长期存活(用于交互式操作)
修改Pod的YAML,指定一个长期运行的前台命令(比如tail -f /dev/null),让容器保持运行状态,之后可通过kubectl exec进入容器使用sqlcmd:
apiVersion: v1 kind: Pod metadata: name: mssql-tools labels: name: mssql-tools spec: containers: - name: mssql-tools image: mcr.microsoft.com/mssql-tools:latest command: ["tail", "-f", "/dev/null"]
创建Pod后,执行以下命令进入容器:
kubectl exec -it mssql-tools -- bash
进入容器后即可正常使用sqlcmd命令。
2. 执行一次性SQL命令(无需容器长期存活)
如果仅需执行一次性SQL操作,可直接在Pod的command里指定sqlcmd完整命令,同时设置重启策略为OnFailure或Never避免循环重启:
apiVersion: v1 kind: Pod metadata: name: mssql-tools labels: name: mssql-tools spec: restartPolicy: OnFailure containers: - name: mssql-tools image: mcr.microsoft.com/mssql-tools:latest command: ["sqlcmd", "-S", "your-sql-server-host", "-U", "sa", "-P", "your-password", "-Q", "SELECT @@VERSION"]
替换其中的数据库地址、账号、密码和SQL语句即可。
3. 快速创建临时Pod(无需编写YAML)
如果只是临时需要使用mssql-tools,可直接用kubectl run命令创建带长期运行命令的Pod:
kubectl run mssql-tools --image=mcr.microsoft.com/mssql-tools:latest --command -- tail -f /dev/null
之后同样用kubectl exec -it mssql-tools -- bash进入容器操作。
内容的提问来源于stack exchange,提问作者Farrukh Waheed
相关产品推荐
相关产品推荐

