基于MSE实现K8s集群内多服务的灰度发布

简介: MSE 云原生网关是阿里云推出的下一代网关,您可以在 MSE 上通过 Ingress 资源来配置不同的转发规则,从而根据不同的规则设置,来注册集群内不同的服务,以及实现多服务的灰度发布。

基于MSE实现K8s集群内多服务的灰度发布


1. 创建资源

1、在体验实验室页面左侧,单击创建资源,创建所需资源(本场景默认会提供一个ACK集群)。

2、在页面左侧导航栏中,单击云产品资源列表,查看本次实验资源相关信息。

说明 :

资源创建过程需要10分钟左右(需要创建一个K8s集群,感谢您的耐心等待~)。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:K8s集群ID、IP地址、用户名和密码等。

2. ACK部署微服务

本实验中通过浏览器发起测试请求,请求访问到MSE云原生网关(MSE Ingress Controller)的入口地址,网关会根据你配置的路由策略再将请求转发到Kubernates集群上部署Demo服务的Pod,所以现在需要ACK(托管版的Kubernates集群)部署我们的Demo服务。

1. 双击打开虚拟桌面的Firefox ESR浏览器,在RAM用户登录框中单击下一步,复制云产品资源列表中子用户密码,按CTRL+V把密码粘贴到密码输区,登录子账户(后续在远程桌面里的粘贴操作均使用CTRL + V快捷键)。

2. 复制容器服务控制台地址,在FireFox浏览器打开新页签,粘贴并访问容器服务控制台。

https://cs.console.aliyun.com/#/k8s/cluster/list

3. 在集群列表页面,根据集群ID找到具体ACK集群(需记忆下集群名称,后续操作将用到),单击详情。

4. 进入详情页面,在集群信息页选择点击集群资源,找到安全组信息。

5. 点开安全组右侧ID连接,在打开的安全组规则页,点击手动添加填写如下优先级1、协议类型全部、端口范围-1/-1、授权对象0.0.0.0/0保存。这里是设置安全组规则允许网关访问(因为演示直接设置了0.0.0.0/0)。

6. 切回容器服务的详情页面,在左侧栏展开工作负载,选择点击无状态Tab。

7. 复制以下yaml内容(v1版本的Demo),再点击当前页面点击使用YAML创建资源,清空模版将内容粘贴进去,点击创建

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-httpbin-v1
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: go-httpbin
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: go-httpbin
        version: v1
    spec:
      containers:
        - args:
            - '--version=v1'
          image: 'registry.cn-hangzhou.aliyuncs.com/mse-ingress/httpbin:v1'
          imagePullPolicy: Always
          name: go-httpbin
---
apiVersion: v1
kind: Service
metadata:
  name: go-httpbin-v1
spec:
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
  selector:
    app: go-httpbin
    version: v1

8. 确认创建成功后,再次点击无状态,即可查看到已经部署的版本v1的Demo服务(pod带有version=v1标签)。

9. 同样操作我们再复制以下yaml内容部署v2版本的Demo(pod带有version=v2标签)。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-httpbin-v2
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: go-httpbin
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: go-httpbin
        version: v2
    spec:
      containers:
        - args:
            - '--version=v2'
          image: 'registry.cn-hangzhou.aliyuncs.com/mse-ingress/httpbin:v1'
          imagePullPolicy: Always
          name: go-httpbin
---
apiVersion: v1
kind: Service
metadata:
  name: go-httpbin-v2
spec:
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
  selector:
    app: go-httpbin
    version: v2

10. 检查所有必要的资源是否就绪,Deployment和Service资源如下:

至此,我们完成了所有需要的Demo无状态和服务资源的创建工作,接下来我们就可以开始配置Ingress资源了。

3. ACK安装MSE Ingress Controller

在容器服务中安装MSE Ingress Controller组件来管理云原生网关,并通过MSE Ingress来暴露集群中的容器服务,这一步我们来安装Controller。

在当前容器集群详情页中,点击运维管理->组件管理

2. 点击网络Tab页,找到MSE-Ingress-Controller,点击安装。

至此我们完成了MSE Ingress Controller组件的安装工作。

4. 通过Yaml配置创建MSE云原生网关

  1. 复制以下配置文,用于部署名称为test的Deployment。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
   name: test
spec:
   name: mse-ingress
   common:
      pay:
         payType: POSTPAY
      instance:
         spec: 2c4g
         replicas: 1
      network:
         publicSLBSpec: slb.s1.small
      securityGroupType: normal
   global:
     deleteSLB: true
  1. 切换到工作负载-自定义资源页面点击使用YAML创建资源,在打开的页面粘贴上面复制的内容,点击创建

创建完成后,按下图切换到资源对象浏览器,API组中找到mse.alibabacloud.com下的MseIngressConfig资源,左侧列表操作栏点击YAML编辑确认当状态显示为Listening时(这个过程较慢,可能需要3到5分钟,可以尝试过几分钟查看),表示云原生网关创建成功并且处于运行状态。并自动监听集群中IngressClass为mse的Ingress资源。

  1. 页面切到网络-路由页面,创建并应用以下Ingress资源:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  namespace: default
spec:
  ingressClassName: mse
  rules:
  - http:
      paths:
      - backend:
          service:
            name: go-httpbin-v1
            port:
              number: 80
        path: /version
        pathType: Prefix

  1. 查看目标Ingress的IP地址

  1. 复制上述端点信息再拼接“/version”,如下114.55.xx.xx/version进行访问测试。

  1. 至此我们完成了Ingress资源的配置,并成功验证从公网访问到go-httpbin-v1服务响应返回如上图展示。

5. 修改Ingress配置生效灰度

基于客户端请求的流量切分场景,假设当前线上环境,您已经有一套服务go-httpbin-v1对外提供7层服务,此时上线了一些新的特性,需要发布上线一个新的版本go-httpbin-v2。但又不想直接替换go-httpbin-v1服务,而是希望将请求头中包含version=v2的客户端请求转发到go-httpbin-v2服务中。

页面切到网络-路由页面,再新增一个canary-v2的路由资源。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: canary-v2
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/canary: 'true'
    nginx.ingress.kubernetes.io/canary-by-header: version
    nginx.ingress.kubernetes.io/canary-by-header-value: 'v2'
spec:
  ingressClassName: mse
  rules:
  - http:
      paths:
      - backend:
          service:
            name: go-httpbin-v2
            port:
              number: 80
        path: /version
        pathType: ImplementationSpecific

  1. 使用本地电脑打开终端程序(linux/macOS打开终端,windows打开安装有curl命令的CMD或者本地安装有支持header设置的HTTP请求工具,如PostMan)执行以下命令,请求头中满足version=v2的客户端请求访问服务。

2.1 通过终端测试

curl -H "version: v2" 'http://120.55.xx.xx/version'

预期请求头满足version=v2的请求如下返回:

预期没有特殊请求头的请求如下正常返回:

2.2 通过PostMan测试,请求头带有header version=v2 将访问灰度服务go-httpbin-v2。

预期没有特殊请求头的请求将会访问正式服务go-httpbin-v1

至此我们已经掌握了基于MSE云原生网关在ACK上的Ingress场景灰度,更多灰度方式场景可以参考https://help.aliyun.com/document_detail/200941.html

实验链接https://developer.aliyun.com/adc/scenario/2bc3a435654448b5a7d27d2bcb2bc646

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
288 1
|
2月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
256 89
|
7月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
291 9
|
7月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
9月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
879 33
|
9月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
513 19
|
9月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
8月前
|
消息中间件 运维 Java
搭建Zookeeper、Kafka集群
本文详细介绍了Zookeeper和Kafka集群的搭建过程,涵盖系统环境配置、IP设置、主机名设定、防火墙与Selinux关闭、JDK安装等基础步骤。随后深入讲解了Zookeeper集群的安装与配置,包括数据目录创建、节点信息设置、SASL认证配置及服务启动管理。接着描述了Kafka集群的安装,涉及配置文件修改、安全认证设置、生产消费认证以及服务启停操作。最后通过创建Topic、发送与查看消息等测试验证集群功能。全网可搜《小陈运维》获取更多信息。
724 1
|
9月前
|
存储 人工智能 物联网
ACK Gateway with AI Extension:大模型推理的模型灰度实践
本文介绍了如何使用 ACK Gateway with AI Extension 组件在云原生环境中实现大语言模型(LLM)推理服务的灰度发布和流量分发。该组件专为 LLM 推理场景设计,支持四层/七层流量路由,并提供基于模型服务器负载感知的智能负载均衡能力。通过自定义资源(CRD),如 InferencePool 和 InferenceModel,可以灵活配置推理服务的流量策略,包括模型灰度发布和流量镜像。
|
9月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
326 0
OpenAI故障复盘丨如何保障大规模K8s集群稳定性

相关产品

  • 微服务引擎
  • 推荐镜像

    更多