You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过K8s DNS地址执行测试Pod中的Python CLI代码?

如何通过K8s DNS地址执行Pod中的test.py脚本

首先需要明确你的test.py类型,不同类型对应不同的实现方式:

场景1:test.py是Web服务接口(如Flask/FastAPI编写)

如果test.py本身是监听端口的Web服务,需要先完善现有配置,确保Service能正确转发流量到容器的Web服务:

  1. 完善容器端口配置
    在Deployment的容器定义中添加端口映射,让targetPort: test-api对应容器实际监听的端口:

    containers:
    - name: test-api
      image: test-image
      ports:
      - containerPort: 8080
        name: test-api # 和Service的targetPort名称匹配
    
  2. 确保容器启动时运行Web服务
    可以通过Dockerfile添加启动命令:

    # 在dockerfile.test末尾添加
    CMD ["python3", "test.py"]
    

    或直接在Deployment的容器中指定command:

    containers:
    - name: test-api
      image: test-image
      command: ["python3", "test.py"]
      ports:
      - containerPort: 8080
        name: test-api
    
  3. 触发脚本执行
    配置完成后,直接访问K8s DNS地址http://test-api.test-system.svc.cluster.local:8080(如果脚本有特定接口路径,比如/run,则访问http://test-api.test-system.svc.cluster.local:8080/run)即可触发test.py中的Web接口逻辑。

场景2:test.py是普通脚本(无Web服务,仅需执行逻辑)

这种情况下,K8s Service的DNS地址无法直接触发脚本执行(Service仅转发端口流量,普通脚本不监听端口),可以通过以下方式实现:

方法1:在集群内Pod中远程执行脚本

  1. 启动临时调试Pod,进入交互模式:
    kubectl run tmp-debug-pod --image=python:3.9 -n test-system --rm -it -- bash
    
  2. 在临时Pod中,通过kubectl直接执行目标Pod内的脚本:
    # 获取test标签对应的Pod名称
    POD_NAME=$(kubectl get pods -n test-system -l app=test -o jsonpath='{.items[0].metadata.name}')
    # 执行脚本
    kubectl exec -n test-system $POD_NAME -- python3 /test/test.py
    

方法2:将普通脚本改造为可HTTP触发的Web接口

给test.py添加轻量Web框架支持,使其能通过HTTP请求触发执行:

  1. 修改requirements.txt,添加Flask依赖:
    flask
    
  2. 修改test.py,添加Web接口逻辑:
    from flask import Flask
    app = Flask(__name__)
    
    def your_original_script_logic():
        # 这里写原来test.py的业务逻辑
        return "脚本执行完成"
    
    @app.route('/run', methods=['GET'])
    def run_script():
        result = your_original_script_logic()
        return result
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=8080)
    
  3. 按照场景1的步骤完善Deployment和Service配置,之后访问http://test-api.test-system.svc.cluster.local:8080/run即可触发脚本执行。

方法3:用Job资源按需执行脚本

如果不需要通过DNS触发,仅需按需执行脚本,可以创建K8s Job资源:

apiVersion: batch/v1
kind: Job
metadata:
  name: run-test-script
  namespace: test-system
spec:
  template:
    spec:
      containers:
      - name: test-script-runner
        image: test-image
        command: ["python3", "/test/test.py"]
      restartPolicy: OnFailure

执行以下命令触发脚本:

kubectl apply -f job.yaml

内容的提问来源于stack exchange,提问作者ccd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 01:23:39