""" This example covers the following: - Create deployment - Annotate deployment """ from kubernetes import client, config import time def create_deployment_object(): container = client.V1Container( name="nginx-sample", image="nginx", image_pull_policy="IfNotPresent", ports=[client.V1ContainerPort(container_port=80)], ) # Template template = client.V1PodTemplateSpec( metadata=client.V1ObjectMeta(labels={"app": "nginx"}), spec=client.V1PodSpec(containers=[container])) # Spec spec = client.V1DeploymentSpec( replicas=1, selector=client.V1LabelSelector( match_labels={"app": "nginx"} ), template=template) # Deployment deployment = client.V1Deployment( api_version="apps/v1", kind="Deployment", metadata=client.V1ObjectMeta(name="deploy-nginx"), spec=spec) return deployment def create_deployment(apps_v1_api, deployment_object): # Create the Deployment in default namespace # You can replace the namespace with you have created apps_v1_api.create_namespaced_deployment( namespace="default", body=deployment_object ) def annotate_deployment(apps_v1_api, deployment_name, annotations): # Annotate the Deployment in default namespace # You can replace the namespace with you have created apps_v1_api.patch_namespaced_deployment( name=deployment_name, namespace='default', body=annotations) def main(): # Loading the local kubeconfig config.load_kube_config() apps_v1_api = client.AppsV1Api() deployment_obj = create_deployment_object() create_deployment(apps_v1_api, deployment_obj) time.sleep(1) before_annotating = apps_v1_api.read_namespaced_deployment( 'deploy-nginx', 'default') print(f"Before annotating, annotations: {before_annotating.metadata.annotations}") annotations = [ { 'op': 'add', # You can try different operations like 'replace', 'add' and 'remove' 'path': '/metadata/annotations', 'value': { 'deployment.kubernetes.io/str': 'nginx', 'deployment.kubernetes.io/int': '5' } } ] annotate_deployment(apps_v1_api, 'deploy-nginx', annotations) time.sleep(1) after_annotating = apps_v1_api.read_namespaced_deployment( name='deploy-nginx', namespace='default') print(f"After annotating, annotations: {after_annotating.metadata.annotations}") if __name__ == "__main__": main()