관리 메뉴

공부공부 공부공부내용

[6] 오픈스택 실습5 (Heat_Orchestration 기능 중 스택생성) 0702 정리는 끝 , 결과 미확인 본문

카테고리 없음

[6] 오픈스택 실습5 (Heat_Orchestration 기능 중 스택생성) 0702 정리는 끝 , 결과 미확인

wkdth04 2020. 7. 2. 16:08

오픈스택에서 Heat는 오케스트레이션 기능을 제공한다.

템플릿 기반 으로 다양한 클라우드 어플리케이션을 배치하고 관리 할 수 있는 기능이다.

- 실습할때나 언제든 가상 컴퓨터 관리 잘해줘야한다. (compute 최소 4GB 이상)

-오픈스택 Heat 템플릿으로 테넌트 네트워크, 라우터, 그리고 인스턴스를 생성할 수 있다. 실습에서는 인스턴스를 생성함.

naleejang.tistory.com/203 참조

 

Heat ->  하나의 stack 을 만든다고 한다.

         - stack = 하나 이상의 리소스가 쌓여있는 상태를 의미

        -  실습에서 오픈스택 리소스와 거의 일치한다. 리소스의 모음을 가지고 있는 것.

        -   Heat Orchestration Template (=Hot Tamplate)  을 작성해야한다.

       -  이 Hot Tamplate은 YAML이라는 Syntax를 사용한다. 

                 - YAML = html,xml 과 같은 마크업 랭귀지

                 - YAML과 비슷한 json 파일

                 - 이러한 xml파일이나 .json파일 등은 컴퓨터가 읽기 쉬운 형태이고 사람이 해석하기는 어려운 형태이다.

                 - 하지만, yaml은 사람이 읽거나 작성하기 쉽게 하려고 만든 폼이다. 괄호나 따옴표 기호를 사용하지 않는다.

 

<YAML>

- 띄어쓰기가 의미가 없음. 하나의 스칼라 단위로 본다.

- 문장에서 꼭 따옴표를 붙일 필요 없음. 'I am a boy' 이런식으로 안해줘도 된다는 것.

- yaml 언어는 들여쓰기가 중요하다. 들여쓰기를 통해 계층을 표시한다.

- 들여쓰기를 할 때 tab키를 사용하면 안된다. yaml 언어는 tab은 공백을 무시한다. 즉, 공백이 없다고 생각한다.

- 반드시 공백을 만들 때에는 space바로 만 만들어야한다.

- 확장자로 표시할 때

           .yaml 로 쓰기도 하고

           .yml로도 가능

1. Scalar(Word/String)

korea           

I am a boy.

I am a girl.     


2. Hash/Dictionary (mapping)

scalar:  scalar

age: 30

gender: man    // gender : man 이렇게 공백 양식 틀리면 문법오류임. : 앞에를 붙이고  :기준 다음으로 공백 하나 추가해서 입력


3. Array/List

- scalar1    // 공백유의
- scalar2
- scalar3
- age: 30


4. Hirachy   // 들여쓰기  // 보통 2칸정도 사용

a
  b
  c
d
e
  f
g


- a :                                // key- value 형태 , 하나의 리스트를 가지고 있다고 생각하기. 리스트 안에 hash가 있는 형태
         200						// 리스트 안에 해쉬가 있고 multi value를 가지고 있는 형태
         300
         400   
         
a :                                // hash 안에 리스트 가 있는 형태
      -  200						// a라는 해쉬 안에 multi value가 리스트로 되어있다.
      -  300
      -  400   


코드스크립트에서 LF 의 의미

리눅스 기반에서는 엔터를   CR LF(또는 LF)로 인식함. 이렇게 짜여진 쏘스가 윈도우로 가면 오류가 나는 것. 윈도우는 LF를 인식하지 못하기 때문에 한줄로 입력된다.

라인 피드 (LF : Line Feed, 0x0a) : 캐럿을 다음 줄(현재 위치에서 바로 아래)로 이동 시킨다.

- 캐리지 리턴 (CR : Carriage Return ) : 캐럿을 줄의 맨 앞으로 이동 시킨다.

즉 모두 '줄 바꿈'과 관련이 있는 문자다.

 

줄 바꿈에 대한 정의는 시스템(OS), 언어 마다 다르다.

- 유닉스/리눅스 : LF만으로 줄 바꿈을 정의 한다.

- 윈도우/DOS : CRLF 조합으로 줄 바꿈을 정의 한다.

- C언어 : 유닉스 태생으로 LF만으로 줄 바꿈을 정의 한다.

 

위와 같이 유닉스/리눅스 시스템과 윈도우/DOS 시스템의 줄 바꿈에 대한 정의에 차이가 있다.

프린터나 타자기?와 같은 장비에선 LF로 캐럿의 위치를 현재 위치에서 바로 아래로 이동 하며 CR을 통해 줄의 맨 앞으로

이동 시키는 CR/LF (LF/CR과 다르다)의 조합을 통해서 줄 바꿈이 이루어 지는데

윈도우와 DOS는 이를 그대로 따라 가고 있다.(시스템 입장에서 보면 불편 한듯?)

따라서 윈도우의 파일을 그대로 리눅스로 옮기면 문자열 맨 끝에 '\r\n'이 붙게 되며

이를 리눅스 프로그램에서 그대로 사용시 문제가 발생할 소지가 있다.

 

윈도우와  DOS의 경우 C의 줄바꿈에 대한 정의와 차이가 있다.

즉 윈도우와 DOS에서 작성된 C프로그램이 줄바꿈을 '\n'으로 입력하면 하거나 읽어들이면

실제 파일에 '\r\n'으로 기록 되거나 읽히게 된다.

이러한 차이를 없애기 위해 fopen 함수 호출시 두번째 인자로 'b'(바이너리 모드)를 주지 않게 되면 C 라이브러리에서

'\n'을 '\r\n'으로 인식 하게 된다. 그러나 이 경우 두개의 '\r\n' 문자를 하나의 '\n' 문자로 인식 하기 때문에

파일 크기를 다루는 상황 등에서 문제가 발생할 수 있다.

 

  • code a.yaml → YAML 편집기?가 나온다.
  • LF / CR
  • window에서 text를 작성할때 enter키를 때리면 컴퓨터에서는 CR,LF로 인식. 2byte로 인식한다.
  • window에서 작업하고 linux로 옮길때는 CR/LF를 LF로 옮겨야 안전하다.
  • unix에서는 LF로 인식. 1byte로 인식한다.

1. [ Stack을 정의하는 yaml 파일 형식]

#스택을 정의하는 YAML 파일이다.
#param 부분의 값만 잘 입력하면 이미지가 적절하게 만들어진다.

heat_template_version: 2013-05-23

description: >                    # >는  뒤의 문장들을 한 줄로 이해하게 만들어준다. 
  Heat Orchestration Template 
  to deploy instance 
  with existing network 
  and floating ip.

parameters:   #parameter 작성
  key_name:     #key 이름 작성
    type: string
    description: Name of keypair to assign to servers
  image:             ##-> 예시  image: cirros
    type: string
    description: Name of image to use for servers
  flavor:
    type: string
    description: Flavor to use for servers
  public_net_id:
    type: string
    description: >
      ID of public network for which floating IP addresses will be allocated
  private_net_id:
    type: string
    description: ID of private network into which servers get deployed
  private_subnet_id:
    type: string
    description: ID of private sub network into which servers get deployed

resources:
  server:
    type: OS::Nova::Server       #인스턴스를 의미한다. 리소스의 타입을 설명함.
    properties:
      name: Server
      image: { get_param: image }				 # {함수: 이미지이름}  // param= parameters의 변수. 이 parameters에서 이미지를 가져오겠다는 것.  #get_param -> permission 함수. 위의 parameter를 의미
      flavor: { get_param: flavor }
      key_name: { get_param: key_name }
      networks:
        - port: { get_resource: server1_port }   #server_port 리소스를 가져오라는 뜻.

  server_port:
    type: OS::Neutron::Port        #
    properties:
      network_id: { get_param: private_net_id }      # get_param 부분에 network 이름을 집어넣으면 된다.
      fixed_ips:
        - subnet_id: { get_param: private_subnet_id }   # 마찬가지로 서브넷 이름 가져와서 넣겠다는 의미
      security_groups: [{ get_resource: server_security_group }]     # server_security_group의 리소스를 가져오겠다는 의미

  server_floating_ip:   #생성해서 연결시켜준다.
    type: OS::Neutron::FloatingIP
    properties:
      floating_network_id: { get_param: public_net_id }      # 연결할 이름
      port_id: { get_resource: server_port 름        #연결할 포트

  server_security_group: 
    type: OS::Neutron::SecurityGroup
    properties:
      description: Add security group rules for server
      name: security-group
      rules:
        - remote_ip_prefix: 0.0.0.0/0
          protocol: tcp
          port_range_min: 22
          port_range_max: 22
        - remote_ip_prefix: 0.0.0.0/0
          protocol: icmp

outputs:
  server_private_ip:
    description: IP address of server in private network
    value: { get_attr: [ server, first_address ] }
  server_public_ip:
    description: Floating IP address of server in public network
    value: { get_attr: [ server_floating_ip, floating_ip_address ] }

 

2. 아래는 오전 실습에서 사용했던 강사님 쉘

[실습4에서 shell만들었던 거 사용 (강사님 쉘)]

heat_template_version: 2013-05-23

description: >
  Heat Orchestration Template 
  to deploy instance 
  with existing network 
  and floating ip.

parameters:
  key_name:
    type: string
    description: Name of keypair to assign to servers
  image: 
    type: string
    description: Name of image to use for servers
  flavor: 
    type: string
    description: Flavor to use for servers
  public_net_id: 
    type: string
    description: >
      ID of public network for which floating IP addresses will be allocated
  private_net_id: 
    type: string
    description: ID of private network into which servers get deployed
  private_subnet_id: 
    type: string
    description: ID of private sub network into which servers get deployed

resources:
  server:
    type: OS::Nova::Server
    properties:
      name: Server
      image: { get_param: image }
      flavor: { get_param: flavor }
      key_name: { get_param: key_name }
      networks:
        - port: { get_resource: server_port }
      user_data_format: RAW
      user_data: |
        #!/bin/sh
        cat << EOF > /etc/yum.repos.d/maria.repo
        [mariadb]
        name = MariaDB
        baseurl = http://yum.mariadb.org/10.5/centos7-amd64
        gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
        gpgcheck=1
        EOF
        yum -y install http://ftp.riken.jp/Linux/remi/enterprise/remi-release-7.rpm
        yum-config-manager --disable remi-safe
        yum-config-manager --enable remi-php74
        yum -y install httpd php php-mysqlnd MariaDB-server MariaDB-client
        curl -o /root/wp.tar.gz https://wordpress.org/latest.tar.gz
        tar xf /root/wp.tar.gz -C /var/www/html
        systemctl start mariadb
        systemctl enable mariadb
        mysql -u root -e 'CREATE DATABASE wordpress_db'
        mysql -u root -e "CREATE USER 'wp-admin'@'localhost' IDENTIFIED BY 'P@ssw0rd'"
        mysql -u root -e "GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp-admin'@'localhost' IDENTIFIED BY 'P@ssw0rd'"
        mysql -u root -e "FLUSH PRIVILEGES"
        cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
        sed -i '23s/database_name_here/wordpress_db/g' /var/www/html/wordpress/wp-config.php
        sed -i '26s/username_here/wp-admin/g' /var/www/html/wordpress/wp-config.php
        sed -i '29s/password_here/P@ssw0rd/g' /var/www/html/wordpress/wp-config.php
        systemctl start httpd
        systemctl enable httpd

  server_port:
    type: OS::Neutron::Port
    properties:
      network_id: { get_param: private_net_id }
      fixed_ips:
        - subnet_id: { get_param: private_subnet_id }
      security_groups: [{ get_resource: server_security_group }]

  server_floating_ip:
    type: OS::Neutron::FloatingIP
    properties:
      floating_network_id: { get_param: public_net_id }
      port_id: { get_resource: server_port }

  server_security_group:
    type: OS::Neutron::SecurityGroup
    properties:
      description: Add security group rules for server
      name: security-group
      rules:
        - remote_ip_prefix: 0.0.0.0/0
          protocol: tcp
          port_range_min: 22
          port_range_max: 22
        - remote_ip_prefix: 0.0.0.0/0
          protocol: icmp
        - remote_ip_prefix: 0.0.0.0/0
          protocol: tcp
          port_range_min: 80
          port_range_max: 80

outputs:
  server_private_ip:
    description: IP address of server in private network
    value: { get_attr: [ server, first_address ] }
  server_public_ip:
    description: Floating IP address of server in public network
    value: { get_attr: [ server_floating_ip, floating_ip_address ] }

 

< 실습 - Stack을 사용해 wordpress 구축 >

1 . 필요한 것

  • template file
  • environmet file

  2. template file   (  수빈♥언니가 준거......참조......)

heat_template_version: 2013-05-23

description: >
  Heat Orchestration Template 
  to deploy instance 
  with existing network 
  and floating ip.

parameters:
  key_name:
    type: string
    description: Name of keypair to assign to servers
  image: 
    type: string
    description: Name of image to use for servers
  flavor: 
    type: string
    description: Flavor to use for servers
  public_net_id: 
    type: string
    description: >
      ID of public network for which floating IP addresses will be allocated
  private_net_id: 
    type: string
    description: ID of private network into which servers get deployed
  private_subnet_id: 
    type: string
    description: ID of private sub network into which servers get deployed

resources:
  server:
    type: OS::Nova::Server
    properties:
      name: Server
      image: { get_param: image }
      flavor: { get_param: flavor }
      key_name: { get_param: key_name }
      networks:
        - port: { get_resource: server_port }
      user_data_format: RAW
      user_data: |
        #!/bin/sh
        cat << EOF > /etc/yum.repos.d/maria.repo
        [mariadb]
        name = MariaDB
        baseurl = http://yum.mariadb.org/10.5/centos7-amd64
        gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
        gpgcheck=1
        EOF
        yum -y install http://ftp.riken.jp/Linux/remi/enterprise/remi-release-7.rpm
        yum-config-manager --disable remi-safe
        yum-config-manager --enable remi-php74
        yum -y install httpd php php-mysqlnd MariaDB-server MariaDB-client
        curl -o /root/wp.tar.gz https://wordpress.org/latest.tar.gz
        tar xf /root/wp.tar.gz -C /var/www/html
        systemctl start mariadb
        systemctl enable mariadb
        mysql -u root -e 'CREATE DATABASE wordpress_db'
        mysql -u root -e "CREATE USER 'wp-admin'@'localhost' IDENTIFIED BY 'P@ssw0rd'"
        mysql -u root -e "GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp-admin'@'localhost' IDENTIFIED BY 'P@ssw0rd'"
        mysql -u root -e "FLUSH PRIVILEGES"
        cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
        sed -i '23s/database_name_here/wordpress_db/g' /var/www/html/wordpress/wp-config.php
        sed -i '26s/username_here/wp-admin/g' /var/www/html/wordpress/wp-config.php
        sed -i '29s/password_here/P@ssw0rd/g' /var/www/html/wordpress/wp-config.php
        systemctl start httpd
        systemctl enable httpd

  server_port:
    type: OS::Neutron::Port
    properties:
      network_id: { get_param: private_net_id }
      fixed_ips:
        - subnet_id: { get_param: private_subnet_id }
      security_groups: [{ get_resource: server_security_group }]

  server_floating_ip:
    type: OS::Neutron::FloatingIP
    properties:
      floating_network_id: { get_param: public_net_id }
      port_id: { get_resource: server_port }

  server_security_group:
    type: OS::Neutron::SecurityGroup
    properties:
      description: Add security group rules for server
      name: security-group
      rules:
        - remote_ip_prefix: 0.0.0.0/0
          protocol: tcp
          port_range_min: 22
          port_range_max: 22
        - remote_ip_prefix: 0.0.0.0/0
          protocol: icmp
        - remote_ip_prefix: 0.0.0.0/0
          protocol: tcp
          port_range_min: 80
          port_range_max: 80

outputs:
  server_private_ip:
    description: IP address of server in private network
    value: { get_attr: [ server, first_address ] }
  server_public_ip:
    description: Floating IP address of server in public network
    value: { get_attr: [ server_floating_ip, floating_ip_address ] }

 

  3. environment file

parameters:
  key_name: dev-key
  image: centos7
  flavor: test4.tiny
  public_net_id: ext-net
  private_net_id: dev-net
  private_subnet_id: dev-subnet

 

4. Launch Stack

  • rollback 체크 → 하나가 실패하면 그 전에 만들어놓은걸 삭제
  • 하나 안되서 새로 해야겠다 → rollback 체크
  • 하나 안되는거 그것만 고치겠다 → rollback 체크 안함.

5.

  • 처음에 public key를 찾을수없다는 오류가 뜬다 → 당연 → private key 알아서 끌어온다.
  • echo $? -> 전에 실행한 프로세스의 리턴코드를 출력(exit code) 0->정상 종료 나머지는 오류

 

 

 

 

 

설치 완전 오래걸림.....

결국 오류남...

다시해보기,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ㅜㅜ 꼭,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

 

 

 

os // 오픈 스택 약자