添加API网关后Okteto服务反复重启失败求助
问题描述
使用Okteto部署项目服务,此前运行正常,添加api-gateway后,其中一个服务出现反复重启后失败的情况。
main-flow.yaml
name: Build and deliver containers on: push jobs: customerservice: runs-on: ubuntu-latest name: Java 17 build, test, deliver customer-service container steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: 17 cache: maven distribution: adopt - name: Build, test and package project working-directory: customer-service run: mvn package -DskipTests - name: Docker login run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }} - name: Docker Build run: docker build -t ${{ secrets.DOCKER_USER }}/customer-service:latest ./customer-service - name: Upload container to Docker Hub with Push run: docker push ${{ secrets.DOCKER_USER }}/customer-service:latest taxiservice: runs-on: ubuntu-latest name: Java 17 build, test, deliver taxi-service container steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: 17 cache: maven distribution: adopt - name: Build, test and package project working-directory: taxi-service run: mvn package -DskipTests - name: Docker login run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }} - name: Docker Build run: docker build -t ${{ secrets.DOCKER_USER }}/taxi-service:latest ./taxi-service - name: Upload container to Docker Hub with Push run: docker push ${{ secrets.DOCKER_USER }}/taxi-service:latest tripservice: runs-on: ubuntu-latest name: Java 17 build, test, deliver trip-service container steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: 17 cache: maven distribution: adopt - name: Build, test and package project working-directory: trip-service run: mvn package -DskipTests - name: Docker login run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }} - name: Docker Build run: docker build -t ${{ secrets.DOCKER_USER }}/trip-service:latest ./trip-service - name: Upload container to Docker Hub with Push run: docker push ${{ secrets.DOCKER_USER }}/trip-service:latest apigateway: runs-on: ubuntu-latest name: Java 17 build, test, deliver ede-api-gateway container steps: - name: Check out repository uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: 17 cache: maven distribution: adopt - name: Build, test and package project working-directory: ./api-gateway run: mvn package -DskipTests - name: Docker login run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }} - name: Docker Build run: docker build -t ${{ secrets.DOCKER_USER }}/ede-project-api-gateway:latest ./api-gateway - name: Upload container to Docker Hub with Push run: docker push ${{ secrets.DOCKER_USER }}/ede-project-api-gateway:latest
docker-compose.yaml
services: mongo-customers: image: mongo:latest ports: - 27017:27017 volumes: - mongodb_customer_data:/data/db mysql-trip: image: mysql:latest ports: - 3306:3306 volumes: - mysql_trip_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: trippassword mysql-taxi: image: mysql:latest ports: - 3307:3306 volumes: - mysql_taxi_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: taxipassword customer-service: depends_on: - mongo-customers image: compacte/customer-service ports: - 8081:8081 links: - mongo-customers environment: MONGODB_PORT: 27017 MONGODB_HOST: mongo-customers taxi-service: depends_on: - mysql-taxi image: compacte/taxi-service ports: - 8082:8082 links: - mysql-taxi environment: MYSQL_DB_USERNAME: root MYSQL_DB_PASSWORD: taxipassword MYSQL_DB_HOST: mysql-taxi MYSQL_DB_PORT: 3307 trip-service: depends_on: - taxi-service - customer-service image: compacte/trip-service ports: - 8083:8083 links: - taxi-service - customer-service environment: CUSTOMER_SERVICE_BASEURL: customer-service:8081 TAXI_INFO_SERVICE_BASEURL: taxi-service:8082 MYSQL_DB_USERNAME: root MYSQL_DB_PASSWORD: trippassword MYSQL_DB_HOST: mysql-trip MYSQL_DB_PORT: 3306 api-gateway: depends_on: - taxi-service - trip-service image: compacte/ede-project-api-gateway ports: - 8084:8084 links: - taxi-service - trip-service environment: TAXI_SERVICE_BASEURL: taxi-service:8082 TRIP_SERVICE_BASEURL: trip-service:8083 volumes: mongodb_customer_data: mysql_taxi_data: mysql_trip_data:
排查建议
- 优先查看服务日志:执行
okteto logs <失败服务名>或在Okteto控制台查看具体报错信息,比如数据库连接超时、服务调用失败、内存不足等,这是最快定位问题的方式。 - 验证依赖服务就绪状态:
depends_on仅保证容器启动顺序,不确保服务可用。例如trip-service依赖的taxi-service可能在MySQL未完成初始化时就启动,导致连接失败。可以给数据库和服务添加健康检查:mysql-taxi: # 原有配置 healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 taxi-service: depends_on: mysql-taxi: condition: service_healthy - 检查资源配额:Okteto存在资源限制,新增api-gateway后可能导致总内存/CPU超出配额,触发OOM杀死服务。前往Okteto控制台查看资源使用情况,可给各服务添加资源限制:
taxi-service: # 原有配置 resources: requests: memory: "256Mi" cpu: "100m" limits: memory: "512Mi" cpu: "500m" - 核对API网关配置:检查api-gateway的路由规则是否正确,是否存在循环调用或错误转发导致目标服务负载过高。查看api-gateway日志,确认它能正常连接到taxi-service和trip-service。
- 校验环境变量:确认失败服务的环境变量配置,比如trip-service的MySQL端口为容器内部的3306(而非宿主机端口),当前配置看起来正确,但可再次核对。
内容的提问来源于stack exchange,提问作者Seppe
相关产品推荐
相关产品推荐

