目的
今回はKubernetes上で自分の作成したプログラムでXML-RPCモジュールを動かす方法について書いていきます.もし僕と同じことをしようとしている人がいれば参考になるといいです.
環境
Kubernetes(K3s)
使用言語
Python3.10.12
使用ライブラリ
xmlrpc.client
xmlrpc.server
イメージ図
今回は仮想マシンを2台立ててRPCを使用していきます.以後仮想マシンはVMと呼びます.
RPCはネットワーク上で離れたプログラムを呼び出す手法です.詳しくはこの記事がわかりやすいと思います.
RPCクライアントはKubernetesをインストールしRPCサーバはVMのままです.
イメージ的には以下のような図になります.
RPCプログラム(クライアント)はRPCプログラム(サーバ)に対して呼び出しを行い,それに対してRPCプログラム(サーバ)は応答を返します.まあやっていることはRPCプログラム(クライアント)がRPCプログラム(サーバ)の関数を呼び出して出力をRPCプログラム(クライアント)側で受け取る形となります.
準備
VMは各自で用意してください!
クライアント側
Kubernetes(K3s)のインストール
以下の手順で行いましょう.
$ curl -sfL https://get.k3s.io | sh -
めちゃめちゃ簡単です
各ファイルの用意
- kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: myapp
files:
- hello.py
resources
- agent.yaml
- agent.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: myapp
spec:
backoffLimit: 3
template:
spec:
restartPolicy: Never
containers:
- name: myapp
image: python:3
command:
- "python"
- "/myapp/hello.py"
volumeMounts:
- mountPath: /myapp
name: script
volumes:
- name: script
configMap:
name: myapp
- hello.py
import xmlrpc.client
with xmlrpc.client.ServerProxy('http://サーバ側のIPアドレス') as proxy:
print(proxy.hello_return())
サーバ側
以下のファイルを用意
- hello_return.py
from xmlrpc.server import SimpleXMLRPCServer #RPCモジュールをインポート
with SimpleXMLRPCServer(('0.0.0.0', 6000)) as server: #6000番のPortで待ち受ける
def hello_return(): #Hellowを返す関数
return 'Hello'
server.register_function(hello_return, "hello_return")
server.serve_forever()
実行手順
では実行しましょう!
サーバ側
$ python3 test.py
クライアント側
まずは以下のコマンドを入力しましょう!
$ kubectl apply -k . -n python
configmap/myapp-ht7tttt747 created
job.batch/myapp created
Podの状態を観察
$ kubectl get pods -n python -w
NAME READY STATUS RESTARTS AGE
myapp-s2k2f 0/1 ContainerCreating 0 14s
myapp-s2k2f 0/1 Completed 0 21s
ログを見てみる
$ kubectl logs myapp-s2k2f -n python
Hello
サーバ側の状態も見てみましょう!
ちゃんと送られていそうですね
$ python3 test.py
- - [20/Oct/2023 04:33:22] "POST / HTTP/1.1" 200 -
最後に
作成したプログラムをコンテナで稼働させられるとかっこいいのでよかったら使ってみてください!!!
参考