上云无忧 > 文档中心 > 腾讯云容器服务实战教程 - Nginx 升级最佳实践
容器服务 TKE
腾讯云容器服务实战教程 - Nginx 升级最佳实践

文档简介:
由于 Nginx Controller 各个版本支持的 Kubernetes 版本范围比较窄,所以用户会遇到 Nginx Controller 升级的相关问题。本文向您介绍通过新建实例实现过渡的方案,以帮助您顺利升级 Nginx Controller。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠
由于 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/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: prod-0-49-3
name: access
namespace: default
spec:
rules:
- host: www.exsample.com
http:
paths:
- backend:
serviceName: access-server
servicePort: 8080
path: /
pathType: ImplementationSpecific
status:
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/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: prod-1-1-3
name: access-new
namespace: default
spec:
rules:
- host: www.exsample.com
http:
paths:
- backend:
service:
name: access-server
port:
number: 8080
path: /
pathType: ImplementationSpecific
status:
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 实例
相似文档
  • 概述: Nginx Ingress Controller 基于 Nginx 实现 Kubernetes Ingress API。Nginx 是一款高性能网关,在实际生产环境运行时,需要对参数进行调优,以保证其充分发挥高性能的优势。在 TKE 上部署 Nginx Ingress 中的部署 YAML 已经包含 Nginx 部分性能方面的参数优化。本文将介绍针对 Nginx Ingress 全局配置与内核参数调优的方法及其原理,让 Nginx Ingress 更好的适配高并发业务场景。
  • 操作场景: 容器服务 TKE 支持安装 Nginx-ingress 扩展组件,可通过 Nginx-ingress 接入 Ingress 流量。关于 Nginx-ingress 组件的更多介绍,请参见 Nginx-ingress 说明。本文将为您介绍 Nginx-ingress 组件常见最佳实践操作指引。
  • 操作场景: 腾讯云容器服务 TKE 暂不支持 Pod 限速,但可通过修改 CNI 插件来支持此功能。本文档介绍如何在 TKE 上实现对 Pod 的带宽限速,您可结合实际场景进行操作。
  • 概述: Kubernetes 在集群接入层设计并提供了 Service 及 Ingress 两种原生资源,分别负责四层和七层的网络接入层配置。传统方案是创建 Ingress 或 LoadBalancer 类型的 Service 来绑定腾讯云负载均衡,将服务对外暴露。此方式将用户流量负载至用户节点的 NodePort 上,再通过 KubeProxy 组件转发到容器网络中,此方案在业务性能和能力方面的支持会有所局限。
  • 概述: Kubernetes 官方提供了 NodePort 类型的 Service,即给所有节点开通一个相同端口用于暴露该 Service。大多云上负载均衡 (Cloud Load Balancer,CLB) 类型 Service 的传统实现也都是基于 NodePort,即 CLB 后端绑定各节点的 NodePort,CLB 接收外界流量,转发到其中一个节点的 NodePort 上,再通过 Kubernetes 内部的负载均衡,使用 iptables 或 ipvs 转发到 Pod。示意图如下:
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部