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

Google Cloud Kubernetes集群Pod未更新问题求助

问题排查与解决方案

核心原因分析

你的问题本质是Kubernetes未触发Pod滚动更新,即便你更新了index.html并重新构建镜像,仍无法看到页面变化,根源在于:

  1. 始终使用固定镜像标签1.0,Deployment的Pod模板配置未发生变化,kubectl apply不会触发更新
  2. 手动执行kubectl rollout restart deploy app后,可能存在镜像拉取失败或浏览器缓存未清除的问题

具体修复步骤

1. 改用动态唯一镜像标签

每次CI构建使用唯一标签(如Git Commit哈希、CI流水线ID),让Deployment检测到Pod模板变化,自动触发滚动更新。

修改.gitlab-ci.yml的构建阶段:

stages:
  - build
  - deploy_gcp

build_images: 
  stage: build
  image: docker:20.10.16

  services:
    - docker:20.10.16-dind
  
  variables:
    DOCKER_TLS_CERTDIR: "/certs"
  
  before_script:
    - docker login -u $REGISTRY_USER -p $REGISTRY_PASS 

  script:
    # 用Git短哈希作为镜像标签,确保每次构建唯一
    - IMAGE_TAG=$CI_COMMIT_SHORT_HASH
    - docker build -t guirms/app-cicd-dio:$IMAGE_TAG app/.
    - docker push guirms/app-cicd-dio:$IMAGE_TAG
    # 将标签传递给部署阶段
    - echo "IMAGE_TAG=$IMAGE_TAG" >> deploy.env
  artifacts:
    reports:
      dotenv: deploy.env

deploy_gcp: 
  stage: deploy_gcp
  needs: [build_images]

  before_script:
    - chmod 400 $SSH_KEY  
    
  script:
    - ssh -o StrictHostKeyChecking=no -i $SSH_KEY gcp@$SSH_SERVER "sudo rm -Rf ./ci-cd-kubernetes/ && sudo git clone https://gitlab.com/guirms/ci-cd-kubernetes.git && cd ci-cd-kubernetes && sudo chmod +x ./script.sh && ./script.sh $IMAGE_TAG"

修改script.sh动态替换镜像标签:

#!/bin/bash

IMAGE_TAG=$1
# 替换deployment.yml中的固定标签为动态标签
sed -i "s/girms\/app-cicd-dio:1.0/girms\/app-cicd-dio:$IMAGE_TAG/" deployment.yml
kubectl apply -f deployment.yml

2. 验证镜像拉取与Pod状态

执行以下命令确认Pod是否成功更新:

# 查看Deployment滚动更新进度
kubectl rollout status deploy app

# 检查Pod使用的镜像版本
kubectl get pods -o jsonpath='{.items[*].spec.containers[*].image}'

# 查看Pod日志排查启动问题
kubectl logs <目标Pod名称>

3. 清除缓存影响

  • 浏览器缓存:强制刷新页面(Windows/Linux:Ctrl+F5,Mac:Cmd+Shift+R)
  • Apache服务端缓存:修改Dockerfile添加禁用缓存配置:
    FROM httpd:latest
    
    WORKDIR /usr/local/apache2/htdocs/
    
    COPY index.html /usr/local/apache2/htdocs/
    # 添加禁用缓存的Apache配置
    RUN echo "Header set Cache-Control 'no-cache, no-store, must-revalidate'" >> /usr/local/apache2/conf/httpd.conf
    RUN echo "Header set Pragma 'no-cache'" >> /usr/local/apache2/conf/httpd.conf
    RUN echo "Header set Expires '0'" >> /usr/local/apache2/conf/httpd.conf
    
    EXPOSE 80
    

4. 确认rollout restart生效(临时方案)

若暂时不想修改标签策略,执行kubectl rollout restart deploy app后,检查Pod是否重建:

# 按创建时间排序查看Pod,确认是否有新Pod启动
kubectl get pods --sort-by=.metadata.creationTimestamp

若Pod未重建,执行kubectl describe deploy app查看事件日志,排查配置错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:55:05