分享

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

 新用户0175WbuX 2022-02-16

阅读此文之前建议先对基础有一些了解,如果没有看过的建议先看下《一文学会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 版本的应用选择“集群 -> 项目 -> 资源 -> 工作负载”,选择部署应用。

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

l 添加 DNS 记录选择“集群 -> 项目 -> 资源 -> 工作负载 -> 服务发现”,选择添加 DNS 记录。

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

工作负载添加 DNS 记录:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

访问服务,可以看到 v1 版本标识:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

l 创建 v2 版本的应用选择“集群 -> 项目 -> 资源 -> 工作负载”,选择部署应用。

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

l 使用之前创建的 service 管理新部署的 v2 应用

选择“集群 -> 项目 -> 资源 -> 工作负载 ->服务发现”,选择对应 service,升级。

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

添加一个工作负载,选择 v2 的应用

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

访问服务,可以看到流量被分往 v1,v2 两个版本,这种方式为通过简单的流量分发实现灰度发布。

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

l 创建 v1 版本的应用选择“集群 -> 项目 -> 资源 -> 工作负载”,选择部署应用。

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

l 添加 v1 的 ingress 规则

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

l 创建 v2 版本的应用选择“集群 -> 项目 -> 资源 -> 工作负载”,选择部署应用。

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

l 添加 v2 的 ingress 规则

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

点击标签,添加注释

nginx.ingress.kubernetes/canary: true nginx.ingress.kubernetes/canary-weight: 30

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

保存后,访问服务地址,可以看到 v2 的流量大约为 30%

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

通过访问存储管理页面我们可以查看添加的存储类(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 服务创建完成运行正常:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

具体操作说明如下:

存储管理是集群层面的,选择“集群 -> 存储”

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

选择“集群 -> 存储 -> 存储类”,可以看到已添加的存储类列表。

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

可以通过搜索查询对应存储类:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

选择“集群 -> 存储 -> 存储类”,点击添加类:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

填写存储相关参数,这里以 NFS 为示例,填写存储类(SC)的名称和提供者(提供者名称为每一个应用各自部署的 provisioner 服务的名称),需要下拉选择 custom,然后将提供者名称填写入填写框中,然后选中提供者(Custom)一行:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

保存添加:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

选择“集群 -> 存储 -> 存储类”,选择需要编辑的存储类,选择编辑:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

修改相应参数后,选择保存:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

选择“集群 -> 存储 -> 存储类”,选择需要编辑的存储类,选择删除:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

具体操作说明如下:

存储管理是集群层面的,选择“集群 -> 存储”

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

选择“集群 -> 存储 -> 持久卷”,可以查看已创建的持久卷:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

如果持久卷数量太多,可以通过持久卷名称或者存储类名称来过滤查询:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

选择“集群 -> 存储 -> 持久卷”,选择添加卷:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

填写相关持久卷参数:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

如果想实现动态地创建 PV,可以在自定义中选择已创建的自考证书存储类:

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

一文学会Kubernetes(K8S)集群操作管理—灰度发布及存储管理

7.1. 设置通知

7.2. 配置告警

7.3. 通知发送的消息实例

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多