容器服务 Nginx 升级最佳实践

由于 Nginx Controller 各个版本支持的 Kubernetes 版本范围比较窄,所以用户会遇到 Nginx Controller 升级的相关问题。这篇向你介绍通过新建实例实现过渡的方案,以帮助你顺利升级 Nginx Controller。

相关产品
容器服务 产品页,含版本规格、价格与购买入口。

一、集群与 Nginx 实例相关信息

·当前 Kubernetes 集群版本:1.20

·当前 Nginx Addon 版本:1.2.0(Nginx Addon 是 Nginx Controller 的安装工具,你可以在插件列表查看该插件与版本)

·当前 Nginx Controller 版本:v0.49.3(Nginx Controller 是实际运行的社区组件,你可以在 Nginx Controller 的工作负载中查询到镜像版本)

·当前 Nginx Ingress Class:prod-0-49-3

注意:说明:

注意:集群如果升级到 1.22,有许多旧版本的社区 CRD 定义被废弃,Nginx Controller 版本低于v1.0.0将无法正常工作。所以大部分用户在这个集群版本升级时,需要对 Nginx Controller 进行升级。

二、安装新版本 Nginx Controller 实例

参考 Nginx 的安装文档,安装v1.1.3版本的 Nginx,同时建议开启日志、监控。假定文档中的新实例 Ingress Class 为 prod-1-1-3 安装新版本 Nginx Controller 实例之后。参考原实例配置,调整 Workload 规格或 HPA,避免新实例出现容量问题。

三、迁移 Ingress 资源

将所有旧 Nginx Controller 相关资源复制到新实例中。
这里以其中一个 Ingress 资源为例,说明迁移过程:

apiVersion: extensions/v1beta1kind: Ingressmetadata: annotations: kubernetes.io/ingress.class: prod-0-49-3 name: access namespace: defaultspec: rules: – host: www.exsample.com http: paths: – backend: serviceName: access-server servicePort: 8080 path: / pathType: ImplementationSpecificstatus: loadBalancer: ingress: – ip: 172.17.99.37

迁移注意事项:

1. 请保留原有 Ingress 不变,复制一个新的 Ingress 实例。请确保实例名称不能出现冲突。

2. 注意将新实例的 “kubernetes.io/ingress.class” 修改为 prod-1-1-3。

3. 请注意从 Kubernetes 1.22 版本开始,“apiVersion: extensions/v1beta1”已被删除。升级到 Nginx 版本1.1.3的同时,请将资源升级到 “apiVersion: networking.k8s.io/v1”。

4. 请注意,extensions/v1beta1 和 networking.k8s.io/v1 在 backend 内的字段格式有变化,你需要做出一定的调整。

5. 在将资源添加到集群后,Nginx Controller 会自动更新 status 的内容并提供新的 IP 地址。

apiVersion: networking.k8s.io/v1kind: Ingressmetadata: annotations: kubernetes.io/ingress.class: prod-1-1-3 name: access-new namespace: defaultspec: rules: – host: www.exsample.com http: paths: – backend: service: name: access-server port: number: 8080 path: / pathType: ImplementationSpecificstatus: loadBalancer: ingress: – ip: 172.17.22.11

四、测试、流量切换与回滚方案

1. 在本地通过 Host 绑定进行测试:

172.17.22.11 www.exsample.com

2. 测试通过之后,你可以更新 DNS 解析至新的 IP,以验证新的入口访问是否正常。

3. 如果在更新 DNS 解析配置后发现数据面流量异常,你可以通过回滚 DNS 解析配置的方式,将域名解析切换至旧实例,以恢复正常的流量。

4. 直到流量切换操作之前,在新旧版本并行存在的期间,旧版本的 Nginx Ingress 实例不会有任何变更。新实例的创建和测试都不会受到影响,这是一个相对安全可控的升级方案。

五、清理资源

在全部流量迁移至新实例之后,你可以按照以下步骤进行清理:

1. 可以先清理旧 Nginx Ingress 实例相关的 Ingress 资源。

2. 在控制台中销毁 Nginx Ingress 实例。

六、相关文档

安装 Nginx-ingress 实例

赞 (0)
上一篇 4天前
下一篇 4天前