Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Kubernetesで作成したPodのCPU使用量,Pod名,IPアドレスを表示させる方法

はじめに

Podを使った実験の評価をする上でデータ取得は重要な作業である。
この記事ではPodの名前とIPアドレス、CPU使用率を取得するプログラムを書いていく。

Podの作成

kubernetesのDeploymentを使ってPodの複製をする
reprica.yamlはレプリカ数を4に設定。コンテナはnginxイメージでWebアプリを表示させるプログラム。

reprica.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: replicas-deployment
spec:
  replicas: 4
  selector:
    matchLabels:
      app: server-app
  template:
    metadata:
      labels:
        app: server-app
    spec:
      containers:
        - name: nginx-container
          image: nogisora/serverimage
          ports:
            - containerPort: 80
~                              

作成したPodはこのように表示できた。

kubectl get pod
NAME                                   READY   STATUS    RESTARTS   AGE
replicas-deployment-5b669df64c-wnfbp   1/1     Running   2          34d
replicas-deployment-5b669df64c-csscv   1/1     Running   2          34d
replicas-deployment-5b669df64c-fj6kr   1/1     Running   2          34d
replicas-deployment-5b669df64c-l8k7x   1/1     Running   2          34d

次にこのPodのデータを取得するプログラムを書く。
api_cpu.pyではCPU使用率、IPアドレス、Pod名を取得できるようにしている。
さらに、CPU使用率の一番低いPodを下に表示させるようにもなっている。
※jsonの部分はコメントアウトになっているのは実験上必要がなかった為

api_cpu.py
from kubernetes import client, config
import json

config.load_kube_config()
api = client.CustomObjectsApi()
v1 = client.CoreV1Api()
resource = api.list_namespaced_custom_object(group="metrics.k8s.io",version="v1beta1", namespace="c0118220", 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))
~                                                                                ~                                                            

実行結果は以下のようになった。
負荷は負荷実験ツールのLocustでかけている。
取得したデータは表示できている。

('replicas-deployment-5b669df64c-fj6kr', '28540182')
('replicas-deployment-5b669df64c-l8k7x', '30169433')
('replicas-deployment-5b669df64c-wnfbp', '31286353')
('replicas-deployment-5b669df64c-csscv', '27848575')
replicas-deployment-5b669df64c-csscv 27848575
Listing pods with their IPs:
10.42.1.112     c0118220        replicas-deployment-5b669df64c-wnfbp
10.42.1.113     c0118220        replicas-deployment-5b669df64c-csscv
10.42.2.191     c0118220        replicas-deployment-5b669df64c-fj6kr
10.42.2.198     c0118220        replicas-deployment-5b669df64c-l8k7x

以上でこの記事を終わりとする。
今後は、CPU使用率の一番低いPodのみを表示させられるようなプログラムを追記したいと考えてる。

cdsl
東京工科大学コンピュータサイエンス学部クラウド・分散システム研究室
https://www.tak-cslab.org/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away