2
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 3 years have passed since last update.

pythonコードからkubernetesのpodを作成する方法

Last updated at Posted at 2021-01-13

#はじめに
kubernetesでpodを作るためにはまずpodのyamlファイルを作り、作ったyamlファイルをコマンドでapplyすることにより作成することが出来るが、コマンドを使わずにpythonコードからpodを作成するしたいと思って調べたところ記事が見当たらず、プログラムを書くのに苦労したため共有しておきます。

#環境

  • Ubuntu 18.04.2 LTS
  • python 3.6.9
  • kubernetesが動く環境

#podの基本的な作成方法
まず基本的なpodが作成できるか試してみる。podを作成するyamlファイルは何でもいいのですが、とりあえず簡単なpod.yamlのファイルを作成する。

$ vim pod.yaml

:set pasteでコピペすると楽

pod.yaml
# Podを記述する時のきまり
apiVersion: v1
kind: Pod
# Podの名前やラベルをはじめとする細かい情報
metadata:
  name: myapp-pod  # Podに名前をつける
  labels:
    app: myapp  # ラベル app -> myapp をつける
# Podに配置するコンテナ本体の情報
spec:
  containers:
    - name: demo-container  # コンテナに名前をつける
      image: nginx  # コンテナ名(Docker Hubの名前と一致)
      ports:
        - containerPort: 80  # 80番ポートを使う

pod.yamlをapplyしてpodを作成してみる。

$ kubectl apply -f pod.yaml
pod/myapp-pod created

podが出来たか確認してみる。

$ kubectl get pod
NAME        READY   STATUS    RESTARTS   AGE
myapp-pod   1/1     Running   0          34s

作ったpodは用済みなので消しておく。

$ kubectl delete -f pod.yaml
pod "myapp-pod" deleted
$ kubectl get pod
No resources found in c0118272 namespace.

#pythonから作成
必要なものをインストールする。

$ pip3 install flask
$ pip3 install kubernetes

pod.yamlと同じディレクトリにpodcreate.pyという名前でpodを作成するpythonプログラムを作成する。namespaceのところは自分のnamespaceの名前に変更する。基本はdefaultになる。

$ vim podcreate.py
podcreate.py
from flask import Flask
from flask import request
from kubernetes import client, config, watch
import yaml

app = Flask(__name__)
@app.route('/')
def pod_create():
    config.load_kube_config()
    with open("pod.yaml", "r") as f:
        pod = yaml.safe_load(f)
        k8s_apps_v1 = client.CoreV1Api()
        resp = k8s_apps_v1.create_namespaced_pod(body=pod, namespace="c0118272")
        print("pod created. status='%s'" % resp.metadata.name)
    return "pod created. status='%s'" % resp.metadata.name

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

ファイルの位置関係を確認する。

$ ls
podcreate.py  pod.yaml

flaskで書いたのでブラウザに表示して実行してみる。

$ export FLASK_APP=podcreate.py
$ flask run --host=0.0.0.0
 * Serving Flask app "podcreate.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * 

ブラウザで実行してみる。urlはローカルならhttp://0.0.0.0:5000でローカルじゃなければポートは5000でIPアドレスが実行環境ごとに異なる。
1-1.PNG

上の画像のようになれば成功!

コマンドで確認してみる。

$ kubectl get pod
NAME        READY   STATUS    RESTARTS   AGE
myapp-pod   1/1     Running   0          3m11s

podが出来てたらやりたいことは完了!!

#おわりに
kubernetesのapiを使っていますが難しくてよくわからないので応用方法はそれぞれ調べてみてください!
良き研究ライフを~

2
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
2
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?