Kubernetes 이야기

kr8s - Kubernetes용 Python 클라이언트 라이브러리 본문

Kubernetes/일반

kr8s - Kubernetes용 Python 클라이언트 라이브러리

kmaster 2023. 12. 31. 22:54
반응형

 

Kubernetes Python 클라이언트 라이브러리는 보통 다음을 참고하여 개발한다.

https://github.com/kubernetes-client

 

Kubernetes Clients

This organization hosts Kubernetes API client libraries. - Kubernetes Clients

github.com

 

kubernetes-client 는 asynio를 지원하지 않기 때문에 이런 경우에는  kubernetes-asyncio를 사용하기도 한다.

https://github.com/tomplus/kubernetes_asyncio

 

GitHub - tomplus/kubernetes_asyncio: Python asynchronous client library for Kubernetes http://kubernetes.io/

Python asynchronous client library for Kubernetes http://kubernetes.io/ - GitHub - tomplus/kubernetes_asyncio: Python asynchronous client library for Kubernetes http://kubernetes.io/

github.com

 

여러 오픈소스들 중 kubernetes python client로 kr8s를 살펴보자. kr8s는 매우 명확하고 읽기 쉽게 개발을 진행할 수 있는 장점이 있다. 간단히 pod list를 조회하는 예제를 살펴보자.

 

kubernetes-client

from kubernetes import client, config

selector = {'component': 'kube-scheduler'}
selector_str = ",".join([f"{key}={value}" for key, value in selector.items()])

config.load_kube_config()

v1 = client.CoreV1Api()
for pods in v1.list_pod_for_all_namespaces(label_selector=selector_str, ).items:
    print(pod.metadata.namespace, pod.metadata.name)

 

kr8s

import kr8s

selector = {'component': 'kube-scheduler'}

for pod in kr8s.get("pods", namespace=kr8s.ALL, label_selector=selector):
    print(pod.namespace, pod.name)

 

한 눈에 봐도 kr8s가 간결하다는 것을 알 수 있다. 또하는 asyncio도 kubernetes_asyncio 와 비교하면 간결하다.

 

kubernetes_asyncio 

from kubernetes_asyncio import client, config
from kubernetes_asyncio.client.api_client import ApiClient

await config.load_kube_config()

async with ApiClient() as api:
    v1 = client.CoreV1Api(api)
    nodes = await v1.list_node()
    for node in nodes.items:
        print(node.metadata.name)

 

kr8s

import kr8s.asyncio

for node in await kr8s.asyncio.get("nodes"):
    print(node.name)

 

또한, 몇 가지 유용한 기능들을 제공한다.

 

1) pod gen 기능

from kr8s.objects import Pod
pod = Pod.gen(name="my-pod", image="my-image")
pod.create()

 

2) owner reference 설정

from kr8s.objects import Deployment, Pod
deployment = Deployment.get("my-deployment")
pod = Pod.get("my-pod")
deployment.adopt(pod)

 

kr8s 홈페이지로 접속하면 object들에 대한 상세 function 들을 조회할 수 있다.

 

반응형
Comments