ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Openstack] 오픈스택 Nova 환경 구성(Devstack 이용, 단일 호스트)
    프로그래밍/Openstack 2023. 2. 22. 20:14
    • 패키지 다운로드 속도가 너무 느리다면, 받아오는 서버를 다음카카오쪽 서버로 변경해주면 조금 빨라진다.
    sed -i 's/kr.archive.ubuntu.com/ftp.daumkakao.com/g' /etc/apt/sources.list
    sed -i 's/security.ubuntu.com/ftp.daumkakao.com/g' /etc/apt/sources.list
    • 우분투 22 에서는 의존성 문제 및 패키지 문제 등으로 설치가 정상적으로 진행되질 않아 우분투 20 기준으로 구성.
    • 참고로 절대 우분투 22에서는 하지 말길!!! 시스템이 요상해질 정도로 문제가 많음.
    • # devstack 사용하여 설치를 위한 사용자 생성
      useradd -s /bin/bash -d /opt/stack -m stack
      # 권한 부여
      echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
      # 소스가 위치할 작업공간 생성 및 권한부여
      mkdir /home/stack_workspace
      chown stack /home/stack_workspace
      sudo su - stack
    • 이제 devstack 코드를 받아준다
    • cd /home/stack_workspace
      git clone https://git.openstack.org/openstack-dev/devstack
      cd devstack
      
      # 설치에 성공했던 stable/xena 기준으로 설정.
      git checkout stable/xena
    • 이후 local.conf 파일을 다음과 같은 내용으로 간단히 작성
    • vi local.conf
      # local.conf
      [[local|localrc]]
      #PASSWORD CONFIGURATION
      ADMIN_PASSWORD=123  # openstack 환경의 admin 비번 입력, 모든 비번 동일하게(테스트용 환경이기에)
      DATABASE_PASSWORD=$ADMIN_PASSWORD
      RABBIT_PASSWORD=$ADMIN_PASSWORD
      SERVICE_PASSWORD=$ADMIN_PASSWORD
    • 이대로 ./stack.sh 실행하면 좋겠지만, 그러면 거의 무조건적인 확률로 에러를 만나게 될거임.
    • # 만날 수 있는 에러 메시지
      ERROR /opt/stack/devstack/lib/neutron_plugins/ovn_agent:174 Socket /var/run/openvswitch/ovnnb_db.sock not found
      ERROR load() missing 1 required positional argument: 'Loader'
      ovs-vsctl: unix:/var/run/openvswitch/db.sock: database connection failed (Connection refused)
    • 일단 Loader 관련 에러 해결을 위한 방법은.
    • # load 함수를 full_load 함수로 변경해준다.
      sudo vi tools/update_clouds_yaml.py
      ...
      # 아래 load를 full_load로 변경
                      self._clouds = yaml.load(clouds_file)
    • db.sock 관련 에러 해결을 위한 방법은
    • ./unstack.sh
      ./clean.sh
      sudo vi lib/neutron_plugins/ovn_agent
      ...
      # 아래 구문들에서 $OVS_RUNDIR을 $OVN_RUNDIR로 변경
              # Wait for the service to be ready
              wait_for_sock_file $OVS_RUNDIR/ovnnb_db.sock
              wait_for_sock_file $OVS_RUNDIR/ovnsb_db.sock
      
              if is_service_enabled tls-proxy; then
                  sudo ovn-nbctl --db=unix:$OVS_RUNDIR/ovnnb_db.sock set-ssl $INT_CA_DIR/private/$DEVSTACK_CERT_NAME.key $INT_CA_DIR/$DEVSTACK_CERT_NAME.crt $INT_CA_DIR/ca-chain.pem
                  sudo ovn-sbctl --db=unix:$OVS_RUNDIR/ovnsb_db.sock set-ssl $INT_CA_DIR/private/$DEVSTACK_CERT_NAME.key $INT_CA_DIR/$DEVSTACK_CERT_NAME.crt $INT_CA_DIR/ca-chain.pem
              fi
              sudo ovn-nbctl --db=unix:$OVS_RUNDIR/ovnnb_db.sock set-connection p${OVN_PROTO}:6641:$SERVICE_LISTEN_ADDRESS -- set connection . inactivity_probe=60000
              sudo ovn-sbctl --db=unix:$OVS_RUNDIR/ovnsb_db.sock set-connection p${OVN_PROTO}:6642:$SERVICE_LISTEN_ADDRESS -- set connection . inactivity_probe=60000
              sudo ovs-appctl -t $OVS_RUNDIR/ovnnb_db.ctl vlog/set console:off syslog:$OVN_DBS_LOG_LEVEL file:$OVN_DBS_LOG_LEVEL
              sudo ovs-appctl -t $OVS_RUNDIR/ovnsb_db.ctl vlog/set console:off syslog:$OVN_DBS_LOG_LEVEL file:$OVN_DBS_LOG_LEVEL
    • 그리고 저장한 후, 아래 명령어 실행
    • # 아래를 하지 않아도 위 만으로도 가능할 수 있음...
      sudo systemctl start ovn-northd.service
      sudo systemctl start ovn-controller.service
      sudo systemctl start ovs-vswitchd.service
      sudo systemctl start ovsdb-server.service
      
      ./stack.sh
    • 그리고, ./stack.sh 를 두번 이상 실행했을 경우 마주치는 에러는 다음과 같은데, 해당 링크파일 지워주면 됨.
    • ln: failed to create symbolic link '/var/run/ovn/openvswitch': File exists
      # ./unstack.sh 실행후에 해당 파일을 수동으로 지워주면 됨.
      sudo rm /var/run/ovn/openvswitch
    • 인고의 시간 끝에 만나는 완료 메시지.
    • +./stack.sh:main:1507                      set +o xtrace
      
      =========================
      DevStack Component Timing
       (times are in seconds)  
      =========================
      wait_for_service       7
      pip_install           41
      apt-get                3
      run_process           17
      dbsync                 2
      apt-get-update         2
      test_with_retry        3
      async_wait            33
      osc                   75
      -------------------------
      Unaccounted time     162
      =========================
      Total runtime        345
      
      =================
       Async summary
      =================
       Time spent in the background minus waits: 109 sec
       Elapsed time: 345 sec
       Time if we did everything serially: 454 sec
       Speedup:  1.31594
      
      
      
      This is your host IP address: 192.168.20.91
      This is your host IPv6 address: ::1
      Horizon is now available at http://192.168.20.91/dashboard
      Keystone is serving at http://192.168.20.91/identity/
      The default users are: admin and demo
      The password: 123
      
      Services are running under systemd unit files.
      For more information see: 
      https://docs.openstack.org/devstack/latest/systemd.html
      
      DevStack Version: xena
      Change: 977539d154c2d75020d155bb1b35e83c038b5362 Use proper sed separator for paths 2023-02-05 17:05:21 +0000
      OS Version: Ubuntu 20.04 focal
      
      2023-02-13 06:52:44.752 | stack.sh completed in 345 seconds.
    • 신나서 openstack 명령어를 입력해보면 또다시 좌절하게 될지도…?
    • openstack image list
      /usr/lib/python3/dist-packages/secretstorage/dhcrypto.py:15: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
        from cryptography.utils import int_from_bytes
      /usr/lib/python3/dist-packages/secretstorage/util.py:19: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
        from cryptography.utils import int_from_bytes
      Missing value auth-url required for auth plugin password
    • 위 문제의 해결을 위해 devstack 디렉터리 내에 있는 openrc 파일을 조금 수정하여 적용시켜주자.
    • vi openrc
      # 패스워드 입력. 위와 동일하게 123으로 변경해줌.
      export OS_PASSWORD=123 #${ADMIN_PASSWORD:-secret}
      
      source openrc
      openstack image list
      /usr/lib/python3/dist-packages/secretstorage/dhcrypto.py:15: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
        from cryptography.utils import int_from_bytes
      /usr/lib/python3/dist-packages/secretstorage/util.py:19: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
        from cryptography.utils import int_from_bytes
      +--------------------------------------+--------------------------+--------+
      | ID                                   | Name                     | Status |
      +--------------------------------------+--------------------------+--------+
      | 8e348358-c5c9-4563-a872-d1e45e827763 | cirros-0.5.2-x86_64-disk | active |
      +--------------------------------------+--------------------------+--------+
    • 이제 설치한 호스트에서 웹페이지로도 접근이 가능할거다(http://{host_ip}/dashboard/). admin // 123
    • 이상으로 단일 호스트 노드에 devstack을 이용하여 환경을 구성하는 방법을 알아보았고, 추후 다중 호스트에 대해서는… 다시…
묭's 블로그