dujian e38478533d 流水线优化 1 tydzień temu
..
__alone 0f1487fe7a 流水线修改 2 tygodni temu
_shared e38478533d 流水线优化 1 tydzień temu
dining 1963fbbee9 流水线优化 1 tydzień temu
docker 2f17282acd 流水线优化 1 tydzień temu
gateway e38478533d 流水线优化 1 tydzień temu
job 1963fbbee9 流水线优化 1 tydzień temu
k8s 194b36cb45 only commit 2 tygodni temu
lawyer 1963fbbee9 流水线优化 1 tydzień temu
promote-image e38478533d 流水线优化 1 tydzień temu
second 1963fbbee9 流水线优化 1 tydzień temu
store 1963fbbee9 流水线优化 1 tydzień temu
store-platform 1963fbbee9 流水线优化 1 tydzień temu
whole e38478533d 流水线优化 1 tydzień temu
README-ACK-GRAY-RELEASE.md 710500b5f6 "username": "robot$alien_cloud" 2 tygodni temu
README-HARBOR-SETUP.md a262220989 流水线优化 - 最后推送到Harbor 制品库 2 tygodni temu
README-JOB-GATEWAY.md a262220989 流水线优化 - 最后推送到Harbor 制品库 2 tygodni temu
README-JOB-WHOLE.md a262220989 流水线优化 - 最后推送到Harbor 制品库 2 tygodni temu
README-PROMOTE-IMAGE.md a262220989 流水线优化 - 最后推送到Harbor 制品库 2 tygodni temu
README.md 5715122d7f Harbor 宿主机 2 tygodni temu

README-ACK-GRAY-RELEASE.md

alien-ack-cluster 使用说明与灰度发?

集群?*alien-ack-cluster**(ACK 托管版,Kubernetes v1.26.2)。节点池 default-nodepool 当前 3 节点(截图中状态为 Unknown 时须先修复,否则 Pod 无法调度)?

Harbor?*39.106.135.88**(与 Jenkins 构建机同区域/VPC 为佳,避免跨公网拉镜像超时)?


一、上线前检查清?

1. 节点状态为 Ready

控制台节点为 Unknown 时,在任意能访问 API 的机器执行:

kubectl get nodes -o wide
kubectl describe node <节点?

常见原因?

现象 处理
NotReady + 超时 节点安全组未放行 6443?*10250**;节点与 API Server 网络不?
Kubelet 未启? SSH ?ECS,systemctl status kubelet
磁盘/内存压力 df -hfree -h,清理镜像或扩容
容器运行? 节点?containerd 1.6.20,勿混用 docker ?containerd 配置

修复后应显示 Ready,且 kubectl get pods -n kube-system ?CoreDNS、kube-proxy 正常(控制台「集群巡检」曾提示 CoreDNS 异常时优先处理)?

2. 本地 kubectl 接入 ACK

  1. 控制??alien-ack-cluster ?连接信息 ?复制 公网/内网 kubeconfig(内?Jenkins 用内网地址)?
  2. 保存为文件,例如 ~/.kube/config-ack-alien?
  3. Jenkins 凭据类型 Secret file,ID ?ack-kubeconfig-alien?
  4. 流水线中:withCredentials([file(credentialsId: 'ack-kubeconfig-alien', variable: 'KUBECONFIG')]) { sh 'kubectl get ns' }?

3. Harbor ?ACK 拉镜?

  1. Harbor 项目 alien 设为 私有,创?**机器人账?*(push + pull)?
  2. ACK 命名空间创建 imagePullSecret(见 k8s/examples/secret-harbor.example.yaml)?
  3. ?Deployment spec.template.spec.imagePullSecrets 引用?Secret?
  4. ?每台节点 或仅依赖 K8S Secret:推荐只?imagePullSecrets,无需节点 docker login?
  5. ?Jenkins 机构建用的基础镜像 my-openjdk8-ffmpeg:v1 推送到 Harbor,例如:
    docker tag my-openjdk8-ffmpeg:v1 39.106.135.88/alien_cloud/base/openjdk8-ffmpeg:v1
    docker push 39.106.135.88/alien_cloud/base/openjdk8-ffmpeg:v1

二、推?K8S 资源模型

Namespace: alien-produ
├── Deployment/gateway          (stable, 副本?N)
├── Deployment/gateway-canary   (灰度, 副本?1~2,仅 canary 策略时更?
├── Service/gateway             ?stable Pod
├── Service/gateway-canary      ?canary Pod
├── Ingress/alien-gateway       ?主路?+ Nginx 灰度注解
└── ConfigMap/Secret              ?bootstrap、Jasypt(勿把明文密码提?Git?

Java 微服务端口与现网 compose 一致(gateway 8000,store 50014,…),见?deployment-*.yaml?

配置中心:ACK ?Nacos 若仍?39.106.135.88 上的实例,须?Pod 环境变量?bootstrap-prod.yml 中写 可达?K8S Service 地址?SLB,不能写 Docker 容器?nacos(除?Nacos 也迁进同一集群)?


三、灰度发布(推荐:Nginx Ingress 金丝雀?

ACK 控制??应用 ?Ingress 需已安?Nginx Ingress Controller(应用市场「Nginx Ingress Controller」或「ALB Ingress」;下文?Nginx Ingress 注解 为例,与仓库示例一致)?

原理

flowchart LR
  User[客户端] --> Ing[Ingress alien-gateway]
  Ing -->|权重 90%| SvcStable[Service gateway]
  Ing -->|权重 10%| SvcCanary[Service gateway-canary]
  SvcStable --> DepStable[Deployment gateway]
  SvcCanary --> DepCanary[Deployment gateway-canary]
  • stable:当前线上版本,副本数较多?
  • canary:新版本,副本数少?
  • Ingress 通过注解 canary + canary-weight 按百分比分流?

操作步骤(与 Jenkins 参数联动?

  1. 首次kubectl apply -f k8s/examples/namespace.yaml
  2. 首次kubectl apply -f k8s/examples/deployment-gateway.yaml(及 stable Service?
  3. 首次kubectl apply -f k8s/examples/deployment-gateway-canary.yaml + service-gateway-canary.yaml
  4. 首次kubectl apply -f k8s/examples/ingress-gateway-canary.example.yaml(改 host、TLS?
  5. Jenkins 构建新镜?39.106.135.88/alien_cloud/gateway:build-42
  6. Job ?DEPLOY_STRATEGY=canary?*CANARY_WEIGHT=10**?
    • 仅更?gateway-canary Deployment 镜像
    • ?Ingress 注解 canary-weight 设为 10
  7. 观察监控与错误率后,逐步提高 20 ?50 ?100
  8. 全量:将 stable Deployment 镜像改为新版本,canary-weight ?0 或删?canary Deployment,避免长期双?

示例注解(完整见 ingress-gateway-canary.example.yaml):

metadata:
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "10"

?RollingUpdate 的区?

方式 K8S 内置 RollingUpdate Ingress 灰度(本方案?
流量 ?Pod 替换,旧?Pod 逐渐减少 新旧版本 同时 接流量,可调比例
回滚 kubectl rollout undo ?canary-weight 设为 0 或回?canary Deployment
Jenkins DEPLOY_STRATEGY=rolling DEPLOY_STRATEGY=canary

四、三节点节点池容量建?

当前?25 ?/ 45Gi 集群总量(控制台资源监控)? ?Java 服务若各 2 副本 + 灰度 1 副本,峰?Pod 数约 7×3=21,需控制?Pod request(示?manifest ?512Mi/250m),避免 Pending?

调度建议?

  • 无状态服务:podAntiAffinity 尽量 spread ?3 台(示例 deployment 已含软反亲和?
  • gateway ?2 副本 + HPA(需 metrics-server;控制台若提?APIService metrics.k8s.io 不可用,先装 metrics-server 再开 HPA?
  • job、定时任务类?1 副本

五、从 Docker Compose 迁到 ACK 的映?

Compose?9.105.153.68 produ? ACK
gateway-produ 容器 Deployment gateway
卷挂?jar 镜像内打?jar(本流水?Dockerfile?
common-network-produ ClusterIP Service + Ingress
环境变量 Jasypt Secret alien-jasypt ?ACK 配置?
支付证书目录 Secret volume alien-pay-cert-store ?

迁移动作顺序建议?*gateway ?store ?其余**;每迁一个服务,Ingress 切一?path 或子域名,保?compose 回滚路径直至稳定?


六、阿里云 ACK 控制台常用入?

目标 路径
工作负载 / Deployment 集群 ?工作负载 ?无状?
灰度 / Ingress 集群 ?网络 ?Ingress
镜像拉取失败事件 工作负载 ?Pod ?事件
日志 工作负载 ?Pod ?日志;或接入 SLS
节点池扩? 节点管理 ?default-nodepool ?扩容

七、与 Jenkins produ 流水线联?

  1. 手工 kubectl apply 示例 manifest 一次?
  2. 跑?gateway-k8s Job(rolling,权?100% 等价全量)?
  3. 再跑 canary + CANARY_WEIGHT=5 验证流量分裂?
  4. 其余 6 个服务复?gateway ?Ingress/Deployment 命名模式?

问题排查:kubectl describe pod -n alien-produkubectl logs -n alien-produ deploy/gateway-canary?