【摘要】在KubeSphere中两个“小姐姐”如何来回切换。
一、前言
二、概述
三、KubeSphere的微服务治理功能
流量治理
-
金丝雀发布提供灵活的灰度策略,将流量按照所配置的比例转发至当前不同的灰度版本 -
蓝绿部署支持零宕机部署,让应用程序可以在独立的环境中测试新版本的功能和特性 -
流量镜像模拟生产环境,将实时流量的副本发送给被镜像的服务 -
熔断机制支持为服务设置对单个主机的调用限制
在KubeSphere中应用治理可以以可插拔式方式开启。开启后如下:
四、准备工作
创建一个SpringBoot的项目用于测试,如下pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pkulaw</groupId>
<artifactId>ServiceA</artifactId>
<version>1.0-SNAPSHOT</version>
<name>ServiceA</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 引入Actuator监控依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.0</version>
</dependency>
</dependencies>
<build>
<finalName>ServiceA</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
controller代码:
@RestController
@Slf4j
public class CommonController {
/**
* 返回A/B小姐姐图片
* @param response
* @throws IOException
*/
@RequestMapping(method = RequestMethod.GET, produces = "image/jpeg")
public void getImage2(HttpServletResponse response) throws IOException {
ClassPathResource classPathResource = new ClassPathResource("images/B.jpg");
InputStream inputStream = classPathResource.getInputStream();
//将InputStream 转 File
File file = asFile(inputStream);
FileCopyUtils.copy(new FileInputStream(file), response.getOutputStream());
response.setHeader("Content-Type", "application/octet-stream");
}
/**
* InputStream To File
* @param in
* @return
* @throws IOException
*/
public static File asFile(InputStream in) throws IOException {
File tempFile = File.createTempFile("test", ".tmp");
tempFile.deleteOnExit();
FileOutputStream out = new FileOutputStream(tempFile);
IOUtils.copy(in, out);
return tempFile;
}
}
注:直接通过接口返回一张图片。
项目目录结构如下:
五、镜像构建
上面图片来自KubeSphere镜像构建官方介绍。
3.3.0版本中就长下面这个样子:harbor中新建项目
创建镜像构建器
gitlab仓库秘钥和harbor镜像服务提前设置好。镜像名称为service-a/service-a,镜像标签设置为v1。
创建成功后,开始运行
构建成功如上所示。
harbor中查看v1标签的镜像
以上就是v1版本由来的整个过程,我们简称为A小姐姐。
接下来制作B小姐姐,新建一个代码分支为release,调整代码返回为B小姐姐。
构建v2版本的镜像,也就是我们的B小姐姐。
六、项目网关
KubeSphere 项目中的网关是一个 NGINX Ingress 控制器。KubeSphere 内置的用于 HTTP 负载均衡的机制称为应用路由(Ingress路由规则),它定义了从外部到集群服务的连接规则。如需允许从外部访问服务,用户可创建路由资源来定义 URI 路径、后端服务名称等信息。
KubeSphere 除了提供项目范围的网关外,还提供集群范围的网关,使得所有项目都能共享全局网关。
在 KubeSphere 中开启项目网关以从外部访问服务和路由。
七、自制应用
KubeSphere支持基于模板的应用和自制应用。基于模板的应用创建自 KubeSphere 应用商店或应用模板,自制应用由用户自定义。这里我们以自制应用为例。
创建自制应用创建服务选择无状态服务
容器端口为ServiceA服务的端口7777
在这里添加路由规则后,KubeSphere会自动帮我们创建ingress路由规则。
创建成功后如下:
应用路由下会自动生成ingress路由规则,如下:
配置本地hosts,如:192.168.0.156 servicea.com点击访问服务,立即返回A小姐姐。
以上图片来自百度,侵权可删。
八、金丝雀发布
创建金丝雀发布任务
可以指定流量进行分配,也可以指定请求参数
创建成功,查看任务状态
默认v1和v2各占50%流量。
请求服务来查看流量走向,v1和v2各占50%流量
以上图片来自百度,侵权可删。
拖动滑块设置发送给v1版本的流量比例和发送给v2版本的流量比例。
九、总结
· END ·
如果这篇文章对您有帮助或者有所启发的话,请帮忙三连暴击点赞、转发和在看。您的支持是我坚持更新的最大动力。
原文始发于微信公众号(架构至美):在KubeSphere中两个“小姐姐”如何来回切换
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/42504.html