管理集群

集群是 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 参数指定排序选项,并可以使用 limitmarker 参数进行分页。

完整示例: 管理集群

创建集群

创建集群时,将提供一个字典,其中包含键和值,具体取决于引用的集群类型。

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)