파이썬 코드에서 kubernetes 포드를 만드는 방법

소개



kubernetes에서 pod를 만들려면 먼저 pod의 yaml 파일을 만들고 만든 yaml 파일을 명령으로 apply하여 만들 수 있지만 명령을 사용하지 않고 python 코드에서 pod를 만들고 싶습니다. 조사한 결과 기사가 보이지 않고 프로그램을 쓰는데 고생했기 때문에 공유해 둡니다.

환경


  • 우분투 18.04.2 LTS
  • 파이썬 3.6.9
  • kubernetes가 움직이는 환경

  • pod의 기본 작성 방법



    우선 기본적인 pod가 만들 수 있는지 시험해 본다. pod를 작성하는 yaml 파일은 무엇이든 좋은데, 일단 간단한 pod.yaml 파일을 작성한다.
    $ vim pod.yaml
    

    : set paste로 copipe하면

    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.
    

    파이썬에서 생성



    필요한 것을 설치합니다.
    $ pip3 install flask
    $ pip3 install kubernetes
    

    pod.yaml과 같은 디렉토리에 podcreate.py라는 이름으로 pod를 만드는 파이썬 프로그램을 만듭니다. 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은 로컬라면 htp://0.0.0.0:5000 로 로컬이 아니면 포트는 5000으로 IP 주소가 실행 환경마다 다르다.


    위 이미지처럼되면 성공!

    명령으로 확인해 봅니다.
    $ kubectl get pod
    NAME        READY   STATUS    RESTARTS   AGE
    myapp-pod   1/1     Running   0          3m11s
    

    pod가 되어 있으면 하고 싶은 것은 완료! !

    결론



    kubernetes의 api를 사용하고 있습니다만 어렵고 잘 모르기 때문에 응용 방법은 각각 조사해 보세요!
    좋은 연구 생활을 ~

    좋은 웹페이지 즐겨찾기