如何使用二维码实现网页跳转?
2026/1/16 15:57:47
# 启动初始服务版本 docker compose up -d --scale web=4 # 更新镜像并执行滚动更新(逐步替换) docker compose pull web docker compose up -d --scale web=4 --force-recreate上述命令首先拉取最新镜像,然后强制重新创建容器,Docker 会逐个停止旧容器并启动新容器,实现滚动更新效果。| 策略类型 | 描述 | 适用场景 |
|---|---|---|
| 滚动更新(Rolling Update) | 逐步替换旧实例 | 高可用要求的服务 |
| 蓝绿部署(Blue-Green) | 切换流量至全新环境 | 需零停机发布的系统 |
| 金丝雀发布(Canary) | 小范围验证后全量 | 关键业务上线前测试 |
kubectl rollout status deployment/my-app --watch=true该命令持续监听 Deployment 的状态变更事件,当 Pod 成功就绪并替换旧版本实例时,输出“successfully rolled out”提示。参数 `--watch=true` 启用长连接监听,确保状态更新无延迟。kubectl rollout history deployment/my-app该命令输出包含 REVISION、CHANGE-CAUSE 和 DATE 信息,便于识别每次变更的上下文。kubectl rollout undo deployment/my-app如需回滚至特定版本,可指定 --to-revision 参数:kubectl rollout undo deployment/my-app --to-revision=2其中,--to-revision=2表示恢复到第 2 版本的配置状态,适用于精准修复场景。apiVersion: argoproj.io/v1alpha1 kind: Rollout spec: strategy: canary: steps: - setWeight: 20 - pause: {} # 暂停部署,等待人工验证或自动化检查上述配置在流量切流至20%后自动暂停,确保新版本稳定性得到验证后再继续发布。该机制显著降低生产环境故障风险,适用于金融交易、医疗系统等高可用场景。kubectl rollout resume deployment/myapp -n default该命令会解除 Deployment 的暂停状态,控制器将继续执行剩余的滚动更新步骤。`myapp` 为部署名称,`-n` 指定命名空间。kubectl rollout undo deployment/my-app该命令将 Deploymentmy-app恢复至上一个版本。若需指定特定版本,可使用:kubectl rollout undo deployment/my-app --to-revision=2其中--to-revision参数指向历史记录中的特定修订号,可通过kubectl rollout history查看。kubectl rollout pause deployment/my-app # 暂停部署以进行灰度验证 kubectl set image deployment/my-app app=my-registry/app:v2 # 更新镜像 kubectl rollout resume deployment/my-app # 恢复发布,触发滚动更新 kubectl rollout status deployment/my-app # 监控发布状态上述命令序列确保新版本在暂停期间完成预热和健康检查,避免直接暴露不稳定性。rollout status实时反馈部署进度,便于判断是否继续rollout undo可快速回退至上一稳定版本,保障服务连续性strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 30 periodSeconds: 10上述配置确保每次仅更新一个实例,且在健康检查通过前不移除旧实例。periodSeconds 设为 10 表示每 10 秒执行一次探测,避免误判导致级联重启。| 指标类型 | 阈值条件 | 响应动作 |
|---|---|---|
| 错误率 | >5% | 暂停更新 |
| 延迟 P95 | >2s | 告警并记录 |
apiVersion: networking.istio.io/v1beta1 kind: VirtualService spec: http: - route: - destination: host: my-service subset: v1 weight: 90 - destination: host: my-service subset: v2 weight: 10该配置将 10% 的请求导向新版本(v2),其余 90% 仍由稳定版本(v1)处理。随着观察指标正常,可逐步递增 v2 权重。livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 30 periodSeconds: 10 failureThreshold: 3上述配置表示:容器启动后等待30秒开始探测,每10秒发起一次HTTP请求,连续3次失败则触发重启。该策略有效避免因短暂加载延迟导致的误判。matchLabels或matchExpressions筛选目标Pod。例如:selector: matchLabels: app: frontend release: canary该配置确保仅同时具备app=frontend与release=canary标签的Pod被纳入更新范围。# 触发 Deployment 滚动更新 kubectl rollout restart deployment/my-app # 查看 rollout 状态 kubectl rollout status deployment/my-app # 失败时自动回滚 kubectl rollout undo deployment/my-app上述命令可通过 Shell 或 Python 脚本封装,结合 CI/CD 流水线实现无人值守发布。`rollout restart` 强制重建 Pod,适用于配置变更无镜像更新场景;`status` 提供阻塞式状态监听,确保后续步骤按序执行。apiVersion: apps/v1 kind: Deployment metadata: name: app-v2 labels: app: myapp version: v2 spec: replicas: 3 selector: matchLabels: app: myapp version: v2 template: metadata: labels: app: myapp version: v2 spec: containers: - name: app image: myapp:v2上述配置定义了新版本工作负载,配合 Service 的 label selector 可实现快速切换。v2 部署就绪后,仅需更新 Service 的 selector 指向version: v2,即可完成蓝绿发布。apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: frontend-prod spec: project: default source: repoURL: https://git.example.com/apps.git targetRevision: HEAD path: apps/frontend/production # 指向环境特定的 Kustomize 目录 destination: server: https://k8s-prod-cluster namespace: frontend syncPolicy: automated: prune: true selfHeal: true| 部署策略 | 适用场景 | 平均部署耗时 |
|---|---|---|
| 蓝绿部署 | 核心支付系统 | 4.2 分钟 |
| 金丝雀发布 | 用户端功能迭代 | 6.8 分钟 |
| 滚动更新 | 内部服务升级 | 3.1 分钟 |
部署流水线示意图
Code Commit → CI Build → Security Scan → Staging Deploy → Canary Test → Production Rollout