공부공부 공부공부내용
[6] 오픈스택 실습5 (Heat_Orchestration 기능 중 스택생성) 0702 정리는 끝 , 결과 미확인 본문
오픈스택에서 Heat는 오케스트레이션 기능을 제공한다.
템플릿 기반 으로 다양한 클라우드 어플리케이션을 배치하고 관리 할 수 있는 기능이다.
- 실습할때나 언제든 가상 컴퓨터 관리 잘해줘야한다. (compute 최소 4GB 이상)
-오픈스택 Heat 템플릿으로 테넌트 네트워크, 라우터, 그리고 인스턴스를 생성할 수 있다. 실습에서는 인스턴스를 생성함.
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 // 오픈 스택 약자