본문 바로가기
개발/졸업과제

kubernetes 사용하기 (2) (with nCloud)

by 컴쏘 2023. 10. 4.
728x90

동적으로 노드의 ip를 추출하는 방법을 구현해보자. 

 

구현 아이디어

구현 아이디어는 다음과 같다. 

  • 노드의 ip와 추출한다.
  • pod에 할당된 노드의 이름을 알아낸다.
  • 노드의 이름에 해당하는 노드의 ip를 찾는다. 

 

kubectl get nodes -o wide 

 

위의 명령어를 입력했을 때, 나오는 EXTERNAL-IP와 실제 노드에 할당된 공인 ip가 동일한 것을 확인

 

node의 expertal IP
external IP는 node의 공인 IP와 같다.

 

 

코드 작성 

[노드 IP 추출하기] 

# node의 이름과 ip를 추출하기 위한 용도 
def extractNodesInfo():
    result = os.popen("kubectl get nodes -o wide --kubeconfig /root/kubeconfig.yml").read()

    print("result:", result)

    nodeInfoList = result.split('\\n')[1:-1]

    print("nodeInfo: ", nodeInfoList)

    for nodeInfo in nodeInfoList: 
        node = nodeInfo.split() 
        nodeName, nodeExternalIp = node[0], node[6] 
        extractNodeInfos[nodeName] = nodeExternalIp

    print("extractN: ", extractNodeInfos)

    return extractNodeInfos

 

 

[Pod의 노드 정보 추출]

# pod의 external ip를 알기 위한 함수 
def extractNodeIpOfPod(nodeList):

    result = os.popen("kubectl get pods -o wide --kubeconfig /root/kubeconfig.yml").read()

    print("result:", result) 

    podInfoList = result.split('\\n')[1:-1]

    print("podInfo: ", podInfoList)

    for podInfo in podInfoList: 
        pod = podInfo.split() 
        podName, nodeName = pod[0], pod[6] 
        extractPodInfos[podName] = nodeName

    print("extractP: ", extractPodInfos)

    for podName, nodeName in extractPodInfos.items():
        if nodeName in nodeList:
            return extractNodeInfos[nodeName]

    return "Not Found"

 

위의 노드 IP 추출 함수와 Pod의 노드 정보 추출 함수를 사용하여 pod에 해당하는 node IP를 할당하면 된다. 

 

사용자가 가상환경을 실행하려고 할 때(즉, flask 코드 상에서 start가 실행될 때), external IP를 pod에 할당하면 동적으로 pod가 위치한 nodeIP를 찾을 수 있다. 

728x90