切换或重置Lite Server服务器操作系统
场景描述
Lite Server为一台裸金属服务器,您可以对Lite Server节点的操作系统进行切换或重置。本文介绍以下几种切换操作系统的方式:
- 在ModelArts控制台的Server页面切换或重置操作系统(推荐)
- 在裸金属服务器控制台切换操作系统
- 使用BMS Go SDK的方式切换操作系统
- 使用Python封装API的方式切换操作系统
约束限制
- 节点状态要求:Lite Server节点状态只有处于“已停止”、“重置OS失败”、“切换OS失败状态”时,才可以切换或重置操作系统。否则可能会导致操作失败,因为系统盘无法被卸载,导致无限循环卸载盘。
- 操作系统要求:目标操作系统必须是该Region下的IMS公共镜像或者私有共享镜像。
操作影响
重置或切换Lite Server节点操作系统的影响如下:
- 系统盘ID变化:切换或重置操作系统后,EVS系统盘ID会变化,和下单时订单中的EVS ID已经不一致,导致无法进行EVS系统盘扩容操作。系统会提示“当前订单已到期,无法进行扩容操作,请续订”。
- userdata配置影响:切换操作系统时,userdata的注入可能不会生效,特别是在configdriver模式下。客户需要确保在创建节点时传入userdata参数,或者在切换后手动配置必要的设置。因此切换或者重置操作系统后,建议通过挂载数据盘EVS或挂载SFS盘等方式进行存储扩容。
- 应用和模型影响:切换操作系统可能影响已部署的应用或模型,因为依赖的软件包或库可能需要重新安装或配置。用户需要重新配置必要的依赖项以确保应用正常运行。
- 裸金属服务器风险:对于裸金属服务器,升级操作系统内核或驱动可能导致不兼容,影响系统启动或基本功能。如果需要升级,请联系云服务商确认。
用户在进行切换或重置操作系统操作前,应确保节点处于关机状态,检查当前配置,备份重要数据,并在必要时联系技术支持以确认操作的可行性。
在ModelArts控制台的Server页面切换或重置操作系统
- 登录ModelArts管理控制台。
- 在左侧菜单栏中选择“资源管理 > 轻量算力节点 (Lite Server)”,进入或页面。
- 在Lite Server列表中,单击右侧
下的“切换操作系统”或“重置操作系统”,在弹出的确认对话框中,确认信息无误,然后单击“确定”,完成操作。
此时Lite Server节点或超节点的状态显示“切换操作系统中”或“重置操作系统中”。
在BMS控制台切换操作系统
使用BMS Go SDK的方式切换操作系统
以下为BMS使用Go语言通过SDK方式切换操作系统的示例代码。
package main
import (
"fmt"
"os"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
bms "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/bms/v1"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/bms/v1/model"
region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/bms/v1/region"
)
func main() {
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
// 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
ak := os.Getenv("HUAWEICLOUD_SDK_AK")
sk := os.Getenv("HUAWEICLOUD_SDK_SK")
auth := basic.NewCredentialsBuilder().
WithAk(ak).
WithSk(sk).
Build()
client := bms.NewBmsClient(
bms.BmsClientBuilder().
WithRegion(region.ValueOf("cn-north-4")).
WithCredential(auth).
Build())
keyname := "KeyPair-name"
userdata := "aGVsbG8gd29ybGQsIHdlbGNvbWUgdG8gam9pbiB0aGUgY29uZmVyZW5jZQ=="
request := &model.ChangeBaremetalServerOsRequest{
ServerId: "****input your bms instance id****",
Body: &model.OsChangeReq{
OsChange: &model.OsChange{
Keyname: &keyname,
Imageid: "****input your ims image id****",
Metadata: &model.MetadataInstall{
UserData: &userdata,
},
},
},
}
response, err := client.ChangeBaremetalServerOs(request)
if err == nil {
fmt.Printf("%+v\n", response)
} else {
fmt.Println(err)
}
}
Python封装API方式切换操作系统
以下为BMS使用Python语言通过API方式切换操作系统的示例代码。
# -*- coding: UTF-8 -*-
import requests
import json
import time
import requests.packages.urllib3.exceptions
from urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
class ServerOperation(object):
################################ IAM认证API#################################################
def __init__(self, account, password, region_name, username=None, project_id=None):
"""
:param username: if IAM user,here is small user, else big user
:param account: account big big user
:param password: account
:param region_name:
"""
self.account = account
self.username = username
self.password = password
self.region_name = region_name
self.project_id = project_id
self.ma_endpoint = "https://modelarts.{}.myhuaweicloud.com".format(region_name)
self.service_endpoint = "https://bms.{}.myhuaweicloud.com".format(region_name)
self.iam_endpoint = "https://iam.{}.myhuaweicloud.com".format(region_name)
self.headers = {"Content-Type": "application/json",
"X-Auth-Token": self.get_project_token_by_account(self.iam_endpoint)}
def get_project_token_by_account(self, iam_endpoint):
body = {
"auth": {
"identity": {
"methods": [
"password"
],
"password": {
"user": {
"name": self.username if self.username else self.account,
"password": self.password,
"domain": {
"name": self.account
}
}
}
},
"scope": {
"project": {
"name": self.region_name
}
}
}
}
headers = {
"Content-Type": "application/json"
}
import json
url = iam_endpoint + "/v3/auth/tokens"
response = requests.post(url, headers=headers, data=json.dumps(body), verify=True)
token = (response.headers['X-Subject-Token'])
return token
def change_os(self, server_id):
url = "{}/v1/{}/baremetalservers/{}/changeos".format(self.service_endpoint, self.project_id, server_id)
print(url)
body = {
"os-change": {
"adminpass": "@Server",
"imageid": "40d88eea-6e41-418a-ad6c-c177fe1876b8"
}
}
response = requests.post(url, headers=self.headers, data=json.dumps(body), verify=False)
print(json.dumps(response.json(), indent=1))
return response.json()
if __name__ == '__main__':
# 调用API前置准备,初始化认证鉴权信息
server = ServerOperation(username="xxx",
account="xxx",
password="xxx",
project_id="xxx",
region_name="cn-north-4")
server.change_os(server_id="0c84bb62-35bd-4e1c-ba08-a3a686bc5097")

