Istio实现Kubernetes集群应用金丝雀部署

2024-03-08 17:10

本文主要是介绍Istio实现Kubernetes集群应用金丝雀部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Istio实现Kubernetes集群应用金丝雀部署

Istio 是一个开源的服务网格(Service Mesh)平台,它提供了一种连接、保护、控制和观察微服务的方式。作为服务网格,Istio 在应用程序的不同服务之间提供网络代理,这些代理统称为“sidecars”。这些 sidecars 可以控制进出服务的所有通信,而不需要对服务的代码进行任何更改。Istio 主要利用了 Envoy Proxy 来拦截网络通信,并且提供了一系列的网络功能,如动态服务发现、负载均衡、TLS终止、HTTP/2 & gRPC 支持、断路器、健康检查、基于百分比的流量分流以及延迟注入用于故障恢复等。

金丝雀部署

金丝雀部署(Canary Release)是一种软件发布策略,用于减少新版本引入问题的风险,通过逐步替换旧版本来实现软件的滚动更新。在金丝雀部署中,新版本(金丝雀版本)首先被部署到生产环境的一个小部分用户或服务器上。这使得团队能够观察新版本在实际生产条件下的表现,而不会影响到所有用户。

如果新版本运行良好,没有发现重大问题,它将逐步推送给更多的用户,最终替换掉旧版本。如果在金丝雀阶段出现问题,新版本可以快速回滚,从而最小化对用户的影响。

1. Istio安装

Istio安装是相对比较简单,这也是为什么Istio在Kubernetes社区如此受欢迎的原因。如果是纯安装测试,推荐您按照“Istio教程(一)—安装 Istio”方式安装一个demo版本的Istio服务。
Istio官网安装方式
Istio教程(一)—安装 Istio

2. default名字空间设置“sidecars”代理

kubectl label namespace default istio-injection=enabled

istio-injection=enabled:将标签 istio-injection 设置为值 enabled。Istio 的变更准入 Webhook 使用这个标签来决定是否向在这个命名空间中创建的 Pod 中注入 Envoy 边车(sidecars)代理。

3. 创建Deployment

分别创建两个Deployment,分别使用镜像“harbor.example.com/library/version-test:v1”和“harbor.example.com/library/version-test:v2”(镜像下载地址),其中有关version.html的页面访问获得的效果是不同的。请注意为每个Deployment创建的label。

apiVersion: apps/v1
kind: Deployment
metadata:name: appv1labels:app: v1
spec:replicas: 1selector:matchLabels:app: v1apply: canarytemplate:metadata:labels:app: v1apply: canaryspec:containers:- name: nginximage: harbor.example.com/library/version-test:v1imagePullPolicy: IfNotPresentports:- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:name: appv2labels:app: v2
spec:replicas: 1selector:matchLabels:app: v2apply: canarytemplate:metadata:labels:app: v2apply: canaryspec:containers:- name: nginximage: harbor.example.com/library/version-test:v2imagePullPolicy: IfNotPresentports:- containerPort: 80

4. 创建Service

将标签包含“canary”的容器的流量代理出来。

apiVersion: v1
kind: Service
metadata:name: canarylabels:apply: canary
spec:selector:apply: canaryports:- protocol: TCPport: 80targetPort: 80

5. 创建Gateway资源

在Istio中,Gateway 是一个配置资源,它定义了在服务网格的边缘作为入口点的规范。这些规范允许你控制从外部网络到你的网格中的服务的流量。简而言之,Gateway资源是网格中对流量进行管理和入口控制的关键组件。接下来我们会创建一个“ingressgateway”资源对象。

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:name: canary-gateway
spec:selector:istio: ingressgatewayservers:- port:number: 80name: httpprotocol: HTTPhosts:- "*"

5. 创建DestinationRule和VirtualService资源

在Istio服务网格中,DestinationRuleVirtualService 是定义路由和服务级特性的关键自定义资源。这两种资源协同工作,允许你控制服务之间的流量行为。

VirtualService

VirtualService 用于定义服务的路由规则。它告诉网格流量如何根据指定的匹配条件从一个服务转发到另一个服务。这些路由规则可以基于请求的属性(如HTTP headers、URI等)来匹配流量,并将其重定向或分发到一个或多个服务。

例如,你可以使用 VirtualService 来实现以下功能:

  • 将请求路由到不同版本的服务(用于金丝雀部署或蓝绿部署)。
  • 重写请求路径或重定向请求到另一个地址。
  • 为不同的请求路径配置重试、超时和熔断策略。
  • 对特定的服务调用应用访问控制策略。
DestinationRule

DestinationRule 定义了对于指向特定目标的流量,可以应用哪些策略。这些规则可以包括负载平衡配置、TLS设置、熔断器参数、和子集声明等。

子集是 DestinationRule 的一个关键概念,它允许你为同一个目标服务的不同版本定义策略。这样做可以让 VirtualService 的路由规则将流量定向到这些不同的子集。

以下是一些使用 DestinationRule 的场景:

  • 配置服务之间的mTLS通信。
  • 定义服务的负载均衡策略,比如轮询或最少连接数等。
  • 设置熔断策略来防止故障在服务间蔓延。
  • 通过子集来路由到服务的不同版本。
如何一起工作

VirtualServiceDestinationRule 通常结合使用来实现复杂的路由逻辑。VirtualService 处理流量的入口点和路由方向,而 DestinationRule 定义了流量到达目的地后的具体行为。

这是一个典型的工作流程:

  1. 一个外部请求到达 VirtualService 定义的入口点。
  2. 根据 VirtualService 的路由规则,流量被分配到适当的服务或服务的版本(可能是一个服务的特定子集)。
  3. 一旦选定了目标,DestinationRule 中定义的策略(如负载均衡、TLS等)就会应用于流量。

通过这种分离,VirtualService 提供了强大的路由能力,而 DestinationRule 提供了目标服务级别的控制,使得Istio的流量管理既灵活又强大。

创建资源,VirtualService中定义流量来自“canary-gateway”,同时定义两个“destination”不同的流量权重。DestinationRule中定义“subset: v1”, “subset: v2”,分别对应到两个不同的Deployment,通过标签选择器。

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:name: canary
spec:hosts:- "*"gateways:- canary-gatewayhttp:- route:- destination:host: canary.default.svc.cluster.localsubset: v1weight: 90- destination:host: canary.default.svc.cluster.localsubset: v2weight: 10
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:name: canary
spec:host: canary.default.svc.cluster.localsubsets:- name: v1labels:app: v1- name: v2labels:app: v2

6. 检验

查看“istio-ingressgateway”的端口地址。

kubectl get svc -n istio-system
NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                      AGE
istio-egressgateway    ClusterIP      10.233.9.96      <none>        80/TCP,443/TCP                                                               5d
istio-ingressgateway   LoadBalancer   10.233.187.217   <pending>     15021:32374/TCP,80:30131/TCP,443:31064/TCP,31400:31267/TCP,15443:31428/TCP   5d
istiod                 ClusterIP      10.233.73.11     <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP                                        5d

集群内任意机器执行如下命令

for i in `seq 1 100`; do curl <集群内任意机器ip地址>:30131/version.html;done > 1.txt

通过查看1.txt,v1标签和v2标签出现的频率在9:1。
在这里插入图片描述

这篇关于Istio实现Kubernetes集群应用金丝雀部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/787803

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推