블로그 이미지
평범하게 살고 싶은 월급쟁이 기술적인 토론 환영합니다.같이 이야기 하고 싶으시면 부담 말고 연락주세요:이메일-bwcho75골뱅이지메일 닷컴. 조대협


Archive»


 
 



쿠버네티스 애플리케이션을 위한 개발환경 설정하기

#2 VS Code

조대협 (http://bcho.tistory.com)

마이크로소프트 VS Code

다음 소개할 도구는 마이크로소프트사의 VS Code 이다. 자바 언어가 아닌 Python,node.js 등의 개발에는 VS Code 가 많이 사용되는 데, 특히 쿠버네티스 관련 플러그인들이 많아서 쿠버네티스 연동에 있어서는 IntelliJ보다 훨씬 좋은 기능을 제공한다.


설치하기

VS Code에, 쿠버네티스 개발환경을 설치해보자, 설치전에는 kubectl, docker, skaffold 가 미리 설치되어 있어야 한다. 

다음 웹 브라우져에서 이 링크(vscode:extension/GoogleCloudTools.cloudcode)를 실행하면, VS 코드에서 아래와 같이 Cloud Code 설치 화면이 나온다.



여기서 우측 화면의 Cloud Code  부분에서 인스톨 버튼을 누르면, 플러그인이 설치 된다.

설치가 완료되면 VS Code 하단에 다음과 같이 Cloud Code 아이콘이 생성된다. 

테스트 애플리케이션 만들기

플러그인 설치가 끝났으면, 테스트 애플리케이션을 하나 만들어 보자

VS Code 하단의 Cloud Code 버튼을 누르면, 아래 그림과 같이 VS Code 상단에 Text Box로, 메뉴를 선택할 수 있는 창이 나온다. 여기서 New Application을 선택한다




 그중에서  아래 그림과 같이 node.js:Hello world를 선택한다.




생성된 프로젝트의 구조는 아래 그림과 같다.



  • /kubenetes-manifests 디렉토리에는 쿠버네티스 자원에 대한 정의가 yaml 파일로 되어 있다. 이 예제에서는 service와 deployment  두 자원이 정의 된다.

  • /Dockerfile 에는 도커 이미지를 빌딩하기 위한 설정이 되어 있가

  • /skaffold.yaml 은 컨테이너 이미지를 빌드 배포하기 위한 설정이 들어 있다. 


애플리케이션 배포하기

VS Code 아래 Cloud Code 메뉴에서 Deploy application을 선택하면, 이 node.js 애플리케이션을 컨테이너로 패키징해서 Skaffold 를 통해서 쿠버네티스 클러스터에 배포한다. 


이때 몇가지를 물어보는데, 

  • build : “default”를 선택한다. 이 옵션은 컨테이너를 어디서 빌드 할것인지에 대한 옵션인데, “default”는 로컬 환경에서 docker를 이용해서 컨테이너를 만드는 옵션이고, 필요하다면, 구글 클라우드의 Cloud Build를 사용할 수 도 있다. Cloud Build는 로컬에서 빌드를 하는 것이 아니라, 빌드에 필요한 모든 파일들을 Cloud Build 클라이언트가 tar로 묶어서, 구글 클라우드의 Cloud Build로 보내서 빌드하는 방식인데, 만약에 빌드 태스크가 많은 빌드 서버라면 (Jenkins와 같은), 하나의 서버에서 여러 빌드를 할 수 없기 때문에 분산 빌드가 필요한데, Cloud Build를 사용하면, 클라우드에서 빌드를 건건이 해주기 때문에 빌드 머신의 리소스를 사용하지 않고, 여러 빌드를 동시에 진행할 수 있는 장점이 있다. 

  • 다음은 쿠버네티스 클러스터를 고르게 되는데, 이미 kubectl 이 깔려 있다면, 현재 연결되어 있는 클러스터들 중 하나를 선택할 수 있다. 


다음 그림은 설정이 끝난 후에, node.js 애플리케이션을 도커로 패키징해서 skaffold를 통해 쿠버네티스 클러스터로 배포하는 과정이다. 




빌드 및 배포가 완료되면, 아래 그림과 같이 쿠버네티스 service 의 end point URL이 출력된다.


해당 URL을 웹 브라우져에서 열어보면 아래 그림과 같이 애플리케이션을 동작하는 결과를 확인할 수 있다.


로그 및 쿠버네티스 자원 보기

VS Code에는 Kubernetes Explorer 라는 기능이 같이 설치 되는데, 이 기능은 현재 개발환경에 연결되어 있는 쿠버네티스 클러스터와 그 자원 (namespace, deployment, pods 등)을 보여준다. 

아래 그림은 개발환경에서 쿠버네티스 클러스터의 자원들을 보는 화면이다. 



앞에서 배포한 애플리케이션의 로그를 보고 싶으면 이 화면에서, 배포된 Pod의 오른쪽 버튼으로 클릭하면 “Stream Log”라는 메뉴가 나온데, 이 메뉴를 클릭하면 로그를 볼 수 있다 

위의 예제에서는 node-hello-world-649.. Pod를 선택하였다. 

아래는 실제로 출력되는 로그 결과이다. 


컨테이너로 SSH 접속하기

VS Code는 IntelliJ에 비해서 쿠버네티스에 관련된 여러가지 부가 기능을 제공하는데, 유용한 기능중 하나가 Pod의 컨테이너로 직접 SSH로 접속할 수 있는 기능이 있다.


위의 그림과 같이 Kubernetes Cluster Explorer 에서  Pod 아래 SSH로 로그인하고자 하는 컨테이너를 선택한 후에, 오른쪽 버튼을 누르고, Get Terminal 이라는 메뉴를 실행하면 아래 그림과 같이 VS Code 안에서 바로 그 컨테이너로 SSH 터미널이 열린다. 


쿠버네티스 자원 설정 보기

앞에서 쿠버네티스 클러스터들의 자원 목록을 볼 수 있었다. 다음으로 유용한 기능중의 하나는 각 자원에 대한 설정 정보를 볼 수 있는 기능이 있는데, 쿠버네티스 리소스를 선택한 후 Edit in YAML을 선택하면 해당 쿠버네티스 리소스의 YAML 파일을 볼 수 있다. 


디버깅

마지막은 애플리케이션 디버깅 기능인데, IntelliJ와 마찬가지로 쿠버네티스 클러스터로 배포된 애플리케이션에 대해서 온라인 디버깅이 가능하다. 

우측에 디버그 아이콘

을 클릭하면 디버그 뷰로 바뀌는데, 

코드에 브레이크 포인트 찝어 놓고, 디버그 모드에서 디버깅 시작 버튼


을 누르면 디버깅 모드로 변경되는데, 이렇게 해놓고, 웹 사이트를 실행하면, 아래 그림과 같이 브레이크 포인트에서 멈추고, 디버깅을 할 수 있다.




디버그 종료는 상단 디버그 툴 창


우측 붉은 버튼을 누르면 종료된다.


지금까지 간단하게, IntelliJ와 VSCode IDE에서 쿠버네티스를 위한 개발 환경 설정 방법에 대해서 알아보았다. 쿠버네티스 자체에 대한 설정과 운영/모니터링도 중요하지만, 쿠버네티스에 잘 적응하기 위해서는 개발자들이 손쉽게 개발환경에 접근할 수 있는 환경이 되어야 하기 때문에, 조직의 개발팀에 맞는 개발 환경과 프로세스를 잘 정리하기를 권장한다.

본인은 구글 클라우드의 직원이며, 이 블로그에 있는 모든 글은 회사와 관계 없는 개인의 의견임을 알립니다.

요즘 마이크로소프트의 행보를 보면서


조대협 (http://bcho.tistory.com)


근 1~2년간, IT 솔루션에 대한 비지니스가 많은 변화를 겪고 있습니다. 전통적인 라이센스 기반의 영업을 통한 엔터프라이즈 시장은 점점 매출이 떨어져가고 있고, 클라우드와 오픈소스 서브스크립션 모델 기반의 비지니스가 활성화 되어가는 상황에서, 공룡 IT 기업들이 변화를 시도하고 있습니다.


거대 공룡인 IBM의 경우 클라우드 컴퓨팅에 집중하기 이해서 소프트레이어 클라우드 (http://www.bloomberg.com/news/articles/2013-06-04/ibm-to-acquire-cloud-computing-provider-softlayer-technologies) 를 인수하였고, PaaS 서비스인 블루믹스를 개발하여 서비스 하고 있습니다. 얼마전에는 Node.js로 프레임워크로 유명한 StrongLoop 를 인수하였습니다. https://developer.ibm.com/bluemix/2015/09/10/ibm-acquires-strongloop/

그렇지만 아직까지 큰 존재감은 주고 있지 않는것 같습니다.


세일즈 포스의 경우 PaaS 클라우드로 유명한 Heroku를 인수했지요. http://www.salesforce.com/company/news-press/press-releases/2010/12/101208.jsp PaaS 플랫폼중에 접근성이 좋고, 많은 플랫폼 포트폴리오를 가지고 있어서, 나중에 강한 클라우드 벤더가 되지 않을까 합니다.


이러한 공룡 IT 기업들의 변화속에서 요즘 계속해서 눈에 띄는게 마이크로 소프트입니다. 윈도우즈와 .NET 기반의 폐쇄적인 플랫폼 생태계를 가지고 있어서 한계로 인식이 되었는데, 요즘 무섭게 기업 인수와 오픈 생태계로 나오면서 변화를 시도하고 있습니다.


얼마전에는 모바일 앱 크로스 플랫폼인 Xamarine을 인수하였고 https://xamarin.com/pr/xamarin-microsoft-partner

MS SQL의 Linux 지원을 공표하였습니다. https://www.microsoft.com/en-us/server-cloud/sql-server-on-linux.aspx

그러더니 오늘은 소프트웨어 스위치를 Debian Linux 기반으로 개발하여 발표 하였고 http://www.theregister.co.uk/2016/03/09/microsoft_sonic_debian/

몇일 전에는 이클립스 IDE 플랫폼에 합류 하였습니다. https://blogs.msdn.microsoft.com/visualstudio/2016/03/08/microsoft-joins-the-eclipse-foundation/

이뿐 아니라 R 언어를 지원하기 위해서 Visual Studio에 R 지원 기능을 탑재하였고 

http://blog.revolutionanalytics.com/2016/01/r-coming-to-visual-studio.html

비주얼 스튜디오 코드를 오픈소스로 전환해 버렸습니다. http://www.bloter.net/archives/244097

node.js도, 기존 구글의 V8엔진에서, 새롭게 포크하여 자사의 차크라 자바스크립트 엔진을 기반으로 한 node.js를 제공하겠다고 발표하였습니다. http://www.infoworld.com/article/3024271/javascript/nodejs-welcomes-microsoft-chakra-javascript-engine.html

얼마전에는 구글이 영상 인식이 가능한 Vision API의 클라우드 버전을 발표하더니만, 마이크로 소프트도 https://www.projectoxford.ai/vision 프로젝트를 통해서 Vision API 를 발표하였습니다.


아침에 일어나면 하나씩 빵빵 터지는지라, 다 적기도 어렵습니다. 

거대 공룡 기업이 이렇게 빠르게 변화에 대응하면서 변화를 따라잡는거 보면 놀랍기도 하고, 다음 기술을 이끌어갈 주자로써 마이크로 소프트를 무시할 수 없겠구나 하는 생각이 듭니다.



이러한 많은 변화는 나델라 CEO가 취임하고서 벌어진 변화인데, 국내 대기업들도 변화에 적응하기 위해서 많은 시도를 하고 있지만, 시장에 큰 임팩트를 주거나 대단한 변화라는 가시성을 보여주지는 못하는 것 같습니다. 

아마 나델라 같은 혁신적인 리더 부재가 아닐까 조심스럽게 추측해보는데...


어쨌거나, 공룡 IT 기업들도 빠른 변화를 진행하고 있는 중간에... 나는 어떻게 변화해야 할까를 고민해봅니다.





본인은 구글 클라우드의 직원이며, 이 블로그에 있는 모든 글은 회사와 관계 없는 개인의 의견임을 알립니다.
요즘 일이 바뻐서 블로그 포스팅을 거의 못하고 있습니다.
많이 버는 만큼, 그동안 충전해왔던 지식이나 노하우를 주로 방전하는 느낌입니다.

어쨌거나, 클라우드의 양대 산맥인 아마존 AWS와 Microsoft Azure에 대한 이야기를 해보려고 하는데..
Azure vs AWS의 승자가 누구이냐? 인데. 결론 부터 이야기 하면 AWS의 손을 들어주고 싶습니다.
Blob Storage나 DB 서비스와 같은 액세사리성 서비스는 양쪽다 어느정도 구색을 갖춰 놨다고 했을 때, 핵심인 Compute Service가 문제인데.
기본적으로 Azure는 .NET 기반의 PaaS만 지원하지만, Amazon은 모든 플랫폼을 올릴 수 있는 IaaS 수준 서비스를 제공합니다.
이말인즉슨, 내가 필요한 소프트웨어를 마음대로 올릴 수 있다는 겁니다. 단순하게 Java냐, .Net이냐 차이가 아니라
서비스를 하다보면 NFS가 필요할 수 도 있고, 제공해주는 NoSQL 서비스의 성능 문제로, Mongo나 Cassandra를 쓰고 싶을 수 도 있고, 빌드 환경을 만들어보고 싶을 수 도 있고, 여러가지 요구 사항이 존재하는데, Azure는 그게 안되고, 그냥 딱!! .NET 개발만 해야 한다는 것인데, 단순한 웹 애플리케이션 시나리오라면 모르겠지만
요즘과 같이 빅데이타나 분산 아키텍쳐가 유행하는 시절에 이것만으로는 부족하다는 말입니다.

기술적으로 Azure가 상당히 뛰어난점도 많은데, IaaS 단으로 오픈을해서, 조금 더 선택의 폭을 넓혀 줬으면 합니다.
이상 사견이었습니다.
본인은 구글 클라우드의 직원이며, 이 블로그에 있는 모든 글은 회사와 관계 없는 개인의 의견임을 알립니다.
지난주에 시애틀 마이크로소프트 본사로 교육을 다녀왔습니다.
MSSU (Microsoft Service University)라는 프로그램입니다. 세일즈,컨설팅등 제 아키텍트롤에 맞는 교육을 받았씁니다.
벤더 생활이 근 10년이 되어가는데, 이렇게 체계적인 롤 교육을 받아본것은 이번이 처음인것 같습니다. 역시 1등 회사는 모가 달라도 다르구나 하고 좀 느꼈습니다.

교육은 상당히 액티브하게 이루어집니다. 반 이상이 발표,토론,롤플레이등으로 이루어집니다. 교육 환경도 자유로운 편이라서.. 졸리면 뒤에가서 커피들고 서서 이야기 하고, 강사 앞에서 다리도 꼬고 앉습니다.
사용자 삽입 이미지

특히나 이번에는 전세계에서 온 컨설턴트들과 함께해서 이런 저런 이야기를 들을 수 있는 기회가 많았습니다. (프랑스,두바이,미국,남아공까지... 등등)
재미있었던 것중의 하나는 진짜 참여하는 것이 많았기 때문에, 그냥 듣고만 가는 한국 교육하고는 습득 정도가 차이가 많이 났습니다. 고객과 영업 또는 고객과 아키텍트 입장으로 나눠서 실제 롤 플레이도 하고, (다들 잔뼈가 굵은 사람들이라서.. 실제 상황이랑 거의 비슷하더군요.). 질문도 편하게 할 수 있고 토론도 정말 많이 한듯 싶습니다.
안되는 영어라서 진짜 고전했는데, 그래도 나름대로 잘 버텼던것 같네요.
사용자 삽입 이미지
위에는 수업 전경입니다. 뒤에 빼곡하니 붙은 종이들은 수업중에 실제 쓴 내용들입니다. 강사가 꼭지 잡아주고 설명해주면, 각자 나가서 경험을 쓰거나, 그룹을 나눠서 PT를 한다거나 그런 식으로 진행합니다.

일주일 동안, 하루는 몸살도 나서 고생도 하고, 일정이 아주 터프해서 몸이 거의 파김치가 됬지만, 이정도 교육이라면 시간 투자해서 받아볼 가치가 있다고 봅니다.

교육 과정중 사진 몇몇 올려봅니다. (MS 캠퍼스의 모습)

사용자 삽입 이미지
MS 본사 전경중 일부입니다. MS 본사는 캠퍼스라고 부릅니다. 진짜 대학같은 분위기인데, 서울대 몇배 크기라고 대충 생각하시면 됩니다. 너무 넓어서 걸어서는 도저히 돌아다닐 수 없어서, 아래 사진과 같이 셔틀과 택시가 다닙니다. (물론 공짜구요..)
사용자 삽입 이미지
 (MS 내부 돌아다니는 셔틀 택시. 대부분 운전사분들은 나이 많이 먹은 노인들입니다.)
사용자 삽입 이미지

벽에 빼곡하게 붙여놓은 교육과 토론 내용들...

마지막으로 컨설팅 교육 과정에서 같은 조였던 뉴질랜드 아키텍트 Terry와, 미국 프로젝트 메니져 Dann. 우리조가 클래스에서 1등했습니다.


조만간에 또 미국이나 싱가폴로 기술 교육이 예정될것 같습니다. 이번 회사에 있는 동안 한층 업그레이드될 수 있는 기회가 많기를 기대해봅니다.
본인은 구글 클라우드의 직원이며, 이 블로그에 있는 모든 글은 회사와 관계 없는 개인의 의견임을 알립니다.