81 lines
2.8 KiB
Python
81 lines
2.8 KiB
Python
from kubernetes import client, config
|
|
|
|
|
|
def update_max_allowed_vpa(api_instance, namespace, vpa_name, max_allowed):
|
|
try:
|
|
vpa = api_instance.get_namespaced_custom_object(
|
|
"autoscaling.k8s.io",
|
|
"v1",
|
|
namespace,
|
|
"verticalpodautoscalers",
|
|
vpa_name,
|
|
)
|
|
# skip if updateMode is off
|
|
if vpa["spec"]["updatePolicy"]["updateMode"] == "Off":
|
|
print(f" Skipping VPA '{vpa_name}' in namespace '{namespace}' because updateMode is Off")
|
|
return
|
|
vpa["spec"]["resourcePolicy"]["containerPolicies"][0]["maxAllowed"] = max_allowed
|
|
api_instance.replace_namespaced_custom_object(
|
|
"autoscaling.k8s.io",
|
|
"v1",
|
|
namespace,
|
|
"verticalpodautoscalers",
|
|
vpa_name,
|
|
vpa
|
|
)
|
|
print(f" Updated maxAllowed for VPA '{vpa_name}' in namespace '{namespace}'")
|
|
except client.rest.ApiException as e:
|
|
print(f" Error updating VPA '{vpa_name}' in namespace '{namespace}': {e}")
|
|
|
|
|
|
def main():
|
|
# Load Kubernetes configuration
|
|
config.load_kube_config()
|
|
|
|
# Define cluster names
|
|
clusters = [
|
|
# "nonprod.np.navi-tech.in",
|
|
# "aps1.prod.navi-tech.in",
|
|
"aps1.np.navi-gi.in",
|
|
# "aps1.prod.navi-gi.in",
|
|
# "aps1.np.navi-sa.in",
|
|
# "aps1.prod.navi-sa.in",
|
|
# "aps1.np.navi-pay.in",
|
|
# "aps1.prod.navi-pay.in",
|
|
]
|
|
|
|
max_allowed = {
|
|
"cpu": "7200m",
|
|
"memory": "16Gi"
|
|
}
|
|
|
|
for cluster in clusters:
|
|
print(f"Processing cluster: {cluster}")
|
|
try:
|
|
api_instance = client.CustomObjectsApi()
|
|
config.load_kube_config(context=cluster)
|
|
v1 = client.CoreV1Api()
|
|
ns = [ns.metadata.name for ns in v1.list_namespace().items]
|
|
for namespace in ns:
|
|
print(f" Processing namespace: {namespace}")
|
|
try:
|
|
vpas = api_instance.list_namespaced_custom_object(
|
|
"autoscaling.k8s.io",
|
|
"v1",
|
|
namespace,
|
|
"verticalpodautoscalers",
|
|
)
|
|
for vpa in vpas.get("items", []):
|
|
vpa_name = vpa.get("metadata", {}).get("name")
|
|
if vpa_name:
|
|
update_max_allowed_vpa(api_instance, namespace, vpa_name,
|
|
max_allowed)
|
|
except client.rest.ApiException as e:
|
|
print(f" Error listing VPA in namespace '{namespace}': {e}")
|
|
except client.rest.ApiException as e:
|
|
print(f" Error processing cluster '{cluster}': {e}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|