1.はじめに
pythonにてコマンドプロンプトでコマンドを入力し,kubernetesに関する情報取得することを目的としてKubernetes Pythonクライアントに触れてみました.
2.Kubernetesとは
Kubernetes(通常 "k8s" と略される)は、コンテナ化されたアプリケーションのデプロイメント、スケーリング、および管理を自動化するためのオープンソースのシステムです。Googleによって開発され、Cloud Native Computing Foundation (CNCF) に寄贈されたこのプラットフォームは、現在最も人気のあるコンテナオーケストレーションツールの一つです。
3.準備
実際に触るにあたってインストールが必要となるのでpipを使用して以下のコマンドを実行します.そうするとkubernetesのAPIの使用が可能になります.
pip install kubernetes
4.実際に触ってみる.
自分が実際に実装したプログラムを応用例として表示します.
get_pod_information.py
from kubernetes import client, config, stream
# Kubernetesクラスタへの接続
config.load_kube_config()
# Kubernetes APIの初期化
v1 = client.CoreV1Api()
# 全てのネームスペースのPodのリストを取得
pods = v1.list_pod_for_all_namespaces(watch=False)
storage_info = None
for pod in pods.items:
if pod.metadata.namespace != "kube-system":
try:
# コンテナ内で df コマンドを実行し、ストレージ使用量を取得
command = ['df', '-h']
resp = stream.stream(v1.connect_get_namespaced_pod_exec, pod.metadata.name,
pod.metadata.namespace, command=command,
stderr=True, stdin=False, stdout=True, tty=False)
# '/var'を含む行からストレージ情報を取得
for line in resp.split('\n'):
if '/var' in line:
parts = line.split()
if len(parts) >= 6 and not storage_info:
# 最初に見つかったストレージ情報を保存
storage_info = f"{parts[1]} {parts[2]} {parts[3]} {parts[4]}"
nfs_size = parts[1]
break
except Exception as e:
print(f"Error executing command in pod {pod.metadata.name}: {e}")
if storage_info:
# 最初に見つかったストレージ情報があればループを終了
break
# NFS-Storage情報を出力
if storage_info:
print("NFS-Storage")
print("Size Used Avail Use%")
print(storage_info)
else:
print("NFS-Storage情報が見つかりませんでした。")
実行すると
実行結果
$ python3 get_pod_information.py
Pod: c0a21115-sql-b-548559cb6-6fglv
Size: 0.4G
CAPACITY: 4.0Gi
Pod: c0a21115-wp-a-794d76c58b-fgqbk
Size: 1.8G
CAPACITY: 4.0Gi
Pod: c0a21115-wp-b-5ccd59dd47-kg88x
Size: 1.8G
CAPACITY: 4.0Gi
Pod: c0a21115-sql-a-5444567d48-92zjk
Size: 0.4G
CAPACITY: 4.0Gi
get_pod_information.pyでは取得したPodのストレージ使用量とそのPodに紐づくPVCを表示しています.このように値を取得することでストレージの使用状況の把握が容易になりました.
今回はclient, config, streamを使用したが他にもあるのでいろいろと試してみると面白いかもしれません.