0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

KubernetesのPodのステータス,CPU,メモリのリソースの取り方

Posted at

初めに

皆さんこんにちは!!!
今回はKUbernetesのPodのリソースの取り方にについて説明していこうと思います!
取得するメトリクスは内容ステータス,CPU,メモリに絞ろうと思います.

Kubernetesが分からない人はこちらを見てみてください.

Podのステータスの取り方

Podの値を取るための便利なライブラリとしてkubernetesクライアントがあります.
以下のコマンドでインストールしてきましょう!

$ pip3 install kubernetes

これで使えるようになります.

次にPythonを用いてPodのステータスを取得していきましょう.
例として以下のようなコードを用意しました.

from kubernetes import client, config #kubernetes #クライアントモジュールのインストール

config.load_kube_config("/home/review2/kube/config") #パスの指定 

v1 = client.CoreV1Api()

pod_list = v1.list_namespaced_pod("bookman") #namespaceの指定
for pod in pod_list.items:
print(pod.status.phase)

出力結果

Running
Running
Running
Running

超簡単にですがステータスが出ていますね.

CPUの値の取り方

次はCPUメトリクスの取り方ですね!以下のようなコードを作りましょう.

from kubernetes import client, config
import json
file = "/home/review2/kube/config"
config.load_kube_config(file)
api = client.CustomObjectsApi()
v1 = client.CoreV1Api()
resource = api.list_namespaced_custom_object(group="metrics.k8s.io",version="v1beta1", namespace="bookman", plural="pods")

all_array = []

#print(json.dumps(resource,ensure_ascii=False, indent=4, sort_keys=True, separators=(',', ': ')))
for pod in resource["items"]:
    s=pod["metadata"]["name"],pod['containers'][0]["usage"]["cpu"].replace('n','')
    all_array.append(s)
    print(s)

max=None
max_name=""
for container in all_array:
    if max is None:
        max = int(container[1])
    elif int(container[1])<max:
        max=int(container[1])
        max_name=container[0]
print(max_name,max)

# Configs can be set in Configuration class directly or using helper utility
print("Listing pods with their IPs:")
ret = v1.list_pod_for_all_namespaces(watch=False)
for i in ret.items:
    if 'replicas-deployment' in i.metadata.name:

        print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))

そうするとこんな出力になります.んーーーいい感じ!

('mysql-test-79489b6494-46hrp', '266171')
('wordpress-test-667846cf96-dcgcj', '20848')
('wordpress-test-667846cf96-njdcc', '19222')
('wordpress-test-667846cf96-qvkbd', '20063')

最後にメモリの取り方を載せておきます!

メモリの取り方

from kubernetes import client, config

config.load_kube_config()
api = client.CustomObjectsApi()
v1 = client.CoreV1Api()
resource = api.list_namespaced_custom_object(group="metrics.k8s.io", version="v1beta1", namespace="test", plural="pods")

all_array = []

for pod in resource["items"]:
    container_name = pod["metadata"]["name"]
    memory_usage = pod['containers'][0]["usage"]["memory"]
    
    # 単位を取り除いて数値に変換
    memory_value = int(memory_usage[:-2]) * 1024  # 'Ki'を取り除いて数値に変換し、バイトに変換する
    
    all_array.append((container_name, memory_value))
    print((container_name, memory_value))

max_memory = None
max_container = ""
for container in all_array:
    if max_memory is None:
        max_memory = container[1]
    elif container[1] > max_memory:
        max_memory = container[1]
        max_container = container[0]
        
print(f"Container with highest memory usage: {max_container}, Memory: {max_memory} bytes")

# Podの情報を表示
print("Listing pods with their IPs:")
ret = v1.list_pod_for_all_namespaces(watch=False)
for i in ret.items:
    if 'replicas-deployment' in i.metadata.name:
        print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))

これでメモリのメトリクスが取れていますね!

('mysql-test-79489b6494-46hrp', 4087808)
('wordpress-test-667846cf96-dcgcj', 3260416)
('wordpress-test-667846cf96-njdcc', 3059712)
('wordpress-test-667846cf96-qvkbd', 11759616)

最後に

こんな感じでメトリクスを取れるので同じようにメトリクスを取れるので皆さんもよければ使ってみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?