虚机服务
创建BEC虚机服务
如下代码可以新建一个BEC虚机服务:
1 public void createBecVmService(BecClient client) {
2 // 系统盘信息
3 SystemVolumeConfig systemVolume = new SystemVolumeConfig();
4 // 系统盘类型
5 systemVolume.setVolumeType(DiskTypeEnum.SATA);
6 // 系统盘大小(单位G)
7 systemVolume.setSizeInGB(40);
8 // 系统盘名称
9 systemVolume.setName("system-disk-name");
10 // 数据盘列表
11 List<VolumeConfig> dataVolumeList = new ArrayList<VolumeConfig>();
12 VolumeConfig volumeConfig = new VolumeConfig();
13 // 数据盘类型
14 volumeConfig.setVolumeType(DiskTypeEnum.SATA);
15 // 数据盘大小(单位G)
16 volumeConfig.setSizeInGB(40);
17 // 数据盘名称
18 volumeConfig.setName("volume-name");
19 dataVolumeList.add(volumeConfig);
20
21 DeploymentInstance deploymentInstance = new DeploymentInstance();
22 // 节点ID,由“国家码-城市-运营商”的小写字母组成字符串。例如 cn-hangzhou-cm,其中国家码标准为ISO 3166-2,城市为拼音,运营商为中国移动cm/中国电信ct/中国联通un/三线ix/bgp。如果传regionId,则可以不传region、serviceProvider、city。, 必需
23 deploymentInstance.setRegionId("cn-nanning-cm");
24 // 指定网络类型,枚举值有classic(经典网络)或vpc(VPC网络)。详细参考 使用VPC网络注意事项, 必需
25 deploymentInstance.setNetworkType("vpc");
26 // 指定私有网络ID。只有网络类型为vpc时生效;如果networkType选用vpc网络, 若不指定vpcId时则使用默认私有网络和默认子网
27 deploymentInstance.setVpcId("vpcId");
28 // 指定私有网络的子网ID。只有网络类型为vpc时生效;如果networkType选用vpc网络, 若不指定subnetId时则会使用默认VPC的默认子网
29 deploymentInstance.setSubnetId("subnetId");
30 // 副本数,最小为1, 必需
31 deploymentInstance.setReplicas(1);
32 List<DeploymentInstance> deployInstances = new ArrayList<>();
33 deployInstances.add(deploymentInstance);
34
35 DnsConfig dnsConfig = new DnsConfig();
36 // DNS类型
37 dnsConfig.setDnsType(DnsTypeEnum.DEFAULT);
38 // DNS地址,多个DNS地址以逗号分隔
39 // dnsConfig.setDnsAddress("8.8.8.8");
40
41 KeyConfig keyConfig = new KeyConfig();
42 // 类型,bccKeyPair为选择的密钥对,password为选择的密码
43 keyConfig.setType("password");
44 // 虚机密码限制长度为8~32位字符,英文、数字和符号必须同时存在,符号仅限!@#$%^+*()
45 keyConfig.setAdminPass("xxx");
46
47 List<NetworkConfig> networkConfigList = new ArrayList<>();
48 NetworkConfig networkConfig = new NetworkConfig();
49 // 节点类型(SINGLE、TRIPLE,分别表示单线节点和三线节点)
50 networkConfig.setNodeType(NodeTypeEnum.TRIPLE);
51 List<NetworkConfig.Networks> networksList = new ArrayList<>();
52 NetworkConfig.Networks net1 = new NetworkConfig.Networks();
53 // 网卡类型 (INTERNAL_IP表示内网;单线节点使用PUBLIC_IP表示单线公网网卡;三线节点用TRIPLE_CT、TRIPLE_UN、TRIPLE_CM分别表示三线公网的电信、联通、移动)
54 net1.setNetType(NetTypeEnum.INTERNAL_IP);
55 // 网卡名称,内外网卡的名称不能重复;支持大小写字母,数字,"-_",必须以字母开头,长度3-16字符。
56 net1.setNetName("netName1");
57 networksList.add(net1);
58 NetworkConfig.Networks net2 = new NetworkConfig.Networks();
59 net2.setNetType(NetTypeEnum.PUBLIC_IP);
60 net2.setNetName("netName2");
61 networksList.add(net2);
62 // 网卡信息,包含Networks;用于设置对应的网卡名称。注意: 经典网络顺序固定为内+外,不可自定义;VPC网络可以自定义网卡顺序
63 networkConfig.setNetworksList(networksList);
64 networkConfigList.add(networkConfig);
65
66 // 指定私有网络的安全组ID。只适用于DeploymentInstance的网络类型(networkType)为vpc的实例。如果选用了vpc网络,但是没有指定安全组ID,BEC会创建并使用一个“出站方向端口全开”的默认的安全组。详情参考使用VPC网络注意事项
67 List<String> securityGroupIds = Arrays.asList("securityGroupId");
68
69 Tag tag = new Tag();
70 // 标签键
71 tag.setTagKey("tagKey");
72 // 标签值
73 tag.setTagValue("tagValue");
74 List<Tag> tags = Arrays.asList(tag);
75
76 CreateBecVmServiceRequest request = CreateBecVmServiceRequest.builder()
77 // 虚机服务名称(不传则使用随机名称), 非必需
78 .serviceName("serviceName")
79 // 虚机实例名称(不传则使用随机名称), 非必需
80 .vmName("vmName")
81 // 付费方式。postpay:后付费;prepay:预付费。缺省值为postpay, 非必需
82 .paymentMethod("postpay")
83 // 是否开通公网。true:开通;false:不开通。缺省为false, 非必需
84 .needPublicIp(true)
85 // 预付费套餐购买时长,非必需
86 // .reservation(reservation) // Reservation reservation = new Reservation(); reservation.setLength(1); reservation.setTimeUnit("month");
87 // 自动续费周期,系统将于资源到期前7/3/1/0天自动进行扣款续费,自动扣费时余额不足则顺延至下一次定时扣费,扣费时长与自动续费周期相等,不传则不自动续费,非必需
88 // .autoRenew(autoRenew) // AutoRenew autoRenew = new AutoRenew(); autoRenew.setLength(6); autoRenew.setTimeUnit("month");
89 // 公网带宽大小(-1时为最大值),单位Mbps,非必需
90 .bandwidth(100)
91 // 部署区域, 非必需
92 .deployInstances(deployInstances)
93 // DNS配置, 非必需
94 .dnsConfig(dnsConfig)
95 // CPU大小,必须大于1;用虚机模板可不填;随机分配策略必填, 非必需
96 .cpu(1)
97 // memory大小,必须大于1;用虚机模板可不填;随机分配策略必填, 非必需
98 .memory(1)
99 // 镜像ID(配合imageType使用; 用虚机模板可不填, 非必需
100 .imageId("imageId")
101 // 镜像类型(bec为公共镜像或bec自定义镜像,镜像ID可从获取BEC虚机镜像列表获取,bcc为bcc自定义镜像),缺省为bcc; 用虚机模板可不填, 非必需
102 .imageType("bec")
103 // 是否开通IPv6公网。true:开通;false:不开通。缺省为false, 非必需
104 .needIpv6PublicIp(false)
105 // 系统盘配置, 非必需
106 .systemVolume(systemVolume)
107 // 数据盘配置, 非必需
108 .dataVolumeList(dataVolumeList)
109 // 密码或密钥配置,详情参考密码和密钥配置注意事项, 非必需
110 .keyConfig(keyConfig)
111 // 是否需要内网。true:不需要;false:需要。缺省为false, 非必需
112 .disableIntranet(false)
113 // 是否需要网络初始化。true:不需要;false:需要。缺省为false, 非必需
114 .disableCloudInit(false)
115 // 网卡命名配置列表,包含NetworkConfig,缺省为默认命名。网卡命名参考:网卡命名注意事项, 非必需
116 .networkConfigList(networkConfigList)
117 // 指定私有网络的安全组ID。只适用于DeploymentInstance的网络类型(networkType)为vpc的实例。如果选用了vpc网络,但是没有指定安全组ID,BEC会创建并使用一个“出站方向端口全开”的默认的安全组。详情参考使用VPC网络注意事项, 非必需
118 .securityGroupIds(securityGroupIds)
119 // 设置本虚机组内的虚机的hostname(不传则使用随机名称)。批量创建时以hostname作为前缀加上序号后缀:name{-序号},序号按照数量从0递增,例如name-0,name-1。hostname仅支持小写字母、数字以及-特殊字符,必须以字母开头,长度2-64。, 非必需
120 .hostname("hostname")
121 // 使用虚机模板ID创建虚机(需要先通过控制台创建虚机模板,ID格式为tmpl-xxxxx),非必需
122 //.templateId("tmpl-xxxxxx")
123 // 部署集ID列表,目前只支持数量为1,非必需
124 .deploysetIdList(Collections.singletonList("deploysetId"))
125 // 自定义注入的数据,以如下的方式编码: base64(user_injected_data: base64(原文))。注意:user_injected_data冒号后+1个空格+base64字符串。, 非必需
126 .userData("dXNlcl9pbmplY3RlZF9kYXRhOiBhR1ZzYkc4PQ==")
127 // CUDA 版本。linux或windows平台,三位版本号;只适用于创建异构计算GPU实例,开启自定义驱动安装时必填;注意:CUDA、Driver、cuDNN需要满足依赖关系,非必需
128 //.cudaVersion("cudaVersion") // String cudaVersion = "cudaVersion";
129 // GPU驱动 版本。linux或windows平台;只适用于创建异构计算GPU实例,开启自定义驱动安装时必填;注意:CUDA、Driver、cuDNN需要满足依赖关系,非必需
130 //.driverVersion("driverVersion")
131 // cuDNN 版本。linux或windows平台,三位版本号;只适用于创建异构计算GPU实例,开启自定义驱动安装时必填 ;注意:CUDA、Driver、cuDNN需要满足依赖关系,非必需
132 //.cudnnVersion("cudnnVersion")
133 // 标签信息,非必需
134 .tags(tags)
135 .build();
136
137 CreateBecVmServiceResponse response = client.createBecVmService(request);
138}
创建独占盘注意事项
独占盘仅支持数据盘,需要开通独占盘相关白名单才能创建,有相关需要请联系BEC商务。独占盘有SSD和HDD独占盘两种,volumeType为HDD_PASSTHROUGH和SSD_PASSTHROUGH。volumeType和passthroughCode为必填,相关参数可通过获取独占盘接口获取。
密码和密钥配置注意事项
目前虚机登录支持密码和密钥两种方式,密码和密钥需要二选一。
密码长度范围为8~32位字符,由英文、数字和符号组成,符号仅限!@#$%^+*()。
密钥目前仅支持BCC密钥,要使用密钥开启必须先在BCC的华北-北京区域创建密钥对。以下是使用密钥对的虚机服务,keyConfig的type填bccKeyPair,bccKeyPairIdList是bcc密钥对的keyId,可以通过BCC查询密钥对列表获取keyId。
1 KeyConfig keyConfig = new KeyConfig();
2 keyConfig.setType("bccKeyPair");
3 keyConfig.setBccKeyPairIdList(Arrays.asList("k-1MkI9Laa"));
4 request.setKeyConfig(keyConfig);
网卡命名注意事项
networkConfigList用于设定网卡名称、VPC内外网卡的顺序。
仅内网:
1 NetworkConfig networkConfig = new NetworkConfig();
2 networkConfig.setNodeType(NodeTypeEnum.SINGLE);
3 List<NetworkConfig.Networks> networksList = new ArrayList<>();
4 NetworkConfig.Networks net0 = new NetworkConfig.Networks();
5 net0.setNetType(NetTypeEnum.INTERNAL_IP);
6 net0.setNetName("name0");
7 networksList.add(net0);
内网+外网:
1 NetworkConfig networkConfig = new NetworkConfig();
2 networkConfig.setNodeType(NodeTypeEnum.SINGLE);
3 List<NetworkConfig.Networks> networksList = new ArrayList<>();
4 NetworkConfig.Networks net0 = new NetworkConfig.Networks();
5 net0.setNetType(NetTypeEnum.INTERNAL_IP);
6 net0.setNetName("name0");
7 networksList.add(net0);
8 NetworkConfig.Networks net1 = new NetworkConfig.Networks();
9 net1.setNetType(NetTypeEnum.PUBLIC_IP);
10 net1.setNetName("name1");
11 networksList.add(net1);
12 networkConfig.setNetworksList(networksList);
单线节点VPC网络多网卡,示例(内网+外网+内网+外网):单线节点的VPC网络,可以通过networkConfigList指定多网卡名和内外网的网卡顺序。
1 NetworkConfig networkConfig = new NetworkConfig();
2 networkConfig.setNodeType(NodeTypeEnum.SINGLE);
3 List<NetworkConfig.Networks> networksList = new ArrayList<>();
4 NetworkConfig.Networks net0 = new NetworkConfig.Networks();
5 net0.setNetType(NetTypeEnum.INTERNAL_IP);
6 net0.setNetName("name0");
7 networksList.add(net0);
8 NetworkConfig.Networks net1 = new NetworkConfig.Networks();
9 net1.setNetType(NetTypeEnum.PUBLIC_IP);
10 net1.setNetName("name1");
11 networksList.add(net1);
12 NetworkConfig.Networks net2 = new NetworkConfig.Networks();
13 net2.setNetType(NetTypeEnum.INTERNAL_IP);
14 net2.setNetName("name2");
15 networksList.add(net2);
16 NetworkConfig.Networks net3 = new NetworkConfig.Networks();
17 net3.setNetType(NetTypeEnum.PUBLIC_IP);
18 net3.setNetName("name3");
19 networksList.add(net3);
20 networkConfig.setNetworksList(networksList);
三线节点VPC网络,公网IP指定运营商:可以通过下面二选一参数来指定: 通过参数subServiceProviders直接指定,或者通过networkConfigList指定运营商并设置网卡名和网卡顺序。例如只支持运营商ct的示例:
1 DeploymentInstance deploymentInstance = new DeploymentInstance();
2 deploymentInstance.setRegionId("cn-baoding-ix");
3 deploymentInstance.setNetworkType("vpc");
4 deploymentInstance.setSubServiceProviders(Arrays.asList("ct"));
1 NetworkConfig networkConfig = new NetworkConfig();
2 networkConfig.setNodeType(NodeTypeEnum.TRIPLE);
3 List<NetworkConfig.Networks> networksList = new ArrayList<>();
4 NetworkConfig.Networks net0 = new NetworkConfig.Networks();
5 net0.setNetType(NetTypeEnum.INTERNAL_IP);
6 net0.setNetName("name0");
7 networksList.add(net0);
8 NetworkConfig.Networks net1 = new NetworkConfig.Networks();
9 net1.setNetType(NetTypeEnum.TRIPLE_CT);
10 net1.setNetName("name1");
11 networksList.add(net1);
12 networkConfig.setNetworksList(networksList);
使用VPC网络注意事项
VPC网络为内网VPC,分节点创建,不能跨节点指定VPC。需要显式指定网络类型networkType为vpc,经典网络为classic
vpc网络可以指定使用自定义已创建好的vpcId和subnetId; 如果没有指定vpcId和subnetId,系统会为每个节点创建并使用默认的私有网络和子网;默认私有网络CIDR为172.16.0.0/20,默认子网CIDR为172.16.0.0/24
指定安全组(securityGroupIds)只适用于vpc网络的实例。如果选用了vpc网络但是没有指定安全组ID,BEC会创建并使用一个默认的安全组,默认安全组规则如下:
方向 | 协议 | 端口 | 类型 | 目的地址 |
---|---|---|---|---|
出站 | 全部协议 | 1-65535 | IPv4 | 目的IP: 0.0.0.0/0 |
使用模板
若使用模板,需要先在控制台创建虚机模板,获得templateId作为输入参数。无需再传入cpu、memory、disk、imageId/imageType、dnsConfig等参数。例如:
1public void createBecVmServiceUseTemplate(BecClient client) {
2 DeploymentInstance deploymentInstance = new DeploymentInstance();
3 deploymentInstance.setRegionId("cn-changchun-ix");
4 deploymentInstance.setReplicas(1);
5 deploymentInstance.setNetworkType("vpc");
6
7 KeyConfig keyConfig = new KeyConfig();
8 keyConfig.setType("password");
9 keyConfig.setAdminPass("73608b341B!");
10
11 CreateBecVmServiceRequest request = CreateBecVmServiceRequest.builder()
12 .deployInstances(Arrays.asList(deploymentInstance))
13 .serviceName("name")
14 .vmName("vmname")
15 .templateId("tmpl-2rnoykpn")
16 .keyConfig(keyConfig)
17 .build();
18 CreateBecVmServiceResponse response = client.createBecVmService(request);
19}
获取BEC虚机服务列表
使用以下代码可以获取BEC虚机服务列表:
1public void getBecVmServices(BecClient client) {
2 GetBecVmServicesRequest request = new GetBecVmServicesRequest();
3
4 request.setKeywordType("serviceName"); // 查询实例的关键字类型,取值为serviceId、serviceName,分别对应服务ID、服务名字。默认为serviceId,非必需
5 request.setKeyword("word"); // 查询实例的关键字,非必需
6 request.setPageNo(1); // 页数,缺省值为1,非必需
7 request.setPageSize(10); // 每页个数,取值范围为1~1000,缺省值为1000,非必需
8 request.setOrder("ASC"); // 排序,取值为DESC、ASC,分别表示为降序、升序。缺省为DESC,非必需
9 request.setOrderBy("createTime"); // 排序字段,缺省为createTime,非必需
10
11 GetBecVmServicesResponse response = client.getBecVmServices(request);
12}
更新BEC虚机服务
更新虚机服务,包括更新密码、副本数和服务相关参数,详情请参考API参考文档。
扩容虚机服务
1public void updateVmServiceReplicas(BecClient client) {
2 DeploymentInstance deploymentInstance = new DeploymentInstance();
3 deploymentInstance.setRegionId("cn-huhehaote-ix");
4 deploymentInstance.setReplicas(2);
5
6 KeyConfig keyConfig = new KeyConfig();
7 keyConfig.setType("password");
8 keyConfig.setAdminPass("73608b341B!");
9
10 UpdateBecVmServiceRequest request = UpdateBecVmServiceRequest.builder()
11 // 虚机服务ID, 必需
12 .serviceId("s-hj4tcvq4")
13 // 更新类型,取值为 password、replicas、resource、serviceName、securityGroup,分别表示密码、副本数量、虚机资源、服务名字、安全组。其中安全组只适用于VPC网络的虚机。 必需
14 .type("replicas")
15 .deployInstances(Arrays.asList(deploymentInstance))
16 .keyConfig(keyConfig)
17 .build();
18 UpdateBecVmServiceResponse response = client.updateBecVmService(request);
19 }
更新虚机服务配置
1public void updateVmServiceResource(BecClient client) {
2 UpdateBecVmServiceRequest request = UpdateBecVmServiceRequest.builder()
3 // 虚机服务ID, 必需
4 .serviceId("s-hj4tcvq4")
5 // 更新类型,取值为 password、replicas、resource、serviceName、securityGroup,分别表示密码、副本数量、虚机资源、服务名字、安全组。其中安全组只适用于VPC网络的虚机。 必需
6 .type("resource")
7 .cpu(2)
8 .memory(4)
9 .build();
10 UpdateBecVmServiceResponse response = client.updateBecVmService(request);
11 }
更新虚机服务内所有虚机实例的密码
目前虚机登录支持密码和密钥两种方式,密码和密钥需要二选一。
密码限制长度为8~32位字符,包括英文、数字和符号,符号仅限!@#$%^+*()。
1public void updateVmServicePassword(BecClient client) {
2 KeyConfig keyConfig = new KeyConfig();
3 keyConfig.setType("password");
4 keyConfig.setAdminPass("73608b341B!");
5 UpdateBecVmServiceRequest request = UpdateBecVmServiceRequest.builder()
6 // 虚机服务ID, 必需
7 .serviceId("s-hj4tcvq4")
8 // 更新类型,取值为 password、replicas、resource、serviceName、securityGroup,分别表示密码、副本数量、虚机资源、服务名字、安全组。其中安全组只适用于VPC网络的虚机。 必需
9 .type("password")
10 .keyConfig(keyConfig)
11 .build();
12 UpdateBecVmServiceResponse response = client.updateBecVmService(request);
13 }
更新虚机服务内所有虚机实例的密钥
密钥仅支持BCC密钥,在使用前必须先在BCC的华北-北京区域创建密钥对。keyId可以通过BCC查询密钥对列表获得。
1 KeyConfig keyConfig = new KeyConfig();
2 keyConfig.setType("bccKeyPair");
3 keyConfig.setBccKeyPairIdList(Arrays.asList("k-UDUCAe4n"));
更新虚机服务名称
1 public void updateVmServiceName(BecClient client) {
2 UpdateBecVmServiceRequest request = UpdateBecVmServiceRequest.builder()
3 // 虚机服务ID, 必需
4 .serviceId("s-hj4tcvq4")
5 // 更新类型,取值为 password、replicas、resource、serviceName、securityGroup,分别表示密码、副本数量、虚机资源、服务名字、安全组。其中安全组只适用于VPC网络的虚机。 必需
6 .type("serviceName")
7 .serviceName("wj-new-name")
8 .build();
9 UpdateBecVmServiceResponse response = client.updateBecVmService(request);
10 }
扩容实例使用VPC网络注意事项
变配:目前不支持经典网络虚机与VPC网络虚机的互相变配
注意VPC网络分节点创建,不能跨节点指定VPC。 扩容VPC网络的虚机,请求DeploymenetInstance的网络类型networkType为vpc
扩容节点如果选择vpc网络,可以指定使用自定义已创建好的vpcId和subnetId; 如果没有指定vpcId和subnetId,系统会为每个节点创建并使用默认的私有网络和子网;默认私有网络CIDR为172.16.0.0/20,默认子网CIDR为172.16.0.0/24
1 DeploymentInstance deploymentInstance = new DeploymentInstance();
2 deploymentInstance.setRegionId("cn-huhehaote-ix");
3 deploymentInstance.setReplicas(3);
4 deploymentInstance.setNetworkType("vpc");
5 deploymentInstance.setVpcId("vpc-fhsolhqaggsd");
6 deploymentInstance.setSubnetId("sbn-isieglgvqp4z");
指定安全组(securityGroupIds)只适用于vpc网络的实例。如果选用了vpc网络,但是没有指定安全组ID,BEC会创建并使用一个默认的安全组,默认安全组规则如下:
方向 | 协议 | 端口 | 类型 | 目的地址 |
---|---|---|---|---|
出站 | 全部协议 | 1-65535 | IPv4 | 目的IP: 0.0.0.0/0 |
获取BEC虚机服务详情
使用以下代码获取BEC虚机服务详情:
1public void getBecVmService(BecClient client) {
2 GetBecVmServiceRequest request = new GetBecVmServiceRequest();
3 // 服务Id
4 request.setServiceId("serviceId");
5 GetBecVmServiceResponse response = client.getBecVmService(request);
6}
停止、启动BEC虚机服务
使用以下代码可以停止、启动BEC虚机服务:
1public void becVmServiceAction(BecClient client) {
2 BecVmServiceActionRequest request = new BecVmServiceActionRequest();
3 // 操作描述(start,stop)
4 request.setAction("start");
5 // 服务Id
6 request.setServiceId("serviceId");
7 BecVmServiceActionResponse response = client.becVmServiceAction(request);
8}
删除BEC虚机服务
使用以下代码可以删除BEC虚机服务:
1public void delBecVmService(BecClient client) {
2 DelBecVmServiceRequest request = new DelBecVmServiceRequest();
3 // 服务Id
4 request.setServiceId("serviceId");
5 DelBecVmServiceResponse response = client.delBecVmService(request);
6}
获取BEC服务监控
使用以下代码可以获取BEC服务监控:
1public void getBecVmServiceMetrics(BecClient client) {
2 GetBecVmServiceMetricsRequest request = new GetBecVmServiceMetricsRequest();
3 // 监控类型,取值为CPU、MEMORY、BANDWIDTH_RECEIVE、BANDWIDTH_TRANSMIT分别表示CPU、内存、入网带宽、出网带宽
4 request.setType("CPU");
5 // 虚机服务id
6 request.setServiceId("serviceId");
7 // 从当前起向前偏移秒数作为起点
8 request.setOffsetInSeconds(3600);
9 // 数据点间隔(单位:分钟)
10 request.setStepInMin(5);
11 GetBecVmServiceMetricsResponse response = client.getBecVmServiceMetrics(request);
12}