그냥 OpenStack이라면 그냥 대시보드에서 버튼 뚝딱 눌러서 instance를 생성하면 되겠지만 저번 글에서 말했듯이 StarlingX에서는 instance를 생성하기 위해서는 그렇게 쉽게 되지는 않습니다.

 

또한 공식 사이트에는 올려놓지 않고 StarlingX wiki에 숨겨놓아서 찾기 힘들더군요...

 

instance를 위한 flat network설정은 (4)번 포스트에서 이미 했습니다. 여기를 위한 설정이였죠

 

kubectl -n openstack get pod | grep -v Running | grep -v Complete

먼저 OpenStack 관련 pod들이 정상적으로 진행되고 있는지 확인합니다.

첫 글에서 말씀드렸듯 StarlingX 2.0 은 OpenStack이 K8S 위에서 컨테이너화돼서 돌고있습니다. 즉 MSA구조로 돌아가고 있죠.

 

export OS_CLOUD=openstack_helm
ADMINID=`openstack project list | grep admin | awk '{print $2}'`

일단 저번 글에서 설정한 OpenStack 인증을 진행합니다. 그래야 OpenStack 관련 명령어를 진행할 수 있습니다.

 

openstack network create --project ${ADMINID} --provider-network-type=flat --provider-physical-network=phy-flat netflat 
openstack subnet create --project ${ADMINID} netflat-subnet --network netflat --subnet-range 192.168.103.0/24 

OpenStack에서 instance들이 가지게 될 네트워크 타입과 서브넷을 설정합니다.

위의 명령어에서는 192.168.103.0/24로 되어있지만 명령어를 입력할때는 자신이 설정한 환경의 서브넷에 맞게 입력해야합니다.

 

이제 image를 등록하겠습니다.

image 등록을 위해서는 원하는 image파일을 미리 가지고계셔야 합니다. 저는 테스트용에 적합한 cirros 이미지로 진행하겠습니다.

openstack image create --container-format bare --disk-format qcow2 --file cirros-0.3.4-x86_64-disk.img cirros

자신이 입력한 이미지의 설정에 맞게 위의 명령어를 수정해서 입력합니다.

openstack image list

그리고 이미지가 등록이 되었는지 확인합니다.

 

이미지가 정상적으로 등록이 되었다면 드디어 instance를 만들 수 있게 됐습니다.

openstack server create --image cirros --flavor m1.tiny --network netflat vm1

위의 명령어를 본인이 원하는 이미지 이름, 원하는 flavor, 원하는 instance 이름을 설정해서 입력합니다.

 

그러면 드디어 instance가 만들어졌습니다.

이제 접속을 위해서 OpenStack의 대시보드에 들어가서 instance가 제대로 생성되었는지 확인합니다.

instacne가 제대로 생성이 되었다면 이제 사용을 위해 콘솔에 들어가봅니다.

 

네... 위와같이 아마 연결할 수 없음이 뜰겁니다.

설정을 제대로 진행했는데 위와같은 화면이 왜 뜨는지 궁금하실겁니다.

 

버그입니다.

해당 콘솔에 접근하는 내부 cluster port가 8080번으로 입력이 돼있어서 접근을 허락해줘야 하는데 입력이 안돼있는 이슈가 있더군요... StarlingX 커뮤니티에도 이미 글이 올라와있었고 이거를 개선한 2.0.1버전도 배포했다고 해서 2.0.1버전으로 진행을 해보았지만 마찬가지였습니다.

 

대학원 조교들에게 물어물어 가서 해답을 겨우 찾을 수 있었습니다.

kubectl 명령어를 통해 해당 pod에 직접 들어가서 8080포트를 추가해주는 방법입니다.

 

kubectl edit GlobalNetworkPolicy controller-oam-if-gnp

위의 명령어를 입력해서 해당 pod에 진입합니다.

 

그리고 위의 초록색 커서가 있는 곳과 같이- 8080 라인 한줄을 추가해줍니다.

이러고 저장을 하고 나옵니다.

 

이러면 이제 드디어 생성한 instance의 콘솔에 접근할 수 있게 됩니다.

그러나 이게 끝이 아니더군요.

생성한 instance가 저와 같다면 아마 네트워크가 접속이 안될겁니다. curl google.com 명령어를 해서 안되는걸 확인할 수 있습니다.

 

etc/resolv.cnf
etc/network/interface

환경에 따라 위의 경로에 있는 두가지 파일 중 naemserver 관련 파일이 있을겁니다.

해당 파일에서 위의 사진처럼 nameserver를 구글의 8.8.8.8로 설정해줍니다.

그러면 드디어 외부 네트워크와도 접속이 되는 것을 확인할 수 있습니다.

 

instance를 4개 이상 생성하고 하루이틀 지나면 무려 64gb의 램을 가진 controller가 램부족현상이 되면서 controller가 instance를 하나씩 끄기 시작하더군요

kubectl get pods 를 이용해 파드의 상태를 확인하니 CEPH이 문제였습니다.

CEPH이 미쳐날뛰어서 램을 끝없이 먹더군요.

이 현상은 해결하지는 못했습니다.

+ Recent posts