pythonkubernetesautoscalingkubernetes-python-client

Scale deployment with python client in Kubernetes


I am trying to scale deployments using Kubernetes python client. The cluster is running on 3 nodes and I have remote access via kubectl. I need to scale my deployment based on a python script via Kubernetes python client. I am trying the following code but I get an error. I couldn't figure out the issue. Any suggestions ? Thank you.

from kubernetes import client, config

replicas=3

config.load_kube_config()
k8s_apps_v1 = client.AppsV1Api()

container = client.V1Container(
    name="trafficapp-deployment",
    image="traffic-app",#docker repository name?
    ports=[client.V1ContainerPort(container_port=5000)],
    )

template = client.V1PodTemplateSpec(
    metadata=client.V1ObjectMeta(labels={"app": "trafficapp"}),
    spec=client.V1PodSpec(containers=[container]))

spec = client.V1DeploymentSpec(
    replicas=replicas,
    template=template,
    selector={'matchLabels': {'app': 'trafficapp'}})

deployment = client.V1Deployment(
    api_version="apps/v1",
    kind="Deployment",
    metadata=client.V1ObjectMeta(name=DEPLOYMENT_NAME),
    spec=spec)
deployment.spec.replicas=replicas

api_response = k8s_apps_v1.patch_namespaced_deployment(
    name=DEPLOYMENT_NAME,
    namespace="default",
    body=deployment)

print("Deployment updated. status='%s'" % str(api_response.status))

Error I am getting -

Traceback (most recent call last):
File "/home/k8/Desktop/K8 Python client/test_pyclient.py", line 31, in <module>
api_response = k8s_apps_v1.patch_namespaced_deployment(
File "/home/k8/.local/lib/python3.10/site-packages/kubernetes/client 
/api/apps_v1_api.py", line 4627, in patch_namespaced_deployment
return self.patch_namespaced_deployment_with_http_info(name, namespace, body, **kwargs)
 # noqa: E501
File "/home/k8/.local/lib/python3.10/site-packages/kubernetes/client
/api/apps_v1_api.py", line 4742, in patch_namespaced_deployment_with_http_info
return self.api_client.call_api(
File "/home/k8/.local/lib/python3.10/site-packages/kubernetes/client/api_client.py",
line 348, in call_api
return self.__call_api(resource_path, method,
File "/home/k8/.local/lib/python3.10/site-packages/kubernetes/client/api_client.py", 
line 180, in __call_api
response_data = self.request(
File "/home/k8/.local/lib/python3.10/site-packages/kubernetes/client/api_client.py", 
line 407, in request
return self.rest_client.PATCH(url,
File "/home/k8/.local/lib/python3.10/site-packages/kubernetes/client/rest.py", line 
295, in PATCH
return self.request("PATCH", url,
File "/home/k8/.local/lib/python3.10/site-packages/kubernetes/client/rest.py", line 
234, in request
raise ApiException(http_resp=r)
kubernetes.client.exceptions.ApiException: (404)
Reason: Not Found
HTTP response headers: HTTPHeaderDict({'Audit-Id': 'b4523864-3ea8-4857- 
a1ac-59034d630644', 'Cache-Control': 'no-cache, private', 'Content-Type':  
'application/json', 'X-Kubernetes-Pf-Flowschema-Uid': 'f90063cc-3ae9-45ed-aed6-
d6ea009c6b10', 'X-Kubernetes-Pf-Prioritylevel-Uid': 'cda270d5-00fc-4012-
bb7e-58a85a29842f', 'Date': 'Wed, 07 Sep 2022 14:20:23 GMT', 'Content-Length': '232'})
HTTP response body: {"kind":"Status","apiVersion":"v1","metadata":
{},"status":"Failure","message":"deployments.apps \"DEPLOYMENT_NAME\" not 
found","reason":"NotFound","details":
{"name":"DEPLOYMENT_NAME","group":"apps","kind":"deployments"},"code":404}

Solution

  • You did not specify variable DEPLOYMENT_NAME

    Specify

    DEPLOYMENT_NAME="your deployment name" and try below snippet.

    api_response= k8s_apps_v1.patch_namespaced_deployment_scale(name=DEPLOYMENT_NAME,
                                               namespace="default",
                                              {'spec': {'replicas': replicas}} )