Commit e9f0b5f2 authored by joliu's avatar joliu Committed by Gitee

Merge branch 'merge_2020_06_16' of gitee.com:prowo_admin/bishe into newWeiXing

parents 23da4682 cc21f268
Pipeline #101 failed with stages
This diff is collapsed.
# 项目描述
基于边缘计算场景的计算和网络融合平台
基于Docker和Open vSwitch开发,可用于构建分布式边缘计算、网络环境仿真等场景。
## 功能概览
* 网络编排
* 网络自动变形
* 函数化寻址
* 逻辑拓扑规划
* 计算资源管理
* 容器动态扩缩容
* 容器计算和网络应用快速构建
## 开发人员简介
* 谢建斌
* 王一鸣
......
......@@ -36,7 +36,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<version>3.2.3</version>
<executions>
<execution>
<phase>package</phase>
......
......@@ -9,5 +9,6 @@ public class ClientProperties {
private String zookeeperUrl = "zookeeper://127.0.0.1:2181";
private String cloudUrl = "127.0.0.1:9300";
private String appName = "default";
}
......@@ -2,10 +2,10 @@ server:
port: 9091
zookeeper:
url: 127.0.0.1:2181
url: 192.168.31.156:2181
bs:
cloudcenter:
name: my-bs-cloud-center
ipservice:
url: 127.0.0.1:23333
\ No newline at end of file
url: 192.168.31.156:23333
\ No newline at end of file
......@@ -11,6 +11,7 @@ import lombok.Data;
public class ContainerDescription {
private String mode;
private int replicas;
// dockerContainer模板
private DockerContainer dockerContainer;
......
......@@ -14,6 +14,8 @@ mybatis:
map-underscore-to-camel-case: true
mapper-locations: classpath:mapping/*.xml
debug: false
#边缘节点的端口
server:
port: 8081
......@@ -22,7 +24,7 @@ bs:
name: my-bs-cloud-center
edgenode:
name: random
ip-prefix: 192
ip-prefix: 192.168.31
ipservice:
ip: 192.168.31.238:23333
sdn-controller:
......
bishe.app.app-name=joliu
bishe.app.cloud-url=127.0.0.1:9091
bishe.app.cloud-url=192.168.31.156:9090
spring.influx.url=http://192.168.0.108:8086
spring.influx.user=admin
......
......@@ -32,7 +32,7 @@ public class BisheMultiNodeTests {
@Test
public void testInFluxDB() {
Point.Builder builder = Point.measurement("monitor");
Point.Builder builder = Point.measurement("monitor");//这是检测功能
System.out.println(System.currentTimeMillis());
builder
.addField("rate", 1221f)
......@@ -60,6 +60,7 @@ public class BisheMultiNodeTests {
container.setName("APP1");
container.setCommand("sh");
container.setImage("joliu/networktest");
//container.setImage("dfs_transfer_client");
containerDescription.setDockerContainer(container);
List<ContainerDescription> cds = new ArrayList<>();
......
package top.ninwoo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import top.ninwoo.bishe.starter.entity.ContainerMonitor;
import top.ninwoo.bishe.starter.service.ClusterService;
import top.ninwoo.bishe.starter.service.NetworkService;
import top.ninwoo.client.BisheTestMain;
import top.ninwoo.common.entity.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = BisheTestMain.class)
public class YmwangDbcTests {
/*分散计算业务的测试*/
@Autowired
private ClusterService clusterService;
@Resource
private NetworkService networkService;
@Test
public void testSendSeparateConfig() {
ArrayList<SeparatedClusterConfig> clusterConfigs = new ArrayList<>();
SeparatedClusterConfig separatedClusterConfig = new SeparatedClusterConfig();
// TODO: 这个ID应该是从借口获取的
separatedClusterConfig.setEdgeNodeId("192.168.31.198:8881"); //边缘节点IP+端口号
ClusterConfig clusterConfigCom = new ClusterConfig();
clusterConfigCom.setId(11113l);
clusterConfigCom.setOwner("joliu");
List<ContainerDescription> cds = new ArrayList<>();
/*通过镜像"ymwang/dfs_transfer_client"启动一个名为client的容器,来作为文件的收发端(图片的切割、合并)*/
ContainerDescription containerDescriptionClient = new ContainerDescription();
containerDescriptionClient.setMode("normal");
containerDescriptionClient.setReplicas(1);
DockerContainer container = new DockerContainer();
container.setName("dbc_client");//创建一个client容器
container.setCommand("bash");
container.setImage("dbc_client");
container.setPorts("8999");//指定容器端口
containerDescriptionClient.setDockerContainer(container);
cds.add(containerDescriptionClient);//将client容器添加到list集合中
/*通过镜像"ymwang/dfs_transfer_server"启动一个名为server1的容器,用于存储图片切片*/
ContainerDescription containerDescriptionServer1 = new ContainerDescription();
containerDescriptionServer1.setMode("normal");
containerDescriptionServer1.setReplicas(20);
DockerContainer containerServer1 = new DockerContainer();
containerServer1.setName("dbc_server");//创建一个server1容器
containerServer1.setCommand("sh");
containerServer1.setImage("dbc_server");
containerDescriptionServer1.setDockerContainer(containerServer1);
cds.add(containerDescriptionServer1);//将server1容器添加到list集合中
clusterConfigCom.setDockers(cds);
NetworkTopology topo = new NetworkTopology();
//topo.setAppNames(new String[]{"Run", "APP", "br:ovs1"});
topo.setAppNames(new String[]{"dbc_client", "dbc_server", "br:ovs1"});
// 这个参数好像没啥用
topo.setTopologyId(11);
topo.setTopology(new int[][]{{0,0,0},{0,0,0},{1,1,0}});
clusterConfigCom.setTopology(topo);
separatedClusterConfig.setClusterConfig(clusterConfigCom);
clusterConfigs.add(separatedClusterConfig);
clusterService.sendClusterConfigToEdgeNode(clusterConfigs);
}
//测试容器ip
@Test
public void getIpListByAppNameTest() {
List<String> ipList = networkService.getIpListByAppName(11113L, "dbc_server");
System.out.println(ipList);
}
@Test
public void getIpList() {
List<String> ipListS = networkService.getIpListByAppName(11113L, "dbc_server");
String[] ipList = new String[ipListS.size()];
for (int i = 0; i < ipListS.size(); i++) {
if(!ipListS.isEmpty()){
String ip_tmp = ipListS.get(i);
String[] split_list = ip_tmp.split("/");
ipList[i] = split_list[0]+":8082";
}
}
for (int j = 0; j < ipList.length; j++) {
System.out.println(ipList[j]);
}
}
@Test
public void removeClusterFromEdgeNodeTest() {
clusterService.removeClusterFromEdgeNode(11113L);
}
@Test
public void getLogicalNetworkTopologyTest() {
NetworkTopology logicalNetworkTopology = networkService.getLogicalNetworkTopology(11113L);
System.out.println(logicalNetworkTopology);
}
@Test
public void enableNetworkMonitorTest() throws InterruptedException {
String res = networkService.enableNetworkMonitor(11112L, "server");
System.out.println(res);
}
@Test
public void cancelNetworkMonitorTest() {
String run = networkService.cancelNetworkMonitor(11112L, "server");
System.out.println(run);
}
@Test
public void getNetworkMonitorTest() throws InterruptedException {
List<ContainerMonitor> run = networkService.getContainerMonitors(11112L, "Run");
int i = 0;
while(i < 10) {
run.forEach(c -> {
System.out.println(c.getContainerInfo());
});
Thread.sleep(500);
i++;
}
}
}
package top.ninwoo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import top.ninwoo.bishe.starter.entity.ContainerMonitor;
import top.ninwoo.bishe.starter.service.ClusterService;
import top.ninwoo.bishe.starter.service.NetworkService;
import top.ninwoo.client.BisheTestMain;
import top.ninwoo.common.entity.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = BisheTestMain.class)
public class YmwangDfsTests {
@Autowired
private ClusterService clusterService;
@Resource
private NetworkService networkService;
@Test
public void testSendSeparateConfig() {
ArrayList<SeparatedClusterConfig> clusterConfigs = new ArrayList<>();
SeparatedClusterConfig separatedClusterConfig = new SeparatedClusterConfig();
// TODO: 这个ID应该是从借口获取的
separatedClusterConfig.setEdgeNodeId("192.168.31.198:8881");
ClusterConfig clusterConfigStore = new ClusterConfig();
clusterConfigStore.setId(11112l);
clusterConfigStore.setOwner("joliu");
List<ContainerDescription> cds = new ArrayList<>();
/*通过镜像"ymwang/dfs_transfer_client"启动一个名为client的容器,来作为文件的收发端(图片的切割、合并)*/
ContainerDescription containerDescriptionClient = new ContainerDescription();
containerDescriptionClient.setMode("normal");
containerDescriptionClient.setReplicas(1);
DockerContainer container = new DockerContainer();
container.setName("dfs_client");//创建一个client容器
container.setCommand("bash");
container.setImage("dfs_client");
container.setPorts("8099");//指定容器端口
containerDescriptionClient.setDockerContainer(container);
cds.add(containerDescriptionClient);//将client容器添加到list集合中
/*通过镜像"ymwang/dfs_transfer_server"启动一个名为server1的容器,用于存储图片切片*/
ContainerDescription containerDescriptionServer1 = new ContainerDescription();
containerDescriptionServer1.setMode("normal");
containerDescriptionServer1.setReplicas(20);
DockerContainer containerServer1 = new DockerContainer();
containerServer1.setName("dfs_server");//创建一个server1容器
containerServer1.setCommand("sh");
containerServer1.setImage("dfs_server");
containerDescriptionServer1.setDockerContainer(containerServer1);
cds.add(containerDescriptionServer1);//将server1容器添加到list集合中
clusterConfigStore.setDockers(cds);
NetworkTopology topo = new NetworkTopology();
//topo.setAppNames(new String[]{"Run", "APP", "br:ovs1"});
topo.setAppNames(new String[]{"dfs_client", "dfs_server", "br:ovs1"});
// 这个参数好像没啥用
topo.setTopologyId(11);
topo.setTopology(new int[][]{{0,0,0},{0,0,0},{1,1,0}});
clusterConfigStore.setTopology(topo);
separatedClusterConfig.setClusterConfig(clusterConfigStore);
clusterConfigs.add(separatedClusterConfig);
clusterService.sendClusterConfigToEdgeNode(clusterConfigs);
}
//测试容器ip
@Test
public void getIpListByAppNameTest() {
List<String> ipList = networkService.getIpListByAppName(11112L, "dfs_server");
System.out.println(ipList);
}
@Test
public void getIpList() {
List<String> ipListS = networkService.getIpListByAppName(11112L, "dfs_server");
String[] ipList = new String[ipListS.size()];
for (int i = 0; i < ipListS.size(); i++) {
if(!ipListS.isEmpty()){
String ip_tmp = ipListS.get(i);
String[] split_list = ip_tmp.split("/");
ipList[i] = split_list[0];
}
}
for (int j = 0; j < ipList.length; j++) {
System.out.println(ipList[j]);
}
}
@Test
public void removeClusterFromEdgeNodeTest() {
clusterService.removeClusterFromEdgeNode(11112L);
}
@Test
public void getLogicalNetworkTopologyTest() {
NetworkTopology logicalNetworkTopology = networkService.getLogicalNetworkTopology(11112L);
System.out.println(logicalNetworkTopology);
}
@Test
public void enableNetworkMonitorTest() throws InterruptedException {
String res = networkService.enableNetworkMonitor(11112L, "dfs_server");
System.out.println(res);
}
@Test
public void cancelNetworkMonitorTest() {
String run = networkService.cancelNetworkMonitor(11112L, "dfs_server");
System.out.println(run);
}
@Test
public void getNetworkMonitorTest() throws InterruptedException {
List<ContainerMonitor> run = networkService.getContainerMonitors(11112L, "Run");
int i = 0;
while(i < 10) {
run.forEach(c -> {
System.out.println(c.getContainerInfo());
});
Thread.sleep(500);
i++;
}
}
}
......@@ -64,7 +64,7 @@ public class DockerServiceImpl implements DockerService, InitializingBean {
/**
* 使用系统命令 docker run -itd 在后台启动一个容器,
* 使用这种方式的一个重要愿意,是因为我没搞明白docker java启动容器的api到底如何使用
* 使用这种方式的一个重要原因,是因为我没搞明白docker java启动容器的api到底如何使用
* @param container 输入一个容器的描述信息
* @return 返回容器启动之后真实的描述信息
*/
......
......@@ -94,7 +94,13 @@ public class DockerUtilsImpl implements DockerUtils {
public DockerContainer runDocker(DockerContainer container) {
// TODO: 这里启动Docker容器,需要再研究port如何起作用
// TODO: 这里还需要处理name等属性为空的情况
String cmd = "docker run -itd --name " + container.getName() + " --privileged " + container.getImage() + " " + container.getCommand();
//String cmd = "docker run -itd --name " + container.getName() + " --privileged " + container.getImage() + " " + container.getCommand();
String cmd;
if(container.getPorts() == null){
cmd = "docker run -itd --name " + container.getName() + " --privileged " + container.getImage() + " " + container.getCommand();
}else{
cmd = "docker run -itd -p " + container.getPorts()+ ":" +container.getPorts()+ " " + "--name " + container.getName() + " --privileged " + container.getImage() + " " + container.getCommand();
}
String result = linuxCtlUtils.runCmd(cmd);
if(result.contains("Error")) {
......
......@@ -26,7 +26,7 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.2.RELEASE</version>
<version>2.2.1.RELEASE</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment