虚机实例
更新时间:2025-08-11
创建BEC虚机实例
在既有实例组服务(serviceId)中创建新的BEC虚机实例
Java
1public void createBecVmServiceInstances(BecClient client) {
2 SystemVolumeConfig systemVolume = new SystemVolumeConfig();
3 systemVolume.setVolumeType(DiskTypeEnum.SATA); // 系统盘配置,必需
4 systemVolume.setName("vm-rootfs"); // 系统盘名称
5 systemVolume.setSizeInGB(40); // 系统盘大小
6
7 List<VolumeConfig> dataVolumeList = new ArrayList<>(); // 数据盘列表,非必需
8 VolumeConfig dataVolume1 = new VolumeConfig();
9 dataVolume1.setName("data1"); // 数据盘名称
10 dataVolume1.setVolumeType(DiskTypeEnum.SATA); // 数据盘类型,本地盘类型包括:NVME和SATA;云磁盘类型包括:CDS_SSD或CDS_HDD;独占盘类型包括HDD_PASSTHROUGH和SSD_PASSTHROUGH
11 dataVolume1.setSizeInGB(40); // 数据盘大小(单位G)
12 dataVolumeList.add(dataVolume1);
13 VolumeConfig dataVolume2 = new VolumeConfig();
14 dataVolume2.setName("data2");
15 dataVolume2.setVolumeType(DiskTypeEnum.SATA);
16 dataVolume2.setSizeInGB(40);
17 dataVolumeList.add(dataVolume2);
18
19 List<DeploymentInstance> deployInstances = new ArrayList<>();
20 DeploymentInstance deploy1 = new DeploymentInstance();
21 deploy1.setRegionId("regionId"); // 节点ID,由“国家码-城市-运营商”的小写字母组成字符串。例如 cn-hangzhou-cm,其中国家码标准为ISO 3166-2,城市为拼音,运营商为中国移动cm/中国电信ct/中国联通un/三线ix/bgp。如果传regionId,则可以不传region、serviceProvider、city。
22 deploy1.setReplicas(2); // 副本数,最小为1, 必需
23 deployInstances.add(deploy1); // 部署区域, 必需
24
25 KeyConfig keyConfig = new KeyConfig();
26 keyConfig.setType("password"); // 类型,bccKeyPair为选择密钥对,password为选择的密码
27 keyConfig.setAdminPass("AdminPass"); // 虚机密码限制长度为8~32位字符,英文、数字和符号必须同时存在,符号仅限!@#$%^+*()
28
29 List<Tag> tags = new ArrayList<>();
30 Tag tag = new Tag();
31 tag.setTagKey("tagKey"); // 标签键
32 tag.setTagValue("tagValue"); // 标签值
33 tags.add(tag); // 标签信息, 非必需
34
35 CreateBecVmServiceRequest request = CreateBecVmServiceRequest.builder()
36 .serviceId("serviceId") // 虚机实例服务ID, 必需
37 .vmName("vmName") // 虚机实例名称(不传为随机名称), 非必需
38 .needPublicIp(true) // 是否开通公网,true为公开,false为不公开,缺省为false, 非必需
39 .bandwidth(100) // 公网带宽大小(-1时为最大值),单位Mbps, 非必需
40 .deployInstances(deployInstances) // 部署区域, 必需
41 .cpu(1) // CPU大小,必须大于1;随机分配策略必填, 必需
42 .memory(1) // 内存大小,必须大于1;随机分配策略必填, 必需
43 .imageId("imageId") // 镜像ID(配合imageType使用), 必需
44 .imageType("bec") // 镜像类型,取值为bec、bcc,分别表示为公共镜像或bec自定义镜像、bcc自定义镜像,缺省为bcc, 必需
45 .needIpv6PublicIp(false) // 是否开通IPv6公网,true:表示开通。false:表示不开通。缺省为false, 必需
46 .systemVolume(systemVolume) // 系统盘配置, 必需
47 .dataVolumeList(dataVolumeList) // 数据盘配置, 非必需
48 .keyConfig(keyConfig) // 密码或密钥配置, 必需
49 .disableIntranet(false) // 是否需要内网,true:表示不需要;false:表示需要。缺省为false, 非必需
50 .disableCloudInit(false) // 是否需要网络初始化,true:表示不需要;false:表示需要。缺省为false, 非必需
51 .hostname("hostname") // 虚机hostname(不传为随机名称)。仅支持小写字母、数字以及-特殊字符,必须以字母开头,长度2-64。, 非必需
52 .tags(tags) // 标签信息, 非必需
53 .build();
54
55 CreateBecVmServiceResponse response = client.createBecVmServiceInstances(request);
56}
更新资源配置
更新类型值为resource,表示更新虚机配置,包括CPU、内存、DNS、带宽、网卡、IP地址类型、数据盘。
仅修改带宽时不会导致虚机重启,其余情况默认均会导致虚机重启。
Java
1public void updateBecVmDeploymentResource(BecClient client) {
2 UpdateBecVmDeploymentRequest request = new UpdateBecVmDeploymentRequest();
3 request.setVmID("vm-hj4tcvq4-cn-baoding-ct-ingmp"); // 虚机实例ID,必需
4 request.setType("resource"); // 更新类型。取值为password、vmName、resource、securityGroup、hostname,分别为密码、虚机名字、资源配置、安全组、主机名,必需
5 // request.setSpec("bec.g2.c1m4"); // 规格族,传入按指定机型策略修改,不传则按随机分配策略修改。变配不能改变虚机策略或者机型;使用spec参数则不需要填写cpu/memory,非必需
6 request.setCpu(1); // CPU大小;修改带宽时必填;随机分配策略必填,非必需
7 request.setMemory(4); // 内存大小;随机分配策略必填,非必需
8
9 List<VolumeConfig> dataVolumeList = new ArrayList<>();
10 VolumeConfig dataVolume = new VolumeConfig();
11 dataVolume.setSizeInGB(20); // 数据盘大小(单位G)
12 dataVolume.setVolumeType(DiskTypeEnum.NVME); // 数据盘类型,本地盘类型包括:NVME和SATA;云磁盘类型包括:CDS_SSD或CDS_HDD;独占盘类型包括HDD_PASSTHROUGH和SSD_PASSTHROUGH
13 dataVolume.setName("addNewDataDisk"); // 数据盘名称
14 // dataVolume.setPvcName("pvc name");
15 dataVolumeList.add(dataVolume);
16 request.setDataVolumeList(dataVolumeList); // 数据盘列表(磁盘类型为CDS_HDD或CDS_SSD时可修改磁盘大小),非必需
17
18 SystemVolumeConfig systemVolume = new SystemVolumeConfig();
19 systemVolume.setVolumeType(DiskTypeEnum.NVME); // 系统盘类型,本地盘类型包括:NVME和SATA;云磁盘类型包括:CDS_SSD或CDS_HDD;独占盘类型包括HDD_PASSTHROUGH和SSD_PASSTHROUGH
20 systemVolume.setSizeInGB(40); // 系统盘大小(单位G)
21 systemVolume.setName("new name"); // 系统盘名称
22 // systemVolume.setPvcName("pvc name");
23 request.setSystemVolume(systemVolume); // 系统盘(磁盘类型为CDS_HDD或CDS_SSD时可修改磁盘大小),非必需
24
25 DnsConfig dnsConfig = new DnsConfig();
26 dnsConfig.setDnsType(DnsTypeEnum.CUSTOMIZE); // DNS类型
27 dnsConfig.setDnsAddress("129.29.29.29"); // DNS地址,多个DNS地址以逗号分隔
28 request.setDnsConfig(dnsConfig); // DNS配置,必需
29
30 NetworkConfig networkConfig = new NetworkConfig();
31 networkConfig.setNodeType(NodeTypeEnum.SINGLE); // 节点类型(SINGLE单线、TRIPLE三线)
32
33 List<NetworkConfig.Networks> networksList = new ArrayList<>();
34 NetworkConfig.Networks net0 = new NetworkConfig.Networks();
35 net0.setNetType(NetTypeEnum.INTERNAL_IP); // 网卡类型 (INTERNAL_IP表示内网;单线节点使用PUBLIC_IP表示公网网卡;三线节点用TRIPLE_CT、TRIPLE_UN、TRIPLE_CM分别表示公网的电信、联通、移动)
36 net0.setNetName("eth0"); // 网卡名称,内外网卡的名称不能重复;支持大小写字母,数字,"-_",必须以字母开头,长度3-16字符。
37 networksList.add(net0);
38
39 NetworkConfig.Networks net1 = new NetworkConfig.Networks();
40 net1.setNetType(NetTypeEnum.PUBLIC_IP); // 网卡类型 (INTERNAL_IP表示内网;单线节点使用PUBLIC_IP表示公网网卡;三线节点用TRIPLE_CT、TRIPLE_UN、TRIPLE_CM分别表示公网的电信、联通、移动)
41 net1.setNetName("eth1"); // 网卡名称,内外网卡的名称不能重复;支持大小写字母,数字,"-_",必须以字母开头,长度3-16字符。
42 networksList.add(net1);
43
44 networkConfig.setNetworksList(networksList); // 网卡信息,包含Networks
45 request.setNetworkConfig(networkConfig); // 包含内外网卡名称的设置(包含NetworkConfig),非必需
46
47 request.setNeedIpv6PublicIp(true); // 是否开通IPv6公网,true:表示开通。false:表示不开通。缺省为false, 非必需
48 request.setBandwidth(67f); // 公网带宽大小(-1时为最大值),单位Mbps, 非必需
49
50 UpdateBecVmDeploymentResponse response = client.updateBecVmDeployment(request);
51}
更新密钥
目前虚机登录支持密码和密钥两种方式,密码和密钥需要二选一。
密码限制长度为8~32位字符,包括英文、数字和符号,符号仅限!@#$%^+*()。
密钥仅支持BCC密钥。使用前必须先在BCC的华北-北京区域创建密钥对。keyConfig的参数type填bccKeyPair,bccKeyPairIdList是bcc密钥对的keyId列表,keyId可通过BCC查询密钥对列表获得。
Java
1 public void updateBecVmDeploymentPassword(BecClient client) {
2 UpdateBecVmDeploymentRequest request = new UpdateBecVmDeploymentRequest();
3 request.setVmID("vm-hj4tcvq4-cn-baoding-ct-ingmp"); // 虚机实例ID,必需
4 request.setType("password"); // 更新类型。取值为password、vmName、resource、securityGroup、hostname,分别为密码、虚机名字、资源配置、安全组、主机名,必需
5
6 KeyConfig keyConfig = new KeyConfig();
7 keyConfig.setType("bccKeyPair"); // 类型,bccKeyPair为选择密钥对,password为选择的密码
8 keyConfig.setBccKeyPairIdList(Arrays.asList("k-1MkI9Laa")); // 虚机密钥对ID列表
9 request.setKeyConfig(keyConfig); // 密码或密钥配置,必需
10
11 UpdateBecVmDeploymentResponse response = client.updateBecVmDeployment(request);
12}
更新安全组
仅限于虚机的网络为VPC网络
Java
1 public void updateBecVmDeploymentSecurityGroup(BecClient client) {
2 UpdateBecVmDeploymentRequest request = new UpdateBecVmDeploymentRequest();
3 // 虚机实例ID, 必需
4 request.setVmID("vm-hj4tcvq4-cn-baoding-ct-ingmp");
5 // 更新类型。取值为password、vmName、resource、securityGroup、hostname,分别为密码、虚机名字、资源配置、安全组、主机名,必需
6 request.setType("securityGroup");
7 // 虚机关联的安全组ID列表。仅限虚机的网络类型为vpc时有效,非必需
8 List<String> sgIds = Arrays.asList("sg-iwha8h3t", "sg-rikyx2oo", "sg-wjtusaam");
9 request.setSecurityGroupIds(sgIds);
10 UpdateBecVmDeploymentResponse response = client.updateBecVmDeployment(request);
11 }
更新hostname
Java
1public void updateBecVmDeploymentHostname(BecClient client) {
2 UpdateBecVmDeploymentRequest request = new UpdateBecVmDeploymentRequest();
3 // 虚机实例ID, 必需
4 request.setVmID("vm-hj4tcvq4-cn-baoding-ct-ingmp");
5 // 更新类型。取值为password、vmName、resource、securityGroup、hostname,分别为密码、虚机名字、资源配置、安全组、主机名,必需
6 request.setType("hostname");
7 // 虚机主机名,仅支持小写字母、数字以及-特殊字符,必须以字母开头,长度2-64。需同时指定参数type为hostname,非必需
8 request.setHostname("vm-host-01");
9 UpdateBecVmDeploymentResponse response = client.updateBecVmDeployment(request);
10 }
更新虚拟机名称
Java
1public void updateBecVmDeploymentVmName(BecClient client) {
2 UpdateBecVmDeploymentRequest request = new UpdateBecVmDeploymentRequest();
3 // 虚机实例ID, 必需
4 request.setVmID("vm-hj4tcvq4-cn-baoding-ct-ingmp");
5 // 更新类型。取值为password、vmName、resource、securityGroup、hostname,分别为密码、虚机名字、资源配置、安全组、主机名,必需
6 request.setType("vmName");
7 // 实例名称,非必需
8 request.setVmName("vm-name");
9 UpdateBecVmDeploymentResponse response = client.updateBecVmDeployment(request);
10 }
VPC网络变更网卡
对于VPC网络的虚机,支持自定义网卡名称和顺序:
- networkConfig.networksList为网络变配目标后的全量网卡的列表;注意:如果不在列表内的网卡,变配后该网卡将被移除!
- 如果变更网卡顺序,networksList为网络变配目标的全部网卡的列表,按照列表顺序排列即可;
- 如果更新既有网卡名称,必须携带eniId标识指定更新的网卡:
Java
1 NetworkConfig.Networks net0 = new NetworkConfig.Networks();
2 // 网卡类型 (INTERNAL_IP表示内网;单线节点使用PUBLIC_IP表示单线公网网卡;三线节点用TRIPLE_CT、TRIPLE_UN、TRIPLE_CM分别表示三线公网的电信、联通、移动)
3 net0.setNetType(NetTypeEnum.INTERNAL_IP);
4 // 网卡名称,内外网卡的名称不能重复;支持大小写字母,数字,"-_",必须以字母开头,长度3-16字符。
5 net0.setNetName("new-name");
6 // 网卡ID,更新网卡时需指定该ID。通过获取虚机实例详情获得eniId
7 net0.setEniId("nic-rmvarthm0bhp");
- 如果新增网卡,新增一个networks结构且不指定eniId
Java
1 NetworkConfig.Networks net1 = new NetworkConfig.Networks();
2 // 网卡类型 (INTERNAL_IP表示内网;单线节点使用PUBLIC_IP表示单线公网网卡;三线节点用TRIPLE_CT、TRIPLE_UN、TRIPLE_CM分别表示三线公网的电信、联通、移动)
3 net1.setNetType(NetTypeEnum.INTERNAL_IP);
4 // 网卡名称,内外网卡的名称不能重复;支持大小写字母,数字,"-_",必须以字母开头,长度3-16字符。
5 net1.setNetName("new-name");
- 如果移除网卡,networksList不包括该网卡即可;
- 网卡变配操作将触发虚机自动重启,重启完成后网卡配置才能生效;
获取BEC虚机列表
如下代码可以获取BEC虚机列表:
Java
1public void getBecVmInstanceList(BecClient client) {
2 GetBecVmInstanceListRequest request = new GetBecVmInstanceListRequest();
3 ListRequest listRequest = new ListRequest();
4 listRequest.setPageNo(1); //页数,缺省值为1
5 listRequest.setPageSize(10); //每页个数,取值范围为1~100,缺省值为100
6 listRequest.setKeywordType("instanceName"); //查询实例的关键字类型,取值为instanceId、serviceId、instanceName、instanceIp、securityGroupId、deploysetId, 分别表示实例ID、服务ID、实例名字、实例IP、 安全组ID、部署集ID
7 listRequest.setKeyword("wj"); //查询实例的关键字
8 request.setListRequest(listRequest);
9 GetBecVmInstanceListResponse response = client.getBecVmInstanceList(request);
10 }
获取所在节点的BEC虚机列表
使用以下代码可以获取所在节点的BEC虚机列表:
Java
1public void getBecNodeVmInstanceList(BecClient client) {
2 GetBecNodeVmInstanceListRequest request = new GetBecNodeVmInstanceListRequest();
3 // 分页信息
4 ListRequest listRequest = new ListRequest();
5 // 部署实例区域
6 request.setRegion("EAST_CHINA");
7 // 部署实例运营商
8 request.setServiceProvider("CHINA_TELECOM");
9 // 部署实例城市
10 request.setCity("SHANGHAI");
11 request.setListRequest(listRequest);
12 GetBecNodeVmInstanceListResponse response = client.getBecNodeVmInstanceList(request);
13}
获取BEC虚机详情
使用以下代码可以获取BEC虚机详情:
Java
1public void getBecVirtualMachine(BecClient client) {
2 GetBecVirtualMachineRequest request = new GetBecVirtualMachineRequest();
3 // 虚机Id
4 request.setVmID("vm-id");
5 GetBecVirtualMachineResponse response = client.getBecVirtualMachine(request);
6}
删除BEC虚机
使用以下代码删除BEC虚机:
Java
1public void deleteBecVmInstance(BecClient client) {
2 DeleteBecVmInstanceRequest request = new DeleteBecVmInstanceRequest();
3 // 虚机Id
4 request.setVmID("vm-id");
5 DeleteBecVmInstanceResponse response = client.deleteBecVmInstance(request);
6}
重装BEC虚机系统
使用以下代码可以重装BEC虚机系统:
Java
1public void reinstallBecVmInstance(BecClient client) {
2 ReinstallBecVmInstanceRequest request = new ReinstallBecVmInstanceRequest();
3 // 虚机Id
4 request.setVmID("vm-id");
5 // 密码
6 request.setAdminPass("adminPass");
7 // 镜像id
8 request.setImageId("imageId");
9 ReinstallBecVmInstanceResponse response = client.reinstallBecVmInstance(request);
10}
操作BEC虚机资源
使用以下代码可以操作BEC虚机资源:
Java
1public void operateBecVmDeployment(BecClient client) {
2 OperateBecVmDeploymentRequest request = new OperateBecVmDeploymentRequest();
3 // 虚机id
4 request.setVmID("vm-id");
5 // 动作(start,stop,restart)
6 request.setAction("start");
7 OperateBecVmDeploymentResponse response = client.operateBecVmDeployment(request);
8}
获取VM实例监控
使用以下代码可以获取VM实例监控:
Java
1public void getBecVmInstanceMetrics(BecClient client) {
2 GetBecVmInstanceMetricsRequest request = new GetBecVmInstanceMetricsRequest();
3 // 虚机id
4 request.setVmId("vm-id");
5 // 监控类型(CPU,MEMORY,BANDWIDTH_RECEIVE,BANDWIDTH_TRANSMIT,TRAFFIC_RECEIVE,TRAFFIC_TRANSMIT,REQUEST_NUMBER,REQUEST_RATE,REQUEST_DELAY)
6 request.setType("cpu");
7 // 偏移秒
8 request.setOffsetInSeconds(3600);
9 // 数据点间隔(单位:分钟)
10 request.setStepInMin(5);
11 GetBecVmInstanceMetricsResponse response = client.getBecVmInstanceMetrics(request);
12}
获取相同BEC虚机实例配置
Java
1public void getBecVmConfig(BecClient client) {
2 GetBecVmConfigRequest request = new GetBecVmConfigRequest();
3 // 虚机Id
4 request.setVmID("vm-id");
5 GetBecVmConfigResponse response = client.getBecVmConfig(request);
6}