Ubuntu16.04 로컬 환경의 Azure ServiceFabric에서 컨테이너를 이동해 봅니다.

소개



Azure ServiceFabric을 일단 움직여서 어떤 것인지 알고 싶어 공식 문서대로라고 생각해 보면 의외로 빠져서 절차를 정리합니다.

목표



  • Linux에서 처음 Service Fabric 컨테이너 응용 프로그램 만들기 로 다음을 할 수 있게 되는 것
  • 우분투에 ServiceFabric 개발 환경 구축
  • 구축한 개발 환경에서 간단한 컨테이너(Helloworld가 반환되는 RestAPI)를 동작시킨다


  • 절차



    우분투에 ServiceFabric 개발 환경 구축



    Linux에서 처음 Service Fabric 컨테이너 응용 프로그램 만들기 의 전제에 따라 다음을 설치합니다. Ubuntu의 경우 SetupServiceFabric.sh를 실행하면 다른 도구도 설치할 수 있습니다. 반대로 DockerCE가 사전에 설치되어 있으면 위에서 설명한 셸을 실행하지 못합니다 (DockerCE와 뭔가 충돌합니다. 자세히 알 수 없음)
  • Service Fabric SDK
  • DockerCE
  • Service Fabric CLI

  • Service Fabric SDK 및 도구을 Ubuntu에 빌드합니다.
    전제조건에는 다른 DockerCE, ServiceFabricCLI를 설치하는 것으로 기재가 있습니다만, Ubuntu의 경우는 일괄적으로 인스톨 된다 SetupServiceFabric.sh 를 실행하면 별도 인스톨은 필요 없습니다.
    위의 페이지 Service Fabric SDK 및 도구을 발췌하면 다음 명령을 실행하면 OK입니다. 이제 로컬 환경에 ServiceFabric 클러스터가 빌드됩니다.
    $ sudo apt-get -y install apt-transport-https
    $ sudo curl -s https://raw.githubusercontent.com/Azure/service-fabric-scripts-and-templates/master/scripts/SetupServiceFabric/SetupServiceFabric.sh | sudo bash
    $ sudo /opt/microsoft/sdk/servicefabric/common/clustersetup/devclustersetup.sh
    

    위의 명령이 성공하면 다음은 Linux에서 처음 Service Fabric 컨테이너 응용 프로그램 만들기 에서 python 앱이 동작하는 컨테이너를 AzureContainerRegistry, 이하 ACR에 push합니다 (링크처와 같은 조작이 되기 때문에 조작은 생략).

    그런 다음 ServiceFabric 응용 프로그램을 배포하기 위한 생성기를 설치합니다.
    컨테이너 및 게스트 실행 파일을 만들기 위한 Yeoman 생성기 설정 를 참조합니다.
    발췌하면 다음 명령으로 OK입니다.
    $ sudo add-apt-repository "deb https://deb.nodesource.com/node_8.x $(lsb_release -s -c) main"
    $ sudo apt-get -y update
    $ sudo apt-get -y install nodejs
    $ sudo npm install -g yo
    $ sudo npm install -g generator-azuresfcontainer
    $ sudo npm install -g generator-azuresfguest
    

    yo 명령으로 다음 오류가 발생하면 권한을 부여합니다. 참고
    root@vagrant:~# yo azuresfcontainer
    /usr/lib/node_modules/yo/node_modules/conf/index.js:128
                throw err;
                ^
    Error: EACCES: permission denied, open '/root/.config/insight-nodejs/insight-yo.json'
    :(省略)
    
    # chmod g+rwx /root /root/.config /root/.config/configstore
    # chmod 777 -R /root/.config
    
  • yo 명령이 설치되면 다음을 실행하여 컨테이너를 ServiceFabric에 배포하기위한 템플릿을 생성합니다.
    # yo azuresfcontainer
    
         _-----_     ╭──────────────────────────╮
        |       |    │    Welcome to Service    │
        |--(o)--|    │     Fabric Container     │
       `---------´   │   application generator  │
        ( _´U`_ )    ╰──────────────────────────╯
        /___A___\   /
         |  ~  |
       __'.___.'__
     ´   `  |° ´ Y `
    
      1 <?xml version="1.0" encoding="utf-8"?>
    ? Name your application mycontainer
      1 <?xml version="1.0" encoding="utf-8"?>
    ? Name of the application service: myservice
    ? Input the Image Name: testcicd111601.azurecr.io/samples/helloworldapp
    ? Commands:
    ? Number of instances of guest container application: 1
    ? Enter the container host mapping in the following format, container_port:host_port or press enter if not needed: 80:4000
       create mycontainer/mycontainer/ApplicationManifest.xml
       create mycontainer/mycontainer/myservicePkg/ServiceManifest.xml
       create mycontainer/mycontainer/myservicePkg/config/Settings.xml
       create mycontainer/install.sh
       create mycontainer/uninstall.sh
    

    템플릿이 생성되면 mycontainer/mycontainer/ApplicationManifest.xml 에 자격 증명(ACR 사용자 이름, 암호)을 설정합니다.
                    <Policies>
                        <ContainerHostPolicies CodePackageRef="Code">
    +                       <RepositoryCredentials AccountName="YourAccountName" Password="YourPassword" PasswordEncrypted="false"/>
                            <PortBinding ContainerPort="80" EndpointRef="myserviceEndpoint"/>
                        </ContainerHostPolicies>
                    </Policies>
    

    로컬로 구축한 ServiceFabric 클러스터와 ACR에 연결
    # sfctl cluster select --endpoint http://localhost:19080
    # docker login -u <YourAccountName> -p <YourPassword>
    

    애플리케이션을 ServiceFabric 클러스터에 배포
    # cd mycontainer
    # ./install.sh
    [1/6] files, ApplicationManifest.xml
    Time left: 299 seconds
    [2/6] files, _.dir
    Time left: 299 seconds
    [3/6] files, myservice02Pkg/ServiceManifest.xml
    Time left: 299 seconds
    [4/6] files, myservice02Pkg/_.dir
    Time left: 299 seconds
    [5/6] files, myservice02Pkg/config/Settings.xml
    Time left: 299 seconds
    [6/6] files, myservice02Pkg/config/_.dir
    Time left: 299 seconds
    Complete
    /root/mycontainer02
    

    구축한 개발 환경에서 간단한 컨테이너(Helloworld가 반환되는 RestAPI)를 동작시킨다



    Service Fabric Explorer에 액세스 그러면 배포된 APPLICATION을 확인할 수 있습니다. 1로되어 있는지 확인합니다.



    을 눌러 docker ps를 실행하여 로컬에 컨테이너가 배포되었는지 확인합니다.
    ServerFabric 클러스터가 실행되는 시스템에서는 컨테이너가 실행 중임을 알 수 있습니다.
    # docker ps -a
    CONTAINER ID        IMAGE                                             COMMAND             CREATED             STATUS              PORTS                  NAMES
    32121cf2902d        testcicd111601.azurecr.io/samples/helloworldapp   "python app.py"     29 seconds ago      Up 28 seconds       0.0.0.0:4000->80/tcp   sf-2-b6b88f8d-512a-744f-ba94-fb402b2abac2
    

    다음을 수행하여 응용 프로그램의 동작을 확인합니다.
    # curl -X GET http://localhost:4000
    Hello World!
    

    잘 움직였다.

    마지막으로



    이제 Ubuntu16.04에서 Python 앱이 실행되는 컨테이너가 ServiceFabric 클러스터에 배포되어 앱이 제대로 작동하는지 확인할 수있었습니다. 하는 일은 HelloWorld 수준이었지만 개발 환경 정비와 ServiceFabric의 기본 배포 방법을 운영 기반으로 얇게 이해할 수있었습니다. 다음은 Azure의 클러스터에 배포하고 실행하고 싶습니다.

    이상
  • 좋은 웹페이지 즐겨찾기