管理集群¶
集群是 Senlin 服务设计中的一等公民。 集群被定义为同类对象的集合。 此处的“同类”意味着被管理的对象(即节点)必须从相同的“profile 类型”实例化而来。
列出集群¶
要检查接收器的列表
def list_cluster(conn):
print("List clusters:")
for cluster in conn.clustering.clusters():
print(cluster.to_dict())
for cluster in conn.clustering.clusters(sort='name:asc'):
print(cluster.to_dict())
在列出集群时,可以使用 sort 参数指定排序选项,并可以使用 limit 和 marker 参数进行分页。
完整示例: 管理集群
创建集群¶
创建集群时,将提供一个字典,其中包含键和值,具体取决于引用的集群类型。
def create_cluster(conn):
print("Create cluster:")
spec = {
"name": CLUSTER_NAME,
"profile_id": PROFILE_ID,
"min_size": 0,
"max_size": -1,
"desired_capacity": 1,
}
cluster = conn.clustering.create_cluster(**spec)
print(cluster.to_dict())
可选地,您可以指定一个 metadata 关键字参数,其中包含一些键值对,这些键值对将与集群关联。
完整示例: 管理集群
获取集群¶
要根据其名称或 ID 获取集群
def get_cluster(conn):
print("Get cluster:")
cluster = conn.clustering.get_cluster(CLUSTER_ID)
print(cluster.to_dict())
完整示例: 管理集群
查找集群¶
要根据其名称或 ID 查找集群
def find_cluster(conn):
print("Find cluster:")
cluster = conn.clustering.find_cluster(CLUSTER_ID)
print(cluster.to_dict())
完整示例: 管理集群
更新集群¶
集群创建后,其大部分属性都是不可变的。 尽管如此,您可以更新集群的 name 和/或 params。
def update_cluster(conn):
print("Update cluster:")
spec = {
"name": "Test_Cluster001",
"profile_id": "c0e3a680-e270-4eb8-9361-e5c9503fba0a",
"profile_only": True,
}
cluster = conn.clustering.update_cluster(CLUSTER_ID, **spec)
print(cluster.to_dict())
完整示例: 管理集群
删除集群¶
集群创建后可以删除,当集群中存在节点时,Senlin 引擎将启动一个进程来删除集群中的所有节点并销毁它们,然后再删除集群对象本身。
def delete_cluster(conn):
print("Delete cluster:")
conn.clustering.delete_cluster(CLUSTER_ID)
print("Cluster deleted.")
# cluster support force delete
conn.clustering.delete_cluster(CLUSTER_ID, False, True)
print("Cluster deleted")
将节点添加到集群¶
将一些现有节点添加到指定的集群。
def add_nodes_to_cluster(conn):
print("Add nodes to cluster:")
node_ids = [NODE_ID]
res = conn.clustering.add_nodes_to_cluster(CLUSTER_ID, node_ids)
print(res)
从集群中删除节点¶
从指定的集群中删除节点。
def remove_nodes_from_cluster(conn):
print("Remove nodes from a cluster:")
node_ids = [NODE_ID]
res = conn.clustering.remove_nodes_from_cluster(CLUSTER_ID, node_ids)
print(res)
替换集群中的节点¶
替换指定集群中的一些现有节点。
def replace_nodes_in_cluster(conn):
print("Replace the nodes in a cluster with specified nodes:")
old_node = NODE_ID
new_node = "cd803d4a-015d-4223-b15f-db29bad3146c"
spec = {old_node: new_node}
res = conn.clustering.replace_nodes_in_cluster(CLUSTER_ID, **spec)
print(res)
集群扩展¶
增加集群的大小。
def scale_out_cluster(conn):
print("Inflate the size of a cluster:")
res = conn.clustering.scale_out_cluster(CLUSTER_ID, 1)
print(res)
集群缩减¶
减小集群的大小。
def scale_out_cluster(conn):
print("Inflate the size of a cluster:")
res = conn.clustering.scale_out_cluster(CLUSTER_ID, 1)
print(res)
集群调整大小¶
集群大小调整。
def resize_cluster(conn):
print("Resize of cluster:")
spec = {
'min_size': 1,
'max_size': 6,
'adjustment_type': 'EXACT_CAPACITY',
'number': 2,
}
res = conn.clustering.resize_cluster(CLUSTER_ID, **spec)
print(res)
将策略附加到集群¶
一旦策略被附加(绑定)到集群,它将在对该集群执行相关操作时被强制执行,除非该策略在集群上被(临时)禁用
def attach_policy_to_cluster(conn):
print("Attach policy to a cluster:")
spec = {'enabled': True}
res = conn.clustering.attach_policy_to_cluster(
CLUSTER_ID, POLICY_ID, **spec
)
print(res)
从集群中分离策略¶
一旦策略被附加到集群,可以根据用户的请求从集群中分离它。
def detach_policy_from_cluster(conn):
print("Detach a policy from a cluster:")
res = conn.clustering.detach_policy_from_cluster(CLUSTER_ID, POLICY_ID)
print(res)
集群检查¶
检查集群健康状态,可以检查集群成员。
def check_cluster(conn):
print("Check cluster:")
res = conn.clustering.check_cluster(CLUSTER_ID)
print(res)
集群恢复¶
要恢复指定的集群,将检查集群中的成员。
def recover_cluster(conn):
print("Recover cluster:")
spec = {'check': True}
res = conn.clustering.recover_cluster(CLUSTER_ID, **spec)
print(res)