diff --git a/krkn/scenario_plugins/hogs/hogs_scenario_plugin.py b/krkn/scenario_plugins/hogs/hogs_scenario_plugin.py index 37fa7519..b82e9acd 100644 --- a/krkn/scenario_plugins/hogs/hogs_scenario_plugin.py +++ b/krkn/scenario_plugins/hogs/hogs_scenario_plugin.py @@ -25,6 +25,10 @@ class HogsScenarioPlugin(AbstractScenarioPlugin): with open(scenario, "r") as f: scenario = yaml.full_load(f) scenario_config = HogConfig.from_yaml_dict(scenario) + + # Get node-name if provided + node_name = scenario.get('node-name') + has_selector = True if not scenario_config.node_selector or not re.match("^.+=.*$", scenario_config.node_selector): if scenario_config.node_selector: @@ -33,13 +37,19 @@ class HogsScenarioPlugin(AbstractScenarioPlugin): else: node_selector = scenario_config.node_selector - available_nodes = lib_telemetry.get_lib_kubernetes().list_nodes(node_selector) - if len(available_nodes) == 0: - raise Exception("no available nodes to schedule workload") + if node_name: + logging.info(f"Using specific node: {node_name}") + all_nodes = lib_telemetry.get_lib_kubernetes().list_nodes("") + if node_name not in all_nodes: + raise Exception(f"Specified node {node_name} not found or not available") + available_nodes = [node_name] + else: + available_nodes = lib_telemetry.get_lib_kubernetes().list_nodes(node_selector) + if len(available_nodes) == 0: + raise Exception("no available nodes to schedule workload") - if not has_selector: - # if selector not specified picks a random node between the available - available_nodes = [available_nodes[random.randint(0, len(available_nodes))]] + if not has_selector: + available_nodes = [available_nodes[random.randint(0, len(available_nodes))]] if scenario_config.number_of_nodes and len(available_nodes) > scenario_config.number_of_nodes: available_nodes = random.sample(available_nodes, scenario_config.number_of_nodes) diff --git a/scenarios/kube/cpu-hog.yml b/scenarios/kube/cpu-hog.yml index eeb130e2..502ba74e 100644 --- a/scenarios/kube/cpu-hog.yml +++ b/scenarios/kube/cpu-hog.yml @@ -5,6 +5,7 @@ image: quay.io/krkn-chaos/krkn-hog namespace: default cpu-load-percentage: 90 cpu-method: all +# node-name: "worker-0" # Uncomment to target a specific node by name node-selector: "node-role.kubernetes.io/worker=" number-of-nodes: 2 taints: [] #example ["node-role.kubernetes.io/master:NoSchedule"] diff --git a/scenarios/kube/io-hog.yml b/scenarios/kube/io-hog.yml index 606ad259..1af1d5b1 100644 --- a/scenarios/kube/io-hog.yml +++ b/scenarios/kube/io-hog.yml @@ -6,10 +6,11 @@ namespace: default io-block-size: 1m io-write-bytes: 1g io-target-pod-folder: /hog-data +# node-name: "worker-0" # Uncomment to target a specific node by name io-target-pod-volume: name: node-volume hostPath: path: /root # a path writable by kubelet in the root filesystem of the node node-selector: "node-role.kubernetes.io/worker=" number-of-nodes: '' -taints: [] #example ["node-role.kubernetes.io/master:NoSchedule"] \ No newline at end of file +taints: [] #example ["node-role.kubernetes.io/master:NoSchedule"] \ No newline at end of file diff --git a/scenarios/kube/memory-hog.yml b/scenarios/kube/memory-hog.yml index f69eb082..bdee31d5 100644 --- a/scenarios/kube/memory-hog.yml +++ b/scenarios/kube/memory-hog.yml @@ -4,6 +4,7 @@ hog-type: memory image: quay.io/krkn-chaos/krkn-hog namespace: default memory-vm-bytes: 90% +# node-name: "worker-0" # Uncomment to target a specific node by name node-selector: "node-role.kubernetes.io/worker=" number-of-nodes: '' taints: [] #example ["node-role.kubernetes.io/master:NoSchedule"]