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?

Kubernetes上で自分の作成したプログラムでXML-RPCモジュールを動かす方法

Last updated at Posted at 2023-10-20

目的

今回はKubernetes上で自分の作成したプログラムでXML-RPCモジュールを動かす方法について書いていきます.もし僕と同じことをしようとしている人がいれば参考になるといいです.

環境
Kubernetes(K3s)
使用言語
Python3.10.12
使用ライブラリ
xmlrpc.client
xmlrpc.server

イメージ図

今回は仮想マシンを2台立ててRPCを使用していきます.以後仮想マシンはVMと呼びます.

RPCはネットワーク上で離れたプログラムを呼び出す手法です.詳しくはこの記事がわかりやすいと思います.
RPCクライアントはKubernetesをインストールしRPCサーバはVMのままです.
イメージ的には以下のような図になります.

スクリーンショット 2023-10-16 20.04.45.png

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 -

最後に

作成したプログラムをコンテナで稼働させられるとかっこいいのでよかったら使ってみてください!!!

参考

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?