阅读此文之前建议先对基础有一些了解,如果没有看过的建议先看下《一文学会Kubernetes(K8S)集群操作管理——基于Rancher平台》 以下内容接文章上一章节: UI 上应用的灰度发布有两种方案: l 方案一 通过使用一个 service 管理多个不同 deployment 的方式完成应用的灰度发布。 l 方案二 假设当前线上环境我们已经有一套服务 myappv1 对外提供 7 层服务,此时我们修复了一些问题,需要灰度发布上线一个新的版本 myappv2,但是我们又不希望简单直接地将所有客户端流量切换到新版本 myappv2 中,而是希望仅仅切换 20% 的流量到新版本 myappv2 中,待运行一段时间稳定,将所有的流量切换到 myappv2 服务中后,再平滑地下线掉 myappv1 服务。 针对以上多种不同的应用发布需求,K8S Ingress Controller 支持了多种流量切分方式:基于 Request Header 的流量切分,适用于灰度发布以及 AB 测试场景 基于 Cookie 的流量切分,适用于灰度发布以及 AB 测试场景基于 Query Param 的流量切分,适用于灰度发布以及 AB 测试场景基于服务权重的流量切分,适用于蓝绿发布场景 以下测试基于服务权重的流量切分,也可以将 nginx.ingress.kubernetes/canary-weight: "30" 改为基于 header 的流量切分。 canary 参数说明: github/kubernetes/ingress-nginx/blob/nginx-0.21.0/docs/user-guide/nginx-configuration/annotations.md l 创建 v1 版本的应用选择“集群 -> 项目 -> 资源 -> 工作负载”,选择部署应用。 l 添加 DNS 记录选择“集群 -> 项目 -> 资源 -> 工作负载 -> 服务发现”,选择添加 DNS 记录。 工作负载添加 DNS 记录: 访问服务,可以看到 v1 版本标识: l 创建 v2 版本的应用选择“集群 -> 项目 -> 资源 -> 工作负载”,选择部署应用。 l 使用之前创建的 service 管理新部署的 v2 应用 选择“集群 -> 项目 -> 资源 -> 工作负载 ->服务发现”,选择对应 service,升级。 添加一个工作负载,选择 v2 的应用 访问服务,可以看到流量被分往 v1,v2 两个版本,这种方式为通过简单的流量分发实现灰度发布。 l 创建 v1 版本的应用选择“集群 -> 项目 -> 资源 -> 工作负载”,选择部署应用。 l 添加 v1 的 ingress 规则 l 创建 v2 版本的应用选择“集群 -> 项目 -> 资源 -> 工作负载”,选择部署应用。 l 添加 v2 的 ingress 规则 点击标签,添加注释 nginx.ingress.kubernetes/canary: true nginx.ingress.kubernetes/canary-weight: 30 保存后,访问服务地址,可以看到 v2 的流量大约为 30% 通过访问存储管理页面我们可以查看添加的存储类(StorageClass)和已添加的持久卷(PV),同时我们也可以创建、添加、编辑和删除相关的存储类和持久卷。 以应用项目使用 NAS 存储示例,需要创建 provisioner 服务,在“集群-项目-工作负载”,点击导入 YAML 按钮进入导入 YAML 界面。复制以下 YAML 内容粘贴入框内,注意修改红色字段为实际参数,然后点击导入进行创建,确认服务正常启动 apiVersion: apps/v1 kind: Deployment metadata: name: nfs-client-provisioner #provisioner 的名称,修改为<存储类名-provisioner> namespace: nfs-client-provisioner labels: app: nfs-client-provisioner #provisioner 的名称,修改为<存储类名-provisioner> spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: nfs-client-provisioner #provisioner 的名称,修改为<存储类名-provisioner> template: metadata: labels: app: nfs-client-provisioner #provisioner 的名称,修改为<存储类名-provisioner> spec: serviceAccountName: nfs-client-provisioner containers: - name: nfs-client-provisioner image: quay/external_storage/nfs-client-provisioner:latest #需要替换为内部 nfs-client-provisioner 镜像 volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME value: nfs-client-provisioner #provisioner 的名称,后面设置的存储类使用的 provisioner 需 要和这个保持一致,设置为<存储类名-provisioner> - name: NFS_SERVER value: 192.168.0.1 #NFS 服务器地址,和 volumes 中保持一致 - name: NFS_PATH value: /nfs/data #NFS 服务器目录,和 volumes 中保持一致 volumes: - name: nfs-client-root nfs: server: 192.168.0.1 #NFS 服务器地址,需要修改为具体项目使用的 NFS 服务器地址 path: /nfs/data #NFS 服务器目录,需要修改为具体项目使用的 NFS 服务器目录 确认 provisioner 服务创建完成运行正常: 具体操作说明如下: 存储管理是集群层面的,选择“集群 -> 存储” 选择“集群 -> 存储 -> 存储类”,可以看到已添加的存储类列表。 可以通过搜索查询对应存储类: 选择“集群 -> 存储 -> 存储类”,点击添加类: 填写存储相关参数,这里以 NFS 为示例,填写存储类(SC)的名称和提供者(提供者名称为每一个应用各自部署的 provisioner 服务的名称),需要下拉选择 custom,然后将提供者名称填写入填写框中,然后选中提供者(Custom)一行: 保存添加: 选择“集群 -> 存储 -> 存储类”,选择需要编辑的存储类,选择编辑: 修改相应参数后,选择保存: 选择“集群 -> 存储 -> 存储类”,选择需要编辑的存储类,选择删除: 具体操作说明如下: 存储管理是集群层面的,选择“集群 -> 存储” 选择“集群 -> 存储 -> 持久卷”,可以查看已创建的持久卷: 如果持久卷数量太多,可以通过持久卷名称或者存储类名称来过滤查询: 选择“集群 -> 存储 -> 持久卷”,选择添加卷: 填写相关持久卷参数: 如果想实现动态地创建 PV,可以在自定义中选择已创建的自考证书存储类: 7.1. 设置通知 7.2. 配置告警 7.3. 通知发送的消息实例 |
|
来自: 新用户0175WbuX > 《待分类》