├── 00-Other ├── .gitkeep ├── OpenStack Hardware Requirements and Capacity Planning_ Servers, CPU and RAM, Part 1 _ Stratoscale.docx └── Sizing-OpenStack.xlsx ├── 01-KeyStone ├── .gitkeep └── Brant-OpenStack04-Identity-Service01-01.jpg ├── 02-Nova ├── .gitkeep ├── README.md ├── dedicate-cpu-openstack.md ├── images │ ├── ip-live-openstack.png │ └── live-openstack.png ├── live-in-openstack.md ├── nova-filecauhinh.md ├── nova-ghichep.md ├── nova-install.md ├── nova-migrate.md ├── nova-zone.md └── prepare │ └── KVM.md ├── 03-Glance ├── .gitkeep └── Brant_Glance_Notes.jpg ├── 04-Neutron ├── .gitkeep ├── Group based policy.md ├── RBAC-policy.md ├── enable-ipset.md ├── ghichep-neutron.md ├── learning neutron openstack.md └── prevent-arp-spoofing.md ├── 05-Cinder ├── Readme.md ├── docs │ ├── README.md │ ├── Strorage │ │ ├── GlusterFS │ │ │ ├── README.md │ │ │ └── gfs-tongquan.md │ │ └── README.md │ ├── backup-overview.md │ ├── ceph-in-openstack.md │ ├── cinder-cinder_conf.md │ ├── cinder-ghichep.md │ ├── cinder-install.md │ ├── cinder-khainiem.md │ ├── cinder-multiplebackdends-lvm-gfs-nfs.md │ └── cinder-tongquan.md ├── ghichep-cinder.md ├── images │ ├── ceph-in-openstack.png │ ├── cinder-Architect.png │ ├── cinder-attach-flow.png │ └── ip-ceph-openstack.png └── ref │ ├── Cinder.pptx │ └── cinder-havana-131111230629-phpapp02-140506113204-phpapp01.pdf ├── 07-Horizon └── .gitkeep ├── 08-Ceilometer └── .gitkeep ├── 09-Heat └── .gitkeep ├── 10-Trove └── .gitkeep ├── 11. Designate ├── test-designate.md └── test.txt ├── 12.Swift ├── OpenstackSwift-Chapter1 ├── OpenstackSwift-Chapter2 ├── OpenstackSwift-Chapter3 ├── OpenstackSwift-Chapter4 ├── OpenstackSwift-Chapter5 ├── OpenstackSwift-Chapter6 ├── OpenstackSwift-Chapter7 ├── Test Advance API.md ├── Tom-tat-phan1-swiftopenstack.md ├── chu-thich.md ├── ghichep-swift.txt ├── test API └── testswift.py ├── 13-Kolla ├── README.md ├── config_openstack.md ├── file_config │ └── globals.yml ├── kolla-ansible │ ├── Canbangtai.md │ ├── Kolla-Ansible-Docker.md │ └── images │ │ └── openstack-mitaka-network-layout.png └── kolla-kubernetes │ ├── Kolla-Kubernetes.md │ └── Scripts │ └── u-install-kolla-aio.sh ├── Masakari ├── docs │ ├── masakari-monitors.md │ ├── masakari-python-client.md │ ├── masakari.md │ └── overview-masakari.md └── images │ └── masakari-workflow.png ├── OpenStack-Mitaka ├── README.md └── viethoa-mitaka │ └── horizon │ ├── horizon │ ├── django.po │ └── djangojs.po │ └── openstack_dashboard │ ├── django.po │ └── djangojs.po ├── OpenStack-Ocata ├── README.md ├── docs │ ├── Keystone_lab_co_ban.md │ ├── Launch.md │ ├── Tao_may_ao_voi_dashboard.md │ ├── cinder_cac_lenh_co_ban.md │ ├── cinder_file_conf.md │ ├── cinder_lab_co_ban.md │ ├── cinder_overview.md │ ├── glance_cac_lenh_co_ban.md │ ├── glance_curl.md │ ├── glance_difine_role.md │ ├── glance_file_conf.md │ ├── glance_lab_co_ban.md │ ├── glance_multi_location_storage.md │ ├── glance_overview.md │ ├── install.md │ ├── keysotne_Chuyen_Tu_Fernet_Sang_UUID.md │ ├── keystone_cac_lenh_hay_dung.md │ ├── keystone_difine_role.md │ ├── keystone_file_conf.md │ ├── keystone_overview.md │ ├── keystone_set_time_token.md │ ├── nfs_install.md │ ├── nova_file_conf.md │ ├── nova_lab_co_ban.md │ ├── nova_lenh_co_ban.md │ ├── nova_overview.md │ ├── swift_cac_lenh_co_ban.md │ ├── swift_file_config.md │ ├── swift_install.md │ ├── swift_lab_co_ban.md │ └── swift_overview.md └── images │ ├── IPBlock.png │ ├── add_rule_1.png │ ├── add_rule_2.png │ ├── add_rule_3.png │ ├── architectureglane.png │ ├── cinder.png │ ├── diskimg.png │ ├── diskv.png │ ├── flavor_1.png │ ├── flavor_2.png │ ├── floating_1.png │ ├── floating_2.png │ ├── floating_3.png │ ├── floating_4.png │ ├── floating_5.png │ ├── glane_component.png │ ├── hypervisor.png │ ├── layoutnet.png │ ├── layoutswift.png │ ├── login.png │ ├── network_1.png │ ├── network_2.png │ ├── network_3.png │ ├── network_4.png │ ├── network_5.png │ ├── network_6.png │ ├── network_admin_1.png │ ├── network_admin_2.png │ ├── network_admin_3.png │ ├── network_admin_4.png │ ├── nfs_server.png │ ├── nova-compute.png │ ├── ping.png │ ├── quota.png │ ├── router_1.png │ ├── router_2.png │ ├── router_3.png │ ├── router_4.png │ ├── router_5.png │ ├── statusflow.jpg │ ├── swift_create.png │ ├── swift_keystone.png │ ├── swift_logic.png │ ├── swift_modeinstall.png │ ├── swift_physical.png │ ├── swift_servers.png │ ├── topology.png │ ├── vm04.png │ ├── vm1.png │ ├── vm2.png │ ├── vm3.png │ ├── vm4.png │ ├── vm5.png │ ├── vm6.png │ ├── vm7.png │ ├── vm8.png │ ├── vm_1.png │ ├── vm_2.png │ ├── vm_3.png │ ├── vm_4.png │ ├── vm_5.png │ ├── vm_6.png │ ├── vm_7.png │ ├── vm_keypair.png │ ├── vm_keypair_1.png │ ├── vm_keypair_10.png │ ├── vm_keypair_11.png │ ├── vm_keypair_12.png │ ├── vm_keypair_13.png │ ├── vm_keypair_14.png │ ├── vm_keypair_15.png │ ├── vm_keypair_2.png │ ├── vm_keypair_3.png │ ├── vm_keypair_4.png │ ├── vm_keypair_5.png │ ├── vm_keypair_6.png │ ├── vm_keypair_7.png │ ├── vm_keypair_8.png │ ├── vm_keypair_9.png │ └── vmv.png ├── OpenStack-Pike ├── docs │ ├── install_basic.md │ ├── manila_install.md │ ├── swift_bai_1_storage_policy.md │ └── swift_bai_2_scale.md ├── images │ ├── ip_manila.png │ ├── ip_pike.png │ ├── manila_layout.png │ ├── pike.png │ ├── swift_ip_scale.png │ └── swift_layout.png └── readme.md ├── README.md └── images ├── Mitaka-topo.png ├── README.md ├── cinder-Architect.png ├── cinder-attach-flow.png ├── cinder ├── add_volume.png ├── bootable.png ├── check_backends.png ├── cinder-nova-workflow.png ├── cinder-process-diagram.png ├── cinder-service.png ├── cinder-type-list.png ├── cinder_test_nfs.png ├── create-new-volume-diagram.png ├── create-success.png ├── create-volume-1.png ├── create-volume-gfs.png ├── create-volume.png ├── dashboard.png ├── details.png ├── flavor.png ├── flavor_list.png ├── gfs-mount.png ├── image_list.png ├── img.png ├── instane.png ├── instane_id.png ├── kiemtra-gfs.png ├── launch-instane.png ├── launch_instane_volume.png ├── lsbsk.png ├── mohinh-re.png ├── mohinh.png ├── multiple_backends-mohinh.png ├── network.png ├── network_list.png ├── nfs-mount.png ├── phanhoach-multiple.png ├── phanvung-gfs.png ├── server_list_succ.png ├── service_list_test.png ├── source.png ├── storage │ ├── Replicated_Volume.png │ ├── backup_list.png │ ├── bricks.png │ ├── dis_volume.png │ ├── dr_volume.png │ ├── ds_volume.png │ ├── file_backup.png │ ├── ip_plan.png │ ├── kq_lenh.png │ ├── mohinh_nfs_backup.png │ ├── rs_volume.png │ ├── stripe_volume.png │ └── volume.png ├── table-phanhoach.png ├── vm.png ├── volume-list.png ├── volume-properties.png ├── volume.png ├── volume_create_succ.png ├── volume_id.png └── volume_list_instane.png └── nova ├── brctl.png ├── brctl_show.png ├── moba_config.png └── test_boot.png /00-Other/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/00-Other/.gitkeep -------------------------------------------------------------------------------- /00-Other/OpenStack Hardware Requirements and Capacity Planning_ Servers, CPU and RAM, Part 1 _ Stratoscale.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/00-Other/OpenStack Hardware Requirements and Capacity Planning_ Servers, CPU and RAM, Part 1 _ Stratoscale.docx -------------------------------------------------------------------------------- /00-Other/Sizing-OpenStack.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/00-Other/Sizing-OpenStack.xlsx -------------------------------------------------------------------------------- /01-KeyStone/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/01-KeyStone/.gitkeep -------------------------------------------------------------------------------- /01-KeyStone/Brant-OpenStack04-Identity-Service01-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/01-KeyStone/Brant-OpenStack04-Identity-Service01-01.jpg -------------------------------------------------------------------------------- /02-Nova/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/02-Nova/.gitkeep -------------------------------------------------------------------------------- /02-Nova/README.md: -------------------------------------------------------------------------------- 1 | # Ghi chép về nova 2 | 3 | [1. Các kiến thức liên quan để tìm hiểu nova](https://github.com/hocchudong/ghichep-OpenStack/tree/master/02-Nova/prepare) 4 | 5 | [2. Cài đặt nova](https://github.com/hocchudong/ghichep-OpenStack/blob/master/02-Nova/nova-install.md) 6 | 7 | [3. Chi tiết file cấu hình nova.conf](https://github.com/hocchudong/ghichep-OpenStack/blob/master/02-Nova/nova-filecauhinh.md) 8 | 9 | [4. Ghi chép nova](https://github.com/hocchudong/ghichep-OpenStack/blob/master/02-Nova/nova-ghichep.md) 10 | 11 | [5. Nova Zone](https://github.com/hocchudong/ghichep-OpenStack/blob/master/02-Nova/nova-zone.md) 12 | 13 | [6. Nova Migrate](https://github.com/hocchudong/ghichep-OpenStack/blob/master/02-Nova/nova-migrate.md) -------------------------------------------------------------------------------- /02-Nova/dedicate-cpu-openstack.md: -------------------------------------------------------------------------------- 1 | # Dedicated CPU cho instance trong Openstack 2 | 3 | 4 | ### Mục lục 5 | - [1. Vấn đề sử dụng](#issue) 6 | - [2. Yêu cầu trước khi thực hiện](#require) 7 | - [3. Cách thực hiện cấu hình](#config) 8 | - [4. Kiểm tra kết quả](#summary) 9 | 10 | 11 | ### Nội dung 12 | 13 | - #### 1. Vấn đề sử dụng 14 | - Dựa trên khái niệm của IBM đưa ra, `dedicated CPU` cho instance là việc một hay nhiều CPU vật lý sẽ được gán cho một instance duy nhất. 15 | - Việc `dedicated CPU` được sử dụng trong trường hợp instance nào đó hoạt động cần rất nhiều hiệu năng của CPU mà không thể sử dụng chung CPU với các instance khác. 16 | 17 | 18 | - #### 2. Yêu cầu trước khi thực hiện 19 | - Các node compute cần có CPU được hỗ trợ `KVM feature`. Để kiểm tra, ta sử dụng câu lệnh: 20 | 21 | egrep -c '(vmx|svm)' /proc/cpuinfo 22 | 23 | nếu kết quả trả về là một giá trị lớn hơn 0 thì có nghĩa là ta có thể thực hiện dedicated. 24 | 25 | - Ta cần phải đảm bảo `libvirt` được cấu hình sử dụng `KVM` thay vì sử dụng `QEMU`. Bằng cách thực hiện sửa hoặc thêm nội dung sau vào file `/etc/nova/nova-compute.conf`: 26 | 27 | virt_type = kvm 28 | 29 | sau đó hãy restart lại dịch vụ `nova-compute`: 30 | 31 | service nova-compute restart 32 | 33 | 34 | - #### 3. Cách thực hiện cấu hình 35 | - Đầu tiên, ta cần đảm bảo rằng trên các node compute sẽ cần phải không dụng đến các CPU mà ta dự định sẽ thực hiện sử dụng nó gán cho instances. Các bước thực hiện lần lượt như sau: 36 | 37 | - Kiểm tra số lượng CPU được cung cấp cho node compute: 38 | 39 | lscpu 40 | 41 | kết quả sẽ hiển thị tương tự như sau: 42 | 43 | Architecture: x86_64 44 | CPU op-mode(s): 32-bit, 64-bit 45 | Byte Order: Little Endian 46 | CPU(s): 8 47 | On-line CPU(s) list: 0-7 48 | Thread(s) per core: 1 49 | Core(s) per socket: 4 50 | Socket(s): 2 51 | 52 | theo như kết quả hiển thị trên, ta thấy node compute được cung cấp 8 CPU. Giả sử, ta sẽ thực hiện dedicated CPU với các CPU `4,5,6,7`. Ta cần thực hiện `isolate` các CPU này để đảm bảo nó không được sử dụng bởi node compute bằng cách thực hiện thêm nội dung sau vào file `/etc/default/grub`: 53 | 54 | quiet isolcpus=4-7 55 | 56 | update GRUB: 57 | 58 | grub-mkconfig -o /boot/grub2/grub.cfg 59 | 60 | sau đó thực hiện restart lại node compute và kiểm tra kết quả việc isolate trên bằng cách xem nội dung `quiet isolcpus=4-7` đã xuất hiện trong file `/proc/cmdline` hay chưa. Nếu thành công, ta sẽ thấy tương tự như sau: 61 | 62 | BOOT_IMAGE=/vmlinu ... ro quiet isolcpus=4-7 63 | 64 | hoặc sử dụng câu lệnh: 65 | 66 | cat /proc/$$/status|tail -6 67 | 68 | kết quả sẽ hiển thị tương tự như sau: 69 | 70 | Cpus_allowed: 0f 71 | Cpus_allowed_list: 0-3 72 | 73 | 74 | - Cấu hình cho `nova-compute` bằng cách thêm hoặc sửa nội dung sau trong file `/etc/nova/nova.conf`: 75 | 76 | vcpu_pin_set = "4-7" 77 | 78 | sau đó restart lại `nova-compute` 79 | 80 | 81 | 82 | - #### 4. Kiểm tra kết quả 83 | 84 | - Để tạo ra một instance được `dedicated CPU`. Ta cần tạo một flavor được hỗ trợ `hw:cpu_policy` và `hw:cpu_policy`. Giả sử: 85 | 86 | openstack flavor set m1.numa \ 87 | --property hw:cpu_policy=dedicated \ 88 | --property hw:cpu_thread_policy=isolate 89 | 90 | - Ta tiến hành tạo mới một instance với flavor trên và kiểm tra log của node compute (`/var/log/nova/nova-compute.log`) mà thực hiện tạo instance đó. Ta sẽ thấy kết quả tương tự như sau: 91 | 92 | Computed NUMA topology CPU pinning: usable pCPUs: [[4], [5], [6], [7]], vCPUs mapping: [(0, 4)] 93 | 94 | tạo thêm một instance như trên, ta sẽ thấy log xuất hiện: 95 | 96 | Computed NUMA topology CPU pinning: usable pCPUs: [[5], [6], [7]], vCPUs mapping: [(0, 5)] 97 | 98 | Như vậy, ta đã thực hiện được việc `dedicated CPU` cho instance. 99 | -------------------------------------------------------------------------------- /02-Nova/images/ip-live-openstack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/02-Nova/images/ip-live-openstack.png -------------------------------------------------------------------------------- /02-Nova/images/live-openstack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/02-Nova/images/live-openstack.png -------------------------------------------------------------------------------- /02-Nova/live-in-openstack.md: -------------------------------------------------------------------------------- 1 | # Cấu hình live-migrate trong Openstack 2 | 3 | 4 | # Mục lục 5 | 6 | - [1. Mô hình thực hiện](#model) 7 | - [2. Cách cấu hình](#config) 8 | - [3. Kiểm tra kết quả](#result) 9 | 10 | 11 | # Nội dung 12 | - ### 1. Mô hình thực hiện 13 | - Mô hình thực hiện có thể được miêu tả như hình sau: 14 | 15 | ![live-openstack.png](images/live-openstack.png) 16 | 17 | và các node có địa chỉ IP như sau: 18 | 19 | ![ip-live-openstack.png](images/ip-live-openstack.png) 20 | 21 | - Các câu lệnh được thực hiện với người dùng root. 22 | - Hệ điều hành sử dụng trên các node là: Ubuntu 16.04 23 | - Hệ thống đã được cài đặt Openstack. Trên 2 node `block01` và `block02` cung cấp storage backend là `lvm` 24 | - Trong Openstack có volume type với property là `volume_backend_name=lvm` 25 | 26 | - ### 2. Cách cấu hình 27 | 28 | - Việc cấu hình sẽ được thực hiện trên 2 node `compute01` và `compute02` là giống nhau. 29 | - Đầu tiên, ta sẽ cấu hình cho KVM-libvirt bằng việc chỉnh sửa nội dung file `/etc/nova/nova.conf` như sau: 30 | 31 | server_listen = 0.0.0.0 32 | 33 | giá trị của `state_path` trong `[DEFAULT]` nếu có phải giống nhau trên cả 2 node để đảm bảo cho giá trị của `instances_path` giống nhau với nội dung là `/var/lib/nova/instances`. Như vậy, ta có thể cấu hình như sau: 34 | 35 | [DEFAULT] 36 | ... 37 | state_path = /var/lib/nova 38 | 39 | hoặc: 40 | 41 | instances_path = /var/lib/nova/instances 42 | 43 | tiếp theo, là cấp quyền execute/search bit cho path `instances`: 44 | 45 | chmod o+x /var/lib/nova/instances 46 | 47 | - Tiếp theo, ta thực hiện cấu hình `livirtd` bằng cách thực hiện như sau: 48 | sửa nội dung file `/etc/libvirt/libvirtd.conf`: 49 | 50 | ... 51 | listen_tls = 0 52 | listen_tcp = 1 53 | tcp_port = "16509" 54 | listen_addr = "0.0.0.0" 55 | unix_sock_group = "libvirtd" 56 | unix_sock_ro_perms = "0777" 57 | unix_sock_rw_perms = "0770" 58 | auth_unix_ro = "none" 59 | auth_unix_rw = "none" 60 | auth_tcp = "none" 61 | 62 | sửa nội dung file `/etc/default/libvirtd`: 63 | 64 | start_libvirtd = "yes" 65 | libvirtd_opts = "-l -d" 66 | 67 | - Cuối cùng, ta khởi động lại services: 68 | 69 | service nova-compute restart 70 | service libvirtd restart 71 | 72 | - ### 3. Kiểm tra kết quả 73 | - Thực hiện tạo một volume image mới: 74 | 75 | openstack volume create --size 20 --image cirros --type sdb-lvm sdb-lvm_cirros_volume_20G 76 | 77 | trong đó: 78 | - `cirros`: tên một image 79 | - `sdb-lvm`: tên volume type có property là `volume_backend_name=lvm` 80 | 81 | - Thực hiện tạo một server mới: 82 | 83 | openstack server create --flavor m1.small --volume sdb-lvm_cirros_volume_20G --network gateway_net gateway_net_sdb-lvm_cirros_instances 84 | 85 | - Thực hiện migrate: 86 | SSH vào server vừa tạo và thực hiện ping ra ngoài. Sau đó, ta sử dụng câu lệnh sau: 87 | 88 | openstack server migrate --live hostname gateway_net_sdb-lvm_cirros_instances 89 | 90 | trong đó: 91 | - `hostname` là tên host cần migrate instance tới. 92 | -------------------------------------------------------------------------------- /02-Nova/nova-filecauhinh.md: -------------------------------------------------------------------------------- 1 | # Giải thích file cấu hình nova.conf 2 | 3 | ## 1. File cấu hình nova.conf 4 | 5 | ```sh 6 | [DEFAULT] 7 | dhcpbridge_flagfile=/etc/nova/nova.conf 8 | dhcpbridge=/usr/bin/nova-dhcpbridge 9 | logdir=/var/log/nova 10 | state_path=/var/lib/nova 11 | lock_path=/var/lock/nova 12 | force_dhcp_release=True 13 | libvirt_use_virtio_for_bridges=True 14 | verbose=True 15 | ec2_private_dns_show_ip=True 16 | api_paste_config=/etc/nova/api-paste.ini 17 | enabled_apis=ec2,osapi_compute,metadata 18 | rpc_backend = rabbit 19 | auth_strategy = keystone 20 | my_ip = 10.10.10.20 21 | use_neutron = True 22 | firewall_driver = nova.virt.firewall.NoopFirewallDriver 23 | 24 | 25 | [oslo_messaging_rabbit] 26 | rabbit_host = 10.10.10.10 27 | rabbit_userid = openstack 28 | rabbit_password = Anhdat96 29 | 30 | 31 | [keystone_authtoken] 32 | auth_uri = http://10.10.10.10:5000 33 | auth_url = http://10.10.10.10:35357 34 | memcached_servers = 10.10.10.10:11211 35 | auth_type = password 36 | project_domain_name = default 37 | user_domain_name = default 38 | project_name = service 39 | username = nova 40 | password = Anhdat96 41 | 42 | 43 | [vnc] 44 | enabled = True 45 | vncserver_listen = 0.0.0.0 46 | vncserver_proxyclient_address = $my_ip 47 | novncproxy_base_url = http://172.16.1.128:6080/vnc_auto.html 48 | 49 | 50 | [glance] 51 | api_servers = http://10.10.10.10:9292 52 | 53 | 54 | [oslo_concurrency] 55 | lock_path = /var/lib/nova/tmp 56 | 57 | 58 | [neutron] 59 | url = http://10.10.10.10:9696 60 | auth_url = http://10.10.10.10:35357 61 | auth_type = password 62 | project_domain_name = default 63 | user_domain_name = default 64 | region_name = RegionOne 65 | project_name = service 66 | username = neutron 67 | password = Anhdat96 68 | 69 | ``` 70 | 71 | ## 2. Giải thích file cấu hình . 72 | 73 | ### 2.1. Khai báo về Message Queue 74 | 75 | ```sh 76 | [DEFAULT] 77 | ... 78 | rpc_backend = rabbit 79 | 80 | [oslo_messaging_rabbit] 81 | ... 82 | rabbit_host = controller 83 | rabbit_userid = openstack 84 | rabbit_password = RABBIT_PASS 85 | ``` 86 | 87 | - rpc_backend = rabbit : Trình điều khiển message được sử dụng mặc định là rabbitMQ. 88 | - rabbit_host = controller : IP(host) của RabbitMQ server (node Controller) 89 | - rabbit_userid = openstack : User để kết nối với RabbitMQ server 90 | - rabbit_password = RABBIT_PASS : Password của RabbitMQ server 91 | 92 | ### 2.2. Khai báo về xác thực Keystone. 93 | 94 | ```sh 95 | [DEFAULT] 96 | ... 97 | auth_strategy = keystone 98 | 99 | [keystone_authtoken] 100 | ... 101 | auth_uri = http://controller:5000 102 | auth_url = http://controller:35357 103 | memcached_servers = controller:11211 104 | auth_type = password 105 | project_domain_name = default 106 | user_domain_name = default 107 | project_name = service 108 | username = nova 109 | password = NOVA_PASS 110 | ``` 111 | 112 | - auth_strategy = keystone : Cấu hình sử dụng keystone để xác thực. Hỗ trợ noauth và deprecated 113 | - auth_uri = http://controller:5000 : Cấu hình enpoint Identity service 114 | - auth_url = http://controller:5000 : URL để xác thực Identity service 115 | - memcached_servers = controller:11211 : Địa chỉ Memcache-server 116 | - auth_type = password : Hình thức xác thực sử dụng password 117 | - project_domain_name = default : Chỉ định project domain name openstack 118 | - user_domain_name = default : Chỉ định user domain name openstack 119 | - project_name = service : Chỉ định project name openstack 120 | - username = nova : Chỉ định username của nova 121 | - password = NOVA_PASS : Chỉ đinh pass của nova 122 | 123 | ### 2.3. IP management 124 | 125 | ```sh 126 | [DEFAULT] 127 | ... 128 | my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS 129 | ``` 130 | 131 | - my_ip = 192.168.11.12 : Địa chỉ IP management của Compute node 132 | 133 | ### 2.4. Cấu hình Networking . 134 | 135 | ```sh 136 | [DEFAULT] 137 | ... 138 | use_neutron = True 139 | firewall_driver = nova.virt.firewall.NoopFirewallDriver 140 | ``` 141 | 142 | - use_neutron = True : Cấu hình xác nhận sử dụng Neutron Networking 143 | - firewall_driver = nova.virt.firewall.NoopFirewallDriver : Mặc định Compute sử dụng một internal firewall service cho tới khi Networking cũng bao gồm một 144 | firewall service , chúng ta phải disable Compute firewall service bằng cách sử dụng Friver `nova.virt.firewall.NoopFirewallDriver` 145 | 146 | ### 2.5. Cấu hình VNC. 147 | 148 | ```sh 149 | [vnc] 150 | ... 151 | enabled = True 152 | vncserver_listen = 0.0.0.0 153 | vncserver_proxyclient_address = $my_ip 154 | novncproxy_base_url = http://controller:6080/vnc_auto.html 155 | ``` 156 | - enabled = True : Cho phép sử dụng vnc. 157 | - vncserver_listen = 0.0.0.0 : Cấu hình địa chỉ lắng nghe của vnc server (ở đây là trên tất cả các địa chỉ). 158 | - vncserver_proxyclient_address = $my_ip : Cấu hình proxy lắng nghe trên IP của compute node. 159 | - novncproxy_base_url = http://controller:6080/vnc_auto.html : Cấu hình đường dẫn nơi chúng ta có thể sử dụng trình duyệt web để chúng ta có thể remote access sonsole 160 | VM trên node Compute. 161 | 162 | ### 2.6. Cấu hình Glane API . 163 | 164 | ```sh 165 | [glance] 166 | ... 167 | api_servers = http://controller:9292 168 | ``` 169 | 170 | - api_servers = http://controller:9292 : Cấu hình enpoint của Glane. 171 | 172 | ### 2.7. cấu hình lock_path : 173 | 174 | ```sh 175 | [oslo_concurrency] 176 | ... 177 | lock_path = /var/lib/nova/tmp 178 | ``` 179 | 180 | - Thư mục sử dụng cho các tệp khóa , mặc định là thư mục temp -------------------------------------------------------------------------------- /02-Nova/nova-ghichep.md: -------------------------------------------------------------------------------- 1 | # Ghi chép về Nova 2 | 3 | ## Các lệnh thường dùng với NOVA . 4 | 5 | - Tạo một flavor mới : 6 | 7 | ```sh 8 | nova flavor-create --is-public true m1.coolhardware 100 2048 20 2 9 | 10 | +-----+-----------------+-----------+------+-----------+------+-------+-------------+-----------+ 11 | | ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public | 12 | +-----+-----------------+-----------+------+-----------+------+-------+-------------+-----------+ 13 | | 100 | m1.coolhardware | 2048 | 20 | 0 | | 2 | 1.0 | True | 14 | +-----+-----------------+-----------+------+-----------+------+-------+-------------+-----------+ 15 | 16 | # set extra_specs : 17 | 18 | nova flavor-key 100 set coolhardware=true 19 | 20 | nova flavor-show 100 21 | 22 | +----------------------------+--------------------------+ 23 | | Property | Value | 24 | +----------------------------+--------------------------+ 25 | | OS-FLV-DISABLED:disabled | False | 26 | | OS-FLV-EXT-DATA:ephemeral | 0 | 27 | | disk | 20 | 28 | | extra_specs | {"coolhardware": "true"} | 29 | | id | 100 | 30 | | name | m1.coolhardware | 31 | | os-flavor-access:is_public | True | 32 | | ram | 2048 | 33 | | rxtx_factor | 1.0 | 34 | | swap | | 35 | | vcpus | 2 | 36 | +----------------------------+--------------------------+ 37 | 38 | 39 | ``` 40 | 41 | 42 | # Tham Khảo : 43 | 44 | - http://ken.pepple.info/openstack/2011/04/22/openstack-nova-architecture/ 45 | - https://blog.russellbryant.net/2013/05/21/availability-zones-and-host-aggregates-in-openstack-compute-nova/ 46 | - https://wiki.openstack.org/wiki/LiveMigrationWorkflows 47 | - http://qiita.com/idzzy/items/98967887a0d3771a7795 -------------------------------------------------------------------------------- /02-Nova/prepare/KVM.md: -------------------------------------------------------------------------------- 1 | # Lab KVM . 2 | 3 | ## I. Mô hình. 4 | 5 | ## II. Thực hiện cài đặt. 6 | 7 | - Cài đặt KVM và các gói liên quan : 8 | 9 | ```sh 10 | apt-get install qemu-kvm libvirt-bin -y 11 | ``` 12 | 13 | - Cài đặt Linux-Bridge : 14 | 15 | ```sh 16 | apt-get install bridge-utils 17 | ``` 18 | 19 | - Sau khi cài đặt xong dùng lệnh `brctl` để kiểm tra : 20 | 21 | ```sh 22 | brctl 23 | ``` 24 | 25 | ![brctl](/images/nova/brctl.png) 26 | 27 | 28 | - Tại bridge với tên `br0` : 29 | 30 | ```sh 31 | brctl addbr br0 32 | ``` 33 | 34 | - Gán interface `eth0` vào `br0` : 35 | 36 | ```sh 37 | brctl addif br0 eth0 38 | ``` 39 | 40 | - Kiểm tra : 41 | 42 | ```sh 43 | brctl show 44 | ``` 45 | 46 | ![brctl_show](/images/nova/brctl_show.png) 47 | 48 | - Sửa lại file cấu hình networking : 49 | 50 | ```sh 51 | vi /etc/network/interfaces 52 | ``` 53 | 54 | - Sửa lại như sau : 55 | 56 | ```sh 57 | #auto eth0 58 | #iface eth0 inet dhcp 59 | 60 | auto br0 61 | iface br0 inet dhcp 62 | bridge_ports eth0 63 | bridge_stp off 64 | bridge_fd 0 65 | bridge_maxwait 0 66 | ``` 67 | 68 | - Xóa địa chỉ của card eth0 (card thực hiện gắn vào br0) : 69 | 70 | ```sh 71 | ip addr del ip/netmask dev eth0 72 | ``` 73 | 74 | - Lấy lại cấu hình mới nhất cho mạng : 75 | 76 | ```sh 77 | ifdown -a && ifup -a 78 | ``` 79 | 80 | ## III Thực hiện tạo máy ảo trên KVM. 81 | 82 | - Tạo ra thư mục lưu trữ các images : 83 | 84 | ```sh 85 | mkdir -p /var/lib/images 86 | ``` 87 | 88 | - Thực hiện upload file `.iso` của hệ điều hành vào thư mục đó (có thể dùng winscp hay bất cứ phần mềm chuyển file nào tương tự) 89 | 90 | - Trên `Moba X-term` Thực hiện cấu hình X11 remote access ở chế độ full : 91 | 92 | ![moba_config](/images/nova/moba_config.png) 93 | 94 | - Thực hiện cài đặt gói `virt-manager` : 95 | 96 | ```sh 97 | apt-get install virt-manager 98 | ``` 99 | 100 | - Sau khi cài đặt xong trên trình ssh (Moba X-term), thực hiện lệnh : 101 | 102 | ```sh 103 | virt-manager 104 | ``` 105 | 106 | - Sau đó thực hiện tạo máy ảo như bình thường.\ 107 | 108 | # Đang bổ sung ... -------------------------------------------------------------------------------- /03-Glance/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/03-Glance/.gitkeep -------------------------------------------------------------------------------- /03-Glance/Brant_Glance_Notes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/03-Glance/Brant_Glance_Notes.jpg -------------------------------------------------------------------------------- /04-Neutron/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/04-Neutron/.gitkeep -------------------------------------------------------------------------------- /04-Neutron/Group based policy.md: -------------------------------------------------------------------------------- 1 | ### Group based policy 2 | 3 | 1. GBP là gì: 4 | GBP là 1 openstack API framework cung cấp 1 mô hình miêu tả các yêu cầu về ứng dụng mà không phụ thuộc vào cơ sở hạ tầng. 5 | GBP tạo 1 tập hợp các group với các chính sách nhằm miêu tả kết nối giữa các group đó. Hiện nay GBP chỉ tập trung vào network, nhưng trong tương lai nó sẽ mở rộng ra những dịch vụ khác. 6 | 7 | 2. Tại sao cần GBP 8 | GBP thu thập những yêu cầu và triển khai những ứng dụng phức tạp trong openstack. Nó tạo sự kết nối giữa người phát triển ứng dụng và người quản trị hệ thống 9 | - Dependency mapping: GBP cho phép người dùng chỉ định mối quan hệ giữa các lớp ứng dụng, và cho phép chúng phát triển độc lập với nhau. Đồng thời giúp đơn giản hóa việc co dãn và tự động hóa tài nguyên 10 | - Separation of concerns: GBP tách riêng những yêu cầu bảo mật về ứng dụng (ai có thể nói chuyện vs ai) với những yêu cầu về network . Điều này cho phép các nhóm phát triển khác nhau có thể hoạt động độc lập mà vẫn hợp tác dc vs nhau. 11 | - Network service chaning: GBP trửu tượng hóa các dịch vụ network và cho phép người dùng miêu tả các yêu cầu về network như 1 phần của triển khai ứng dụng . 12 | 13 | 3. GBP hoạt động ntn: 14 | GBP cung cấp giao diện API có thể truy cập thông qua Horizon(group-based-policy-ui), heat (group-based-policy-automation), hoặc CLI (group-based-policy-client). 15 | Nó đóng vai trò như 1 thành phần nằm phía trên neutron. GBP cung cấp 2 cơ chế map tới cơ sở hạ tầng: 16 | - Neutron mapping driver: chuyển những tài nguyên GBP(các policy) thành lời gọi neutron api. 17 | - Native drivers: Các policy được dịch thông qua SDN controller mà không cần dịch sang neutron api. 18 | 19 | 4. Mô hình GBP: 20 | - Policy target: 1 network endpoint riêng biệt(NIC). Đây là thành phần cơ bản nhất trong mô hình GBP. Có thể map trực tiếp tới network port 21 | - Policy group: gồm nhiều policy target có chung thuộc tính, có thể map tới các subnet. Policy group sẽ tương tác với các rule set bằng 2 cách thức: provide hoặc consume 22 | - Policy Classifier: cách thức lọc traffic network thông qua các thuộc tính như port, giao thức và hướng (in, out hoặc bidirectional) 23 | - Policy action: quyết định đối với 1 gói tin khi thỏa mãn rule nào đấy. Có thể định nghĩa là allow, redirect, log... 24 | - Policy rule sets: tập hợp của nhiều policy rules. 1 policy rule bao gồm policy classifier và policy action. 25 | 26 | GBP thích hợp với các ứng dụng đa tầng, khi mà mỗi tầng ứng dụng được gán bởi 1 group policy khác nhau. 27 | 28 | 29 | 5 . Triển khai GBP trên môi trường openstack: 30 | - Thêm dòng sau vào file **/etc/apt/sources.list**: 31 | 32 | deb http://ppa.launchpad.net/group-based-policy-drivers/ppa/ubuntu utopic main 33 | 34 | - Cài đặt GBP packages: 35 | 36 | sudo apt-get update 37 | sudo apt-get install group-based-policy group-based-policy-automation group-based-policy-ui python-group-based-policy-client 38 | 39 | - Thêm GBP plugin và driver vào **/etc/neutron/neutron.conf** trên node network và controller: 40 | 41 | service_plugins =group_policy,servicechain 42 | ... 43 | [group_policy] 44 | policy_drivers = implicit_policy, resource_mapping 45 | ... 46 | [servicechain] 47 | servicechain_drivers = simplechain_driver 48 | 49 | - Update GBP packages: 50 | 51 | sed -i 's/gbpautomation/group_based_policy_automation/g' /usr/lib/python2.7/dist-packages/gbpautomation/__init__.py 52 | 53 | - Thêm GBP vào dashboard: 54 | 55 | ln -s /usr/lib/python2.7/dist-packages/gbpui/_*project*.py /usr/share/openstack-dashboard/openstack_dashboard/enabled 56 | 57 | - Tạo GBP database: 58 | 59 | gbp-db-manage --config-file /etc/neutron/neutron.conf upgrade head 60 | 61 | - Khởi động lại các dịch vụ: 62 | 63 | service neutron-server restart 64 | service heat-api restart 65 | service heat-api-cfn restart 66 | service heat-engine restart 67 | service apache2 restart 68 | 69 | Hoàn thành cài đặt GBP trên openstack. Giờ ta có thể sử dụng GBP API thông qua giao diện dòng lệnh CLI hoặc trực tiếp trên dashboard của openstack. 70 | 71 | 72 | -------------------------------------------------------------------------------- /04-Neutron/RBAC-policy.md: -------------------------------------------------------------------------------- 1 | ###Role-based access control for network openstack 2 | Trong các phiên bản openstack cũ, Neutron cung cấp cho người dùng tính năng chia sẻ tài nguyên mạng giữa các tenant. Khi 1 tài nguyên mạng được chỉ định là **shared**, thì nó sẽ được chia sẻ cho tất cả các tenant trong môi trường openstack. Điều này có nghĩa, 1 tài nguyên chỉ có thể shared cho tất cả hoặc không shared cho bất kì tenant nào (all-or-nothing). Điều này gây ra nhiều bất tiện và đôi khi, dẫn tới cả các rủi ro về bảo mật và quyền riêng tư. 3 | 4 | Để giải quyết vấn đề này, từ phiên bản liberty, openstack cung cấp tính năng role-based access control cho network (RBAC), cho phép người dùng có thể chỉ định việc chia sẻ tài nguyên mạng với 1 nhóm tenant xác định. 5 | 6 | #####RBAC command 7 | Để quản lí RBAC, neutron cung cấp 1 số api mới trong neutron client: 8 | 9 | rbac-create 10 | rbac-delete 11 | rbac-list 12 | rbac-show 13 | rbac-update 14 | 15 | từ những api này ta có thể tạo nên role-based access controll table với các entries quy định việc chia sẻ tài nguyên mạng giữa các tenant thông qua object type, target tenant, action và RBAC_OBJECT 16 | 17 | usage: rbac-create [-h] [-f {html,json,shell,table,value,yaml}] [-c COLUMN] 18 | [--max-width ] [--prefix PREFIX] 19 | [--request-format {json,xml}] [--tenant-id TENANT_ID] 20 | --type {network} [--target-tenant TARGET_TENANT] --action 21 | {access_as_external,access_as_shared} 22 | RBAC_OBJECT 23 | 24 | - object type: kiểu tài nguyên cần chia sẻ (network, port, subnet...) Hiện tại mới chỉ support việc chia sẻ tài nguyên network. 25 | - target tenant: là UUID của tenant được share phần tài nguyên này 26 | - action: access_as_external hoặc access_as_shared 27 | - RBAC_OBJECT: là UUID của phần tài nguyên muốn chia sẻ 28 | 29 | Để tạo 1 RBAC policy, trước tiên ta tạo 3 tenant A B C với các user tương ứng là userA, userB và userC: 30 | 31 | 32 | 33 | 34 | 35 | Tiếp theo, tạo 1 network có tên rbac-network với user admin: 36 | 37 | 38 | 39 | Ở đây ta để ý trường shared network được set là false, tức là chỉ được sử dụng bởi user admin. Nếu trường này được set là true, vùng mạng này sẽ được chia sẻ cho tất cả các tenant, đây là điều mà ta không mong muốn. 40 | 41 | Tạo 1 subnet trong vùng mạng này: 42 | 43 | 44 | 45 | #####Tạo RBAC policy: 46 | 47 | Ta sẽ gán quyền truy cập vào network rbac-net cho các user trong tenantA thông qua rbac policy. Nhưng trước tiên, ta kiểm tra sự tồn tại của rbac-net: 48 | 49 | - Đăng nhập với user admin, ta thấy sự xuất hiện của rbac-net: 50 | 51 | 52 | 53 | - Đăng nhập bằng UserA thuộc tenantA, không thấy sự xuất hiện của dải mạng này: 54 | 55 | 56 | 57 | Để gán quyền truy cập rbac-net cho tenantA, ta tạo 1 rbac policy có dạng: 58 | 59 | $ neutron rbac-create --type network --target-tenant 07331639e3bb4ba6b2627a19da545677 --action access_as_shared 65bb7720-ef95-4430-bf7f-e719fb613a60 60 | 61 | trong đó target-tenant là id của tenantA, rbac-object là id của dải mạng rbac-net. 62 | 63 | Tạo RBAC policy thành công: 64 | 65 | 66 | 67 | neutron rbac-list sẽ show tất cả các RBAC policy đã tạo: 68 | 69 | 70 | 71 | Kiểm tra lại trên tenantA, thấy xuất hiện dải mạng rbac-net: 72 | 73 | 74 | 75 | Từ đây trên tenantA có thể tạo các VM có port thuộc dải mạng này. Kiểm tra trên user admin, ta thấy trên dải mạng rbac-net xuất hiện port của VM vừa mới được tạo: 76 | 77 | 78 | 79 | Tương tự, ta gán tạo rbac policy cho phép tenantB sử dụng dải mạng này: 80 | 81 | 82 | 83 | sử dụng command line, ta tạo VM bằng userB sử dụng dải mạng rbac-net: 84 | 85 | $ nova --os-project-name TenantB --os-username UserB --os-password secrete boot --flavor m1.tiny --image "cirros-0.3.4-x86_64-uec" --nic net-id=65bb7720-ef95-4430-bf7f-e719fb613a60 TenantB-vm1 86 | 87 | 88 | 89 | UserC do không có quyền truy cập dải mạng này nên việc boot VM sử dụng dải rbac-net không thực hiện được: 90 | 91 | 92 | 93 | Để xóa 1 RBAC policy, ta sử dụng lệnh 94 | 95 | $ neutron rbac-delete {rbac-policy-id} 96 | 97 | Nhưng trước tiên cần xóa các port gắn trên dải mạng đang được share. 98 | 99 | Tài liệu tham khảo: 100 | 101 | [1] : https://developer.rackspace.com/blog/A-First-Look-at-RBAC-in-the-Liberty-Release-of-Neutron/ 102 | 103 | [2] : http://docs.openstack.org/liberty/networking-guide/adv-config-network-rbac.html 104 | 105 | [3] : http://specs.openstack.org/openstack/neutron-specs/specs/liberty/rbac-networks.html 106 | -------------------------------------------------------------------------------- /04-Neutron/enable-ipset.md: -------------------------------------------------------------------------------- 1 | ###Ipset kết hợp iptables trong openstack: 2 | Neutron sử dụng iptables để tạo nên các traffic rules nhằm thiết lập chức năng cho security group, từ đó quy định cách thức các máy ảo truyền thông trên mạng nội bộ cũng như ra ngoài mạng internet. 3 | Tuy nhiên, việc sử dụng iptables đơn thuần có thể gây ra 1 số vấn đề: 4 | 5 | - Khi 1 security group có 1 hay nhiều rules liên quan đến 1 security group khác, hiệu năng của security group sẽ bị giảm. 6 | - Khi update 1 port vào 1 security group, thì các chain liên quan đến port này sẽ bị xóa đi và build lại, điều này ảnh hưởng đến hiệu năng của L2 agent. 7 | 8 | Để giải quyết các vấn đề này, từ phiên bản openstack Juno, người ta đã thêm vào tính năng ipset nhằm hỗ trợ cho iptables và tối ưu các rule chain. Để tìm hiểu tác dụng của ipset trong openstack, trước tiên ta tìm hiểu cách hoạt động của ipset. 9 | 10 | #####ipset 11 | ipset là một "match extension" cho iptables. Khi iptables có những rules giống nhau đối với 1 tập các địa chỉ xác định, khi đó ipset lập ra 1 danh sách gồm các địa chỉ ip đó, iptables chỉ việc gọi tới danh sách này bằng cách chỉ định tên của nó mà không cần khai báo nhiều rules với từng địa chỉ ip khác nhau. 12 | 13 | Giả sử ta muốn chặn truy cập từ 2 địa chỉ 1.1.1.1 và 2.2.2.2, với iptables đơn thuần thì các lệnh tương ứng sẽ là: 14 | 15 | iptables -A INPUT -s 1.1.1.1 -j DROP 16 | iptables -A INPUT -s 2.2.2.2 -j DROP 17 | 18 | Việc sử dụng ipset kết hợp cùng iptables sẽ thực hiện như sau: 19 | 20 | ipset -N myset iphash 21 | ipset -A myset 1.1.1.1 22 | ipset -A myset 2.2.2.2 23 | iptables -A INPUT -m set --set myset src -j DROP 24 | 25 | Ở trên ta tạo ra 1 danh sách có tên myset bằng ipset, danh sách này bao gồm 2 địa chỉ ip 1.1.1.1 và 2.2.2.2. 26 | Khi muốn chặn truy cập từ 2 địa chỉ này, iptables chỉ việc gọi tới myset bằng cách chỉ định **-m set --set myset**. Cờ **src** chỉ ra rằng những địa chỉ nguồn xuất hiện trong myset sẽ bị drop ở rule này. 27 | 28 | Việc sử dụng ipset sẽ tối ưu và rút gọn các dòng lệnh iptables, khi các địa chỉ ip lên tới hàng chục hay hàng trăm thì việc dùng các danh sách thay vì khai báo từng ip bằng iptables sẽ giúp ta tiết kiệm rất nhiều thời gian. 29 | 30 | Để xem danh sách các ipset đã được tạo, ta sử dụng lệnh: 31 | 32 | $sudo ipset list 33 | 34 | danh sách các ipset sẽ có dạng sau: 35 | 36 | 37 | 38 | #####ipset trong openstack 39 | 40 | ipset được khai báo trong /etc/neutron/plugins/ml2/ml2_conf.ini trên tất cả các node: 41 | 42 | [securitygroup] 43 | ... 44 | enable_ipset = True 45 | Mặc định, ipset được set bằng true kể cả khi không khai báo. Để tắt tính năng ipset, ta set nó = False. 46 | 47 | 48 | Giả sử, ta tạo ra 3 VM a b và c có ip lần lượt là 192.168.10.14, 192.168.10.15 và 192.168.10.16. Đồng thời tạo ra 2 security group là sg1 và sg2. Gán sg1 cho VM a và b, sg2 cho VM c. Trên sg2 ta tạo 1 rule chỉ cho phép ssh từ các VM thuộc sg1. 49 | 50 | 51 | 52 | Khi này đã xuất hiện những rule liên quan đến sg1 trên sg2, do đó những port thuộc các VM tren sg1 sẽ được add vào 1 ipset. Mỗi khi trên sg1 có sự update, thì các port mới này sẽ được tự động add vào ipset. 53 | 54 | Kiểm tra ipset, thấy xuất hiện 1 set chứa các ip thuộc sg1 có tên NIPv43e9c683a-ad22-411f-8f8e- 55 | 56 | 57 | 58 | Kiểm tra iptables rules, thấy xuất hiện trường match set trên rule của VM c: 59 | 60 | 61 | 62 | Giả sử tạo thêm 1 instance d và gán nó vào sg1, thì trong ipset xuất hiện thêm ip của instance này: 63 | 64 | 65 | 66 | Tài liệu tham khảo: 67 | 68 | [1] : http://www.linuxjournal.com/content/advanced-firewall-configurations-ipset 69 | 70 | [2] : http://git.openstack.org/cgit/openstack/neutron-specs/tree/specs/juno/add-ipset-to-security.rst#n28 71 | 72 | [3] : http://blog.vccloud.vn/cau-hinh-firewall-su-dung-ipset/ 73 | -------------------------------------------------------------------------------- /04-Neutron/ghichep-neutron.md: -------------------------------------------------------------------------------- 1 | ## Các ghi chép về OpenStack Neutron 2 | 3 | 4 | ### Cấu hình QoS cho Neutron trong OpenStack Liberty 5 | ----- 6 | 7 | #### Bước 1: Cấu hình 8 | ##### Trên Neutron Server 9 | 10 | - Trong bản OpenStack Liberty thì Neutron nằm trên Controller 11 | - Khai báo trong file `/etc/neutron/neutron.conf` 12 | ```sh 13 | [DEFAULT] 14 | 15 | service_plugins = router,qos 16 | 17 | ``` 18 | 19 | - Khai báo trong file `/etc/neutron/plugins/ml2/ml2_conf.ini` ở 2 section `[ml2]` và `[agent]` 20 | ```sh 21 | [ml2] 22 | 23 | extension_drivers = qos 24 | 25 | 26 | [agent] 27 | 28 | extensions = qos 29 | ``` 30 | ##### Trên node COMPUTE 31 | - Khai báo trong file `/etc/neutron/plugins/ml2/ml2_conf.ini` ở 2 section `[ml2]` và `[agent]` 32 | ```sh 33 | [ml2] 34 | 35 | extension_drivers = qos 36 | 37 | 38 | [agent] 39 | 40 | extensions = qos 41 | ``` 42 | 43 | 44 | 45 | #### Bước 2: Thực hiện test 46 | Tạo 02 máy ảo để thực hiện test 47 | 48 | ##### Thực hiện trên Neutron Server 49 | 50 | - Tạo `qos-policy` có tên là `bw-limiter` 51 | ```sh 52 | neutron qos-policy-create bw-limiter 53 | ``` 54 | 55 | - Setup bandwidth 56 | ```sh 57 | neutron qos-bandwidth-limit-rule-create --max-kbps 1000 --max-burst-kbps 100 bw-limiter 58 | ``` 59 | 60 | - Kiểm tra port trong neutron 61 | ```sh 62 | neutron port-list 63 | ``` 64 | 65 | - Áp rule vào port cần thiết lập 66 | ```sh 67 | neutron port-update ID_PORT --qos-policy bw-limiter 68 | ``` 69 | 70 | - Bỏ rule của port vừa thiết lập 71 | ```sh 72 | neutron port-update ID_PORT --no-qos-policy 73 | ``` 74 | 75 | 76 | - Đứng trên node compute kiểm tra port của máy ảo cần kiểm tra bằng lệnh 77 | ```sh 78 | ovs-vsctl show | grep qvo 79 | ``` 80 | 81 | - Ghi lại port cần kiểm tra và sử dụng lệnh nload ở dưới. 82 | - Trên node compute thực hiện theo dõi bandwidth của máy ảo bằng lệnh nload 83 | 84 | 85 | - Thực hiện đẩy traffic vào máy cần kiểm tra (máy này có port được áp policy) 86 | ```sh 87 | ssh cirros@$THE_IP_ADDRESS 'dd if=/dev/zero bs=1M count=1000000000' 88 | ``` 89 | 90 | 91 | 92 | ##### Link tham khảo 93 | 1. http://www.ajo.es/post/126667247769/neutron-qos-service-plugin 94 | 95 | 2. http://m.blog.csdn.net/blog/junheart/48373483 96 | 97 | 3 http://docs.openstack.org/networking-guide/adv_config_qos.html (Cách tạo rule) 98 | 99 | ---------------------- 100 | 101 | ###Security group: 102 | - Là 1 tập hợp các traffic rule được áp dụng cho các VM trong 1 tenant, dùng để kiểm soát truy cập giữa các VM và giữa VM với tài nguyên mạng bên ngoài môi trường openstack. 103 | - 1 security khi đc gán cho 1 port hoặc VM sẽ được dịch sang các iptables rules. 104 | - Mặc định, 1 security group được tạo ra có tên default group được gán cho tất cả các instance. default group chặn tất cả traffic tới VM và chỉ cho traffic từ VM gửi đi. 105 | - 1 instance có thể có nhiều security group 106 | Trước đây, openstack sử dụng nova firewall driver để triển khai các security rules, nhưng giờ đã được thay thế bởi neutron, do đó cần disable nova firewall trong file */etc/nova/nova.conf* : 107 | 108 | [DEFAULT] 109 | ... 110 | firewall_driver =nova.virt.firewall.NoopFirewallDriver 111 | 112 | 113 | và thay thế bởi neutron firewall driver trong */etc/neutron/plugins/ml2/ml2_conf.ini* trên tất cả các node: 114 | 115 | [securitygroup] 116 | ... 117 | enable_security_group = True #để là true nếu dùng neutron firewall, false nếu dùng nova firewall 118 | firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver 119 | 120 | ở đây ta sử dụng firewall driver dành cho openvswitch, nếu sử dụng plugin là linux bridge, thì driver sẽ là : 121 | **neutron.agent.linux.iptables_firewall.IptablesFirewallDriver** 122 | 123 | - chi tiết của các neutron firewall drivers có thể tham khảo tại: 124 | https://github.com/openstack/neutron/blob/master/neutron/agent/firewall.py 125 | https://github.com/openstack/neutron/blob/master/neutron/agent/linux/iptables_firewall.py 126 | 127 | ta thấy có các driver chính đó là **IptablesFirewallDriver**, **OVSHybridIptablesFirewallDriver** dựa trên iptables và NoopFirewallDriver nếu không muốn triển khai neutron firewall 128 | 129 | **OVSHybridIptablesFirewallDriver** là driver dành cho openvswitch plugin và được kế thừa lại từ **IptablesFirewallDriver** 130 | 131 | - **NoopFirewallDriver** : NGoài các firewall drivers dành cho linux bridge hoặc openvswitch plugin, còn 1 NoopFirewallDriver, tác dụng dùng để không cho phép người sử dụng thay đổi các security group rules, cụ thể như sau: 132 | 133 | -**Bước 1**: Sử dụng option **OVSHybridIptablesFirewallDriver** tạo 1 security group có tên sg1 với các rules cho phép ping và ssh traffic và gán cho các VM1 và VM2: 134 | 135 | 136 | 137 | Lúc này ta thấy xuất hiện các rules tương ứng trong iptables: 138 | 139 | 140 | 141 | Kiểm tra kết nối: 142 | 143 | 144 | 145 | -**Bước 2** : Thay đổi firewall driver thành Noop trong /etc/neutron/plugins/ml2/ml2_conf.ini trên tất cả các node và restart lại các dịch vụ của neutron: 146 | 147 | [securitygroup] 148 | ... 149 | firewall_driver = neutron.agent.firewall.NoopFirewallDriver 150 | 151 | -**Bước 3**: xóa security group sg1 và tạo 1 security group mới có tên sg2 với các rules cho phép truyền thông trên port 80: 152 | 153 | 154 | 155 | Lúc này ta thấy mọi nỗ lực thay đổi security group trên môi trường openstack đều không ảnh hưởng tới những rules ta đã tạo từ trước. Cụ thể, khi xóa security group sg1 đã tạo trước đó khỏi các VM1 và VM2 thì những iptables rules về icmp và ssh vẫn còn và việc truyền thông giữa các VM vẫn đảm bảo như trong bước 1, đồng thời những rules mới tạo ở sg2 sẽ không xuất hiện trong iptables và việc truyền thông qua port 80 sẽ không thực hiện được. 156 | 157 | Điều này cho thấy Noopfirewalldriver có nhiệm vụ tạo ra những chính sách về truyền thông một cách cố định, người quản trị cloud sẽ tạo ra những traffic rules và fix cứng chúng trên từng tenant, người dùng sẽ tuân theo các rule mặc định đó mà không thể tạo mới hoặc thay đổi theo ý mình. 158 | 159 | #####Tham khảo: 160 | 1. https://wiki.openstack.org/wiki/Neutron/blueprint_ovs-firewall-driver 161 | 162 | 2. http://docs.openstack.org/user-guide-admin/nova_cli_manage_projects_security.html -------------------------------------------------------------------------------- /04-Neutron/prevent-arp-spoofing.md: -------------------------------------------------------------------------------- 1 | ### Prevent arp spoofing trong openstack 2 | - Từ phiên bản Liberty, openstack cung cấp 1 tính năng phòng chống tấn công giả mạo arp hay còn gọi là arp cache poisoning, nhằm đảm bảo an toàn trong truyền thông cho các máy ảo. 3 | - 1 cuộc tấn công giả mạo arp có thể được thực hiện ở trong mạng nội bộ bởi chính 1 VM nằm trong mạng đấy. Máy tấn công có thể gửi liên tục các bản tin arp giả mạo tới các máy nạn nhân hoặc tới gateway, nhằm thay đổi bảng arp trên các máy đó. Điều này dẫn tới việc truyền thông của các VM sẽ bị ảnh hưởng hoặc tệ hơn, là mọi thông tin đều bị attacker nghe lén và đánh cắp mà người dùng không hề phát giác được. 4 | - Chi tiết về tấn công giả mạo arp có thể tham khảo ở đây: http://quantrimang.com/tim-hieu-ve-tan-cong-man-in-the-middle-%E2%80%93-gia-mao-arp-cache-66482 5 | 6 | - Để ngăn chặn việc các máy ảo trong 1 vùng mạng private của 1 tenant có thể thực hiện 1 vụ tấn công arp, openstack cung cấp cơ chế prevent_arp_spoofing. Cơ chế này được khai báo trong /etc/neutron/plugins/ml2/ml2_conf.ini trên tất cả các node : 7 | 8 | [agent] 9 | ... 10 | prevent_arp_spoofing = True 11 | 12 | Để kiểm tra tính năng này, ta sẽ thực hiện với 2 máy ảo trong môi trường openstack liberty như sau: 13 | 14 | 15 | - Máy victim chạy cirros os, có IP 192.168.10.14, MAC FA:16:3E:9F:39:18 16 | - Gateway có IP 192.168.10.1, MAC fa:16:3e:3d:af:51 17 | - Máy attacker chạy linux os, có IP 192.168.10.13, MAC fa:16:3e:22:0d:64 18 | 19 | Máy attacker được cài đặt tool tấn công arp có tên Dsniff. Máy này sẽ cố gắng gửi liên tục các bản tin arp giả mạo tới máy victim và gateway nhằm thay đổi arp cache: 20 | 21 | $ sudo arpspoof 192.168.10.14 -t 192.168.10.1 #nói với gateway nó là máy có ip 192.168.10.14 22 | $ sudo arpspoof 192.168.10.1 -t 192.168.10.14 #nói với máy victim nó là gateway 23 | 24 | 25 | 26 | **1. Trường hợp enable tính năng prevent-arp-spoofing :** 27 | 28 | Việc gửi các bản tin giả mạo không ảnh hưởng tới arp table của máy victim và gateway do các bản tin này đã bị lọc ở mức ethernet frame. 29 | 30 | 31 | 32 | 33 | Ta thấy địa chỉ IP và MAC vẫn duy trì ở trạng thái chính xác mà không bị thay đổi. Quá trình ping giữa máy victim và gateway diễn ra bình thường. Tiến hành bắt gói tin ở máy attacker, ta không thu được các bản tin icmp nghe lén. 34 | 35 | **2. Trường hợp disable tính năng prevent-arp-spoofing:** 36 | 37 | Set giá trị prevent_arp_spoofing = False 38 | 39 | Sau khi gửi liên tục các bản tin giả mạo, arp cache trên máy victim và gateway đã bị thay đổi: 40 | 41 | 42 | 43 | Lúc này, ta thấy trên máy victim và gateway, ip của cả gateway và máy victim đều có MAC bị thay đổi theo MAC của máy attacker 44 | 45 | Quá trình ping giữa victim với gateway hoặc với bất kì VM nào trong vùng mạng đều bị attacker nghe lén: 46 | 47 | 48 | 49 | Tham khảo: 50 | 51 | [1] : https://docs.oseems.com/general/operatingsystem/linux/sniff-network-traffic 52 | 53 | [2] : http://quantrimang.com/tim-hieu-ve-tan-cong-man-in-the-middle-%E2%80%93-gia-mao-arp-cache-66482 54 | 55 | -------------------------------------------------------------------------------- /05-Cinder/Readme.md: -------------------------------------------------------------------------------- 1 | # Ghi chép về Cinder -------------------------------------------------------------------------------- /05-Cinder/docs/README.md: -------------------------------------------------------------------------------- 1 | # Ghi chép Cinder. 2 | 3 | [1. Tổng quan về Cinder.](https://github.com/hocchudong/ghichep-OpenStack/blob/master/05-Cinder/docs/cinder-tongquan.md) 4 | 5 | [2. Các khái niệm liên quan.](https://github.com/hocchudong/ghichep-OpenStack/blob/master/05-Cinder/docs/cinder-khainiem.md) 6 | 7 | [3. Cài đặt Cinder (Backends LVM).](https://github.com/hocchudong/ghichep-OpenStack/blob/master/05-Cinder/docs/cinder-install.md) 8 | 9 | [4. Cinder Multiple Backends (LVM, NFS, GlusterFS).](https://github.com/hocchudong/ghichep-OpenStack/blob/master/05-Cinder/docs/cinder-multiplebackdends-lvm-gfs-nfs.md) 10 | 11 | [5. Cinder backup volume](https://github.com/hocchudong/ghichep-OpenStack/blob/master/05-Cinder/docs/backup-overview.md) 12 | 13 | [5. Ý nghĩa File Cinder.conf.](https://github.com/hocchudong/ghichep-OpenStack/blob/master/05-Cinder/docs/cinder-cinder_conf.md) 14 | 15 | [6. Các ghi chép về Cinder.](https://github.com/hocchudong/ghichep-OpenStack/blob/master/05-Cinder/docs/cinder-ghichep.md) -------------------------------------------------------------------------------- /05-Cinder/docs/Strorage/GlusterFS/README.md: -------------------------------------------------------------------------------- 1 | # 1. Tổng quan về GlusterFS -------------------------------------------------------------------------------- /05-Cinder/docs/Strorage/GlusterFS/gfs-tongquan.md: -------------------------------------------------------------------------------- 1 | # Tìm hiểu về GlusterFS. 2 | 3 | ## 1. Tổng quan về GlusterFS. 4 | 5 | - Thời đại bùng nổ của các dữ liệu lớn và sự tăng trưởng không ngừng nghỉ của các dịch vụ, khiến việc lưu trữ dữ liệu đơn 6 | thuần ở các server đơn khiến dữ liệu của bạn bị ì ạch khi truy cập và nguy hiểm khi gặp sự cố. Những dữ liệu được lưu trữ 7 | tập trung ở các file system đơn thuần trên đĩa cứng không có các giaỉ pháp backup định kì hoặc các gỉai pháp đảm bảo tính 8 | sẵn sàng cao thì khi gặp các sự cố gây mất mát dữ liệu, người quản trị viên sẽ rất lúng túng khi khôi phục dữ liệu hoặc cung 9 | cấp việc truy xuất dữ liệu trở lại bình thường. 10 | 11 | - Lúc này một hệ thống file system mới được khai sinh với tên gọi GlusterFS (Cluster File System), có nhiệm vụ đảm bảo cho 12 | dữ liệu của bạn luôn trong trạng thái sẵn sàng và mở rộng không gian lưu trữ lên đến hàng terabytes và đồng thời phục vụ 13 | cho hàng ngàn máy khách (client). Hệ thống của bạn luôn được đảm bảo tính liên tục dưới "bàn tay" của GlusterFS kể cả khi 14 | có gặp các sự cố hoặc nhanh chóng nâng cấp không gian lưu trữ cho hệ thống của bạn mà không phải dừng toàn bộ hệ thống. 15 | 16 | - GlusterFS cung cấp khá nhiều các mô hình (concept), ý tưởng xây dựng hệ thống lưu trữ và phân bổ dữ liệu nên chúng ta khá linh 17 | động trong việc gỉai các bài toán lưu trữ dữ liệu đem lại tính sẵn sàng cao cho dữ liệu của mình. 18 | 19 | - GlusterFS chỉ cần các máy chủ storage (máy chủ lưu trữ dữ liệu có dung lượng lưu trữ lớn), và chúngđược kết nối với nhau qua mạng (network). 20 | Việc còn lại là triển khai các mô hình dữ liệu (concept) và chọn lựa các giao thức chia sẻ dữ liệu mà GlusterFS hỗ trợ điển hình là TCP/IP và Infiniband RDMA. 21 | 22 | ### Khi nào chúng ta nên sử dụng GlusterFS. 23 | 24 | - Khi hệ thống của chúng ta cần duy trì tính liên tục, truy cập ổn định khi các 1 trong các server storage trong hệ thống của chúng ta 25 | bị down bất thường. Hoặc khi chúng ta có các dữ liệu rất lớn cần tối ưu hiệu năng tối đa trong việc truy cập và xử lý dữ liệu. Đơn gỉan là một hệ thống luôn ổn 26 | định trong mọi trường hợp, các việc truy xuất dữ liệu không bị gían đoạn. 27 | 28 | ## 2. Một số định nghĩa trong GlusterFS. 29 | 30 | |Định nghĩa|Mô tả| 31 | |---------|------| 32 | |Node|à một máy chủ lưu trữ (Server Storage) chạy hệ điều hành CentOS, Ubuntu,.... Chạy dịch vụ GlusterFS, chứa các Bricks| 33 | |Bricks|Là một folder / mount point / file system trên một node để chia sẻ với các node tin cậy khác trong hệ thống (trusted storage pool) - Trên một node có thể có nhiều Brick (s). - Brick được dùng để gán (assign) vào các vùng dữ liệu (volume). - Các brick trong một volume nên có dung lượng lưu trữ (size) bằng nhau.| 34 | |Volume|Một khối logic chứa nhiều bricks. Các cách thao tác lưu trữ và xử lí dữ liệu trên volume được định nghĩa bởi kiểu lưu trữ (concept volume). Một volume có thể chứa nhiều bricks từ các node khác nhau. Client muốn sử dụng File System thì sẽ mount volume chứ không sử dụng trực tiếp bricks.| 35 | 36 | 37 | - Brick : 38 | 39 | ![bricks](/images/cinder/storage/bricks.png) 40 | 41 | - Volume : 42 | 43 | ![volume](/images/cinder/storage/volume.png) 44 | 45 | ## 3. Các loại Volume trong GlusterFS. 46 | 47 | - Khi sử dụng GlusterFS có thể tạo nhiều loại volume và mỗi loại có được những tính năng khác nhau. Dưới đây là 6 loại volume cơ bản. 48 | 49 | ### 3.1. Distributed volume: 50 | 51 | Distributed Volume có những đặc điểm cơ bản sau: 52 | 53 | - Dữ liệu được lưu trữ phân tán trên từng bricks, file1 nằm trong brick 1, file 2 nằm trong brick 2,... 54 | 55 | - Vì metadata được lưu trữ trực tiếp trên từng bricks nên không cần thiết phải có một metadata server ở bên ngoài, giúp cho các tổ chức tiết kiệm được tài nguyên. 56 | 57 | - Ưu điểm: mở rộng được dung lượng store ( dung lượng store bằng tổng dung lượng các brick) 58 | 59 | - Nhược điểm: nếu 1 trong các brick bị lỗi, dữ liệu trên brick đó sẽ mất 60 | 61 | ![dis_volume](/images/cinder/storage/dis_volume.png) 62 | 63 | ### 3.2. Replicated volume: 64 | 65 | - Dữ liệu sẽ được nhân bản đến những brick còn lại, trên tất cả các node và đồng bộ tất cả các nhân bản mới cập nhật. 66 | 67 | - Đảm bảo tính nhất quán. 68 | 69 | - Không giới hạn số lượng replicas. 70 | 71 | - Ưu điểm: phù hợp với hệ thống yêu cầu tính sẵn sàng cao và dự phòng 72 | 73 | - Nhược điểm: tốn tài nguyên hệ thống 74 | 75 | ![Replicated_Volume](/images/cinder/storage/Replicated_Volume.png) 76 | 77 | ### 3.3. Stripe volume: 78 | 79 | - Dữ liệu chia thành những phần khác nhau và lưu trữ ở những brick khác nhau, ( 1 file được chia nhỏ ra trên các brick ) 80 | 81 | - Ưu điểm : phù hợp với những môi trường yêu cầu hiệu năng, đặc biệt truy cập những file lớn. 82 | 83 | - Nhược điểm: 1 brick bị lỗi volume không thể hoạt động được. 84 | 85 | ![stripe_volume](/images/cinder/storage/stripe_volume.png) 86 | 87 | ### 3.4. Distributed replicated: 88 | 89 | Kết hợp từ distributed và replicated 90 | 91 | ![dr_volume](/images/cinder/storage/dr_volume.png) 92 | 93 | Với mô hình trên, hệ thống sẽ yêu cầu cần tối thiểu 3 node, vừa có thể mở rộng được dung lượng lưu trữ, vừa tăng tính dự phòng cho hệ thống. 94 | Tuy nhiên, nếu đồng thời bị lỗi 2 node server1 và server2 hoặc 2 node server3 và server4 thì hệ thống sẽ không hoạt động được. 95 | 96 | ### 3.5. Distributed stripe volume: 97 | 98 | Kết hợp từ Distributed và stripe. Do đó nó có hầu hết những thuộc tính hai loại trên và khi 1 node và 1 brick delete đồng nghĩa volume cũng không thể hoạt động được nữa. 99 | 100 | ![ds_volume](/images/cinder/storage/ds_volume.png) 101 | 102 | ### 3.6. Replicated stripe volume: 103 | 104 | Kết hợp từ replicated và stripe 105 | 106 | ![rs_volume](/images/cinder/storage/rs_volume.png) 107 | 108 | 109 | 110 | # Tham khảo. 111 | 112 | - https://github.com/meditechopen/mdt-technical/blob/master/TRIMQ/GlusterFS/glusterfs.md#33 113 | 114 | - https://blog.0x1115.org/2015/08/19/glusterfs-file-server-co-tinh-san-sang-cao/ -------------------------------------------------------------------------------- /05-Cinder/docs/Strorage/README.md: -------------------------------------------------------------------------------- 1 | # Ghi chép các vấn đề tìm hiểu được về LVM, GlusterFS, NFS -------------------------------------------------------------------------------- /05-Cinder/docs/backup-overview.md: -------------------------------------------------------------------------------- 1 | # OpenStack Backups. 2 | 3 | ## 1. Backup là gì? 4 | 5 | - Tất cả những thứ được lữu trữ bên ngoài thực thể lưu trữ chính được gọi là backup. Điều này có nghĩa là các máy chủ khác có khả năng 6 | được lưu trữ ở nhiều điểm khác nữa. Chúng ta có nhiều lựa chọn cho các phương pháp backup khác nhau có sẵn trong OpenStack. Tuy nhiên trên thực 7 | tế chúng ta chỉ cần sao lưu dữ liệu Cinder Block Storage là đủ. Nó được cung cấp bởi cinder-backup . Nó có 2 backends chính để backup vào 8 | đó là : Celph và Swift. Việc lựa chọn backends nào thì tùy thuộc vào chúng ta , tuy nhiên việc sử dụng Celph là một lựa chọn thích hợp hơn Swift 9 | bởi vì Celph đã được tối ưu hóa để làm việc với backup. 10 | 11 | ## 2. Backup level. 12 | 13 | - Chúng ta có ba mức độ backup như sau : 14 | 15 | 1. Bloack level : LVM snapshot. 16 | 17 | 2. Filesystem level : rsync. 18 | 19 | 3. Application level: SQL dump. 20 | 21 | ### Block Level. 22 | 23 | - Vấn đề chính của phương pháp này là sự không nhất thống mà nó mang lại . Có thể trong một số trường hợp xấu có thể làm hư hỏng tệp tin. 24 | 25 | |Ưu điểm|Nhược điểm| 26 | |-------|----------| 27 | |Nhanh chóng, không tương tác với với VM chỉ có lớp khối |Hệ thống filesystem không biết| 28 | |Phục hồi nhanh (chỉ cần chạy một máy ảo mới)|Không thể thực hiện được trực tiếp (hạn chế trình điều khiển cinder backup)| 29 | |Tích hợp với OpenStack cinder-backup|Trạng thái phục hồi không nhất quán| 30 | |Không thể xâm nhập|| 31 | |Gia tăng được khối lượng sao lưu|| 32 | 33 | ### File Level. 34 | 35 | - Ví dụ : Backup PC. 36 | 37 | |Ưu điểm|Nhược điểm| 38 | |-------|----------| 39 | |Kiểm soát được dữ liệu sâu nhất có thể (Có thể khôi phục một file) |Yêu cầu backup agent| 40 | |Có nhiều không gian (dedup and hảdlinks)|Tiêu thụ băng thông lớn| 41 | 42 | ### Application level. 43 | 44 | - Ví dụ như backup cớ sở dữ liệu. 45 | 46 | |Ưu điểm|Nhược điểm| 47 | |-------|----------| 48 | |Triggered by freeze hook script from QEMU agent|Cần sự phối hợp (Khá phức tạp với DBs và multi-master setups)| 49 | |Có tính nhất quán|| 50 | |Autonomus (hệ thống tự quản)|| 51 | 52 | 53 | 54 | # Backup Volume với backend NFS. 55 | 56 | ## I. Mô hình và các yêu cầu phần cứng. 57 | 58 | ### Mô hình 59 | 60 | ![mohinh_nfs_backup](/images/cinder/storage/mohinh_nfs_backup.png) 61 | 62 | ### Phân hoạch địa chỉ IP và yêu cầu phần cứng : 63 | 64 | ![ip_plan](/images/cinder/storage/ip_plan.png) 65 | 66 | ## II. Cài đặt. 67 | 68 | - Lưu ý : Trên mô hình phải được cài đặt sẵn OpenStack và Cinder, nếu chưa có tham khảo tại [đây](https://github.com/congto/OpenStack-Mitaka-Scripts/tree/master/OPS-Mitaka-LB-Ubuntu) 69 | 70 | ### 1. Trên node NFS : 71 | 72 | - Tạo các thư mục `backup_mount` và `cinder_backup` 73 | 74 | ```sh 75 | mkdir -p /mnt/backup_mount 76 | mkdir -p /mnt/cinder_backup 77 | ``` 78 | 79 | - Mở file `exports` : 80 | 81 | ```sh 82 | vi /etc/exports 83 | ``` 84 | 85 | Thêm vào dòng sau : 86 | 87 | ```sh 88 | 10.10.10.0/24 /mnt/cinder_backup 10.10.10.0/24(rw,no_root_squash) 89 | ``` 90 | 91 | - Restart lại dịch vụ : 92 | 93 | ```sh 94 | service nfs-kernel-server restart 95 | ``` 96 | 97 | ### 2. Trên node Cinder. 98 | 99 | - Cài đặt các gói `sysfsutils` và `cinder-backup` : 100 | 101 | ```sh 102 | apt-get install sysfsutils 103 | apt-get install cinder-backup 104 | ``` 105 | 106 | - Dùng trình soạn thảo vi mở file `cinder.conf` : 107 | 108 | ```sh 109 | vi /etc/cinder/cinder.conf 110 | ``` 111 | 112 | - Chỉnh sửa lại file `cinder.conf` như sau : 113 | 114 | Tại section [DEFAULT] thêm vào các dòng sau : 115 | 116 | ```sh 117 | backup_driver = cinder.backup.drivers.nfs 118 | backup_mount_point_base = /mnt/backup_mount 119 | backup_share = 10.10.10.40:/mnt/cinder_backup 120 | ``` 121 | 122 | - Tạo thư mục `/mnt/cinder_backup` và `/mnt/backup_mount` : 123 | 124 | ```sh 125 | mkdir -p /mnt/cinder_backup 126 | mkdir -p /mnt/backup_mount 127 | ``` 128 | 129 | - Phân quyền cho 2 thư mục vừa tạo : 130 | 131 | ```sh 132 | chown cinder:cinder /mnt/cinder_backup 133 | chown cinder:cinder /mnt/backup_mount 134 | ``` 135 | 136 | - Mount thư mục `/mnt/cinder_backup` về node cinder : 137 | 138 | ```sh 139 | mount -t nfs 10.10.10.40:/mnt/cinder_backup /mnt/cinder_backup 140 | ``` 141 | 142 | - Restart lại các dịch vụ : 143 | 144 | ```sh 145 | service cinder-volume restart 146 | service cinder-backup restart 147 | ``` 148 | 149 | ## III. Kiểm tra. 150 | 151 | - Tạo một file backup bằng lệnh : 152 | 153 | ```sh 154 | cinder backup-create disk_nfs-2 --name demo 155 | ``` 156 | 157 | Trong đó : 158 | 159 | |Lệnh|Ý nghĩa| 160 | |----|-------| 161 | |cinder backup-create|Là lệnh khởi tạo mới một backup| 162 | |disk_nfs-2|Tên volume cần backup| 163 | |--name demo|--name : tùy chọn đặt tên cho file backup . demo : là tên file backup muốn đặt.| 164 | 165 | Kết quả trả về của lệnh trên : 166 | 167 | ![kq_lenh](/images/cinder/storage/kq_lenh.png) 168 | 169 | - Kiểm tra xem volume đã được tạo thành công chưa : 170 | 171 | ```sh 172 | cinder backup-list 173 | ``` 174 | 175 | ![backup_list](/images/cinder/storage/backup_list.png) 176 | 177 | - Kiểm tra trên node NFS : 178 | 179 | ![file_backup](/images/cinder/storage/file_backup.png) 180 | 181 | 182 | 183 | 184 | 185 | # Tham Khảo 186 | 187 | - https://www.sebastien-han.fr/blog/2015/02/17/openstack-and-backup/ 188 | - https://www.snia.org/sites/default/files/SDCIndia/2016/Presentations/Using%20Object%20Storage%20to%20store%20and%20restore%20Cinder%20Volume%20backups.pdf -------------------------------------------------------------------------------- /05-Cinder/docs/cinder-cinder_conf.md: -------------------------------------------------------------------------------- 1 | # Ý nghĩa cấu hình trong file /etc/cinder/cinder.conf 2 | 3 | `rootwrap_config = /etc/cinder/rootwrap.conf` 4 | 5 | ```sh 6 | Chỉ định đường dẫn tới tập cấu hình gốc sử dụng để chạy Cinder bao gồm : 7 | - Danh sách các thư mục tải được lọc. 8 | - Danh sách các file thực thi trong trường hợp bộ lọc không hoạt động. 9 | - Nếu thư mục thực thi không được chỉ định mặc định trỏ đến biến môi trường PATH 10 | - Cho phép đăng nhập vào syslog , mặc định là False 11 | - Cơ sở syslog nào được sử dụng trong các giá trị : authpriv, syslog, local0, local1... mặc định là syslog 12 | - Các message từ log : 13 | -- INFO Chỉ ra những log thành công. 14 | -- ERROR Chỉ ra những log không thành công. 15 | ``` 16 | 17 | `api_paste_confg = /etc/cinder/api-paste.ini` 18 | 19 | ```sh 20 | Tập tin cấu hình API của Cinder. 21 | ``` 22 | 23 | `iscsi_helper = tgtadm` 24 | 25 | ```sh 26 | - Chỉ ra iSCSI sử dụng , mặc định là tgtadm. Ngoài ra còn có : 27 | -- Lioadm hỗ trợ LIO iSCSI 28 | -- Scstadmin cho SCST 29 | -- Iseradm cho ISER 30 | -- Ietadm cho iSCSI 31 | ``` 32 | 33 | `volume_name_template = volume-%s` 34 | 35 | ```sh 36 | Template mẫu sử dụng để tạo tên volume 37 | ``` 38 | 39 | `verbose = True` 40 | 41 | ```sh 42 | Chưa làm 43 | ``` 44 | 45 | `auth_strategy = keystone` 46 | 47 | ```sh 48 | - Cấu hình sử dụng cho xác thực. 49 | - Hỗ trợ noauth, keystone và deprecated 50 | ``` 51 | 52 | `state_path = /var/lib/cinder` 53 | 54 | ```sh 55 | Thư mục cấp cao nhất duy trì trạng thái của Cinder 56 | ``` 57 | 58 | `lock_path = /var/lock/cinder` 59 | 60 | ```sh 61 | Thư mục sử dụng cho các tệp khóa , mặc định là thư mục temp 62 | ``` 63 | 64 | `volumes_dir = /var/lib/cinder/volumes` 65 | 66 | ```sh 67 | Thư mục lưu trữ tập tin cấu hình volume 68 | ``` 69 | 70 | `rpc_backend = rabbit` 71 | 72 | ```sh 73 | Trình điều khiển message được sử dụng mặc định là rabbitMQ. Các trình điều khiển khác bao gồm qpid và zmq 74 | ``` 75 | 76 | `my_ip = 10.10.10.130` 77 | 78 | ```sh 79 | Là địa chỉ của host 80 | ``` 81 | 82 | `enabled_backends = lvm` 83 | 84 | ```sh 85 | - Cấu hình backend muốn sử dụng, ở đây là LVM 86 | - Đối với multiple backend chỉ cần dấu phẩy giữa các backend (ví dụ : enable_backends = lvm,nfs,glusterfs) 87 | ``` 88 | 89 | `glance_api_servers = http://controller:9292` 90 | 91 | ```sh 92 | Danh sách các máy chủ API cung cấp sẵn cho Cinder 93 | ``` 94 | 95 | `rabbit_host = 10.10.10.10` 96 | 97 | ```sh 98 | Địa chỉ trung chuyển RabbitMQ nơi một node được sử dụng 99 | ``` 100 | 101 | `rabbit_userid = openstack` 102 | 103 | ```sh 104 | RabbitMQ userid 105 | ``` 106 | 107 | `rabbit_password = Anhdat96` 108 | 109 | ```sh 110 | RabbitMQ password 111 | ``` 112 | 113 | `connection = mysql+pymysql://cinder:Anhdat96@controller/cinder` 114 | 115 | ```sh 116 | Chuỗi kết nối SQLAlchemy sử dụng để kết nối với cơ sở dữ liệu 117 | ``` 118 | 119 | `auth_uri = http://10.10.10.10:5000` 120 | 121 | ```sh 122 | Cấu hình enpoint Identity service 123 | ``` 124 | 125 | `auth_url = http://10.10.10.10:35357` 126 | 127 | ```sh 128 | URL để xác thực Identity service 129 | ``` 130 | 131 | `memcached_servers = 10.10.10.10:11211` 132 | 133 | ```sh 134 | Tùy chọn chỉ định danh sách các máy chủ được memcached sử dụng cho bộ nhớ đệm. Nếu không được xác định, 135 | tokens sẽ được thay thế quá trình cache 136 | ``` 137 | 138 | `auth_type = password` 139 | 140 | ```sh 141 | Chỉ định hình thức xác thực 142 | ``` 143 | 144 | ```sh 145 | project_domain_name = default // CHỉ định project domain name openstack 146 | user_domain_name = default // Chỉ định user domain name openstack 147 | project_name = service // Chỉ định project name openstack 148 | username = cinder // Chỉ định username của cinder 149 | password = Anhdat96 // CHỉ định password của cinder 150 | ``` 151 | 152 | `volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver` 153 | 154 | ```sh 155 | Chỉ định driver LVM mà sử dụng 156 | ``` 157 | 158 | `volume_group = cinder-volumes` 159 | 160 | ```sh 161 | Chỉ định vgroup mà chúng ta tạo lúc cài đặt , cinder-volumes là tên của vgroup 162 | ``` 163 | 164 | `iscsi_protocol = iscsi` 165 | 166 | ```sh 167 | Xác định giao thức iSCSI cho iSCSI volumes mới, được tạo ra với tgtadm hoặc lioadm. Để kích hoạt RDMA , tham số lên lên được đặt là "iser" . Hỗ trợ cho giao thức iSCSI giá trị là "iscsi" và "iser" 168 | ``` 169 | -------------------------------------------------------------------------------- /05-Cinder/docs/cinder-khainiem.md: -------------------------------------------------------------------------------- 1 | # Các khái niệm : 2 | 3 | ```sh 4 | Block Storage 5 | ``` 6 | 7 | - Block Storage : hay còn được gọi là Volume storage được gắn vào các VMs dưới dạng volumes . Trong OpenStack Cinder là mã phần mềm triển khai block storage. 8 | Các volumes này là "persistent" có nghĩa là các volume này có thể gán cho 1 instane rồi gỡ bỏ và gán cho instane khác mà vẫn giữ nguyên dữ liệu. Các loại Block 9 | Storage cho phép các instane truy cập trực tiếp đến phần cứng storage của thiết bị thật , việc này giúp tăng hiệu suất đọc/ghi I/O 10 | (http://blogit.edu.vn/cac-loai-storage-trong-openstack/) 11 | - Các volume có vòng đời phụ thuộc vào thời gian sống của VM. 12 | - Tương tự như Amazon Elastic Block Store (EBS) 13 | 14 | ```sh 15 | AMQP 16 | ``` 17 | 18 | - RabbitMQ là một message broker ( message-oriented middleware) sử dụng giao thức AMQP - Advanced Message Queue Protocol (Đây là giao thức phổ biến, thực tế rabbitmq hỗ trợ nhiều giao thức). RabbitMQ được lập trình bằng ngôn ngữ Erlang. RabbitMQ cung cấp cho lập trình viên một phương tiện trung gian để giao tiếp giữa nhiều thành phần trong một hệ thống lớn ( Ví dụ openstack). 19 | - RabbitMQ sẽ nhận message đến từ các thành phần khác nhau trong hệ thống, lưu trữ chúng an toàn trước khi đẩy đến đích. 20 | 21 | ```sh 22 | iSCSI 23 | ``` 24 | 25 | - Trong hệ thống mạng máy tính, iSCSI (viết tắt của internet Small Computer System Interface) dựa trên giao thức mạng internet (IP) để kết nối các cơ sở dữ liệu. 26 | - Nói một cách đơn giản nhất, iSCSI sẽ giúp tạo 1 ổ cứng Local trong máy tính của bạn với mọi chức năng y như 1 ổ cứng gắn trong máy tính vậy. Chỉ khác ở chỗ dung 27 | lượng thực tế nằm trên NAS và do NAS quản lý. 28 | 29 | Tham khảo : http://ducquang415.com/view-45717/iscsi-la-gi-gioi-thieu-cach-map-o-cung-nas-thanh-1-o-cung-local/ -------------------------------------------------------------------------------- /05-Cinder/docs/cinder-tongquan.md: -------------------------------------------------------------------------------- 1 | # Tìm hiểu về Cinder. 2 | 3 | ### 1 . Cinder là gì? 4 | 5 | - Cinder là một Block Storage service trong OpenStack . Nó được thiết kế với khả năng lưu trữ dữ liệu mà người dùng cuối có thể sử dụng bỏi Project Compute (NOVA). 6 | Nó có thể được sử dụng thông qua các reference implementation (LVM) hoặc các plugin driver dành cho lưu trữ. 7 | 8 | - Có thể hiểu ngắn gọn về Cinder như sau : Cinder là ảo hóa việc quản lý các thiết bị Block Storage và cung cấp cho người dùng một API 9 | đáp ứng được như cầu tự phục vụ cũng như yêu cầu tiêu thụ các tài nguyên đó mà không cần có quá nhiều kiến thức về lưu trữ. 10 | 11 | ### 2. Một số hình thức lưu trữ trong OpenStack. 12 | 13 | | |Lưu trữ tạm thời|Block Storage|Object Storage| 14 | |-------------|----------------|-------------|--------------| 15 | |Hình thức sử dụng |Dùng để chạy hệ điều hành và scrath space|Thêm một persistent storage vào VM|lưu trữ các VM iamge , disk volume , snapshot VM,....| 16 | |Hình thức truy cập|Qua một file system|Một Block device có thể là một partition, formated, mounted (giống như là : /dev/vdc)|Thông qua RESTAPI| 17 | |Có thể truy cập từ|Trong một VM|Trong một VM|Bất kỳ đâu| 18 | |Quản lý bỏi|NOVA|Cinder|Swift| 19 | |Những vấn đề tồn tại|VM được kết thúc|Có thể được xóa bởi người dùng|Có thể được xóa bởi user| 20 | |Kích cỡ được xác định bởi|Người quản trị hệ thống cấu hình cài đặt kích cỡ, tương tự như là Flavors|Dựa theo đặc điểm yêu cầu của người dùng|Số lượng lưu trữ mà máy vật lý hiện có| 21 | |Ví dụ điển hình|10GB đĩa thứ nhất, 30GB đĩa thứ 2|1TB disk|10s of TBs of dataset storage| 22 | 23 | ### 3. Cinder Architect . 24 | 25 | ![cinder-Architect](/images/cinder-Architect.png) 26 | 27 | - Cinder-client : Người dùng sử dụng CLI/UI (Command line interface / User interface) để tạo request. 28 | - Cinder-api : Chấp nhận và chỉ định đường đi cho các request. 29 | - Cinder-scheduler : Lịch trình và định tuyến đường đi cho các request tới những volumes thích hợp. 30 | - Cinder-volume : Quản lý thiết bị Block Storage. 31 | - Driver : Chứa các mã back-end cụ thể để có thể liên lạc với các loại lưu trữ khác nhau. 32 | - Storage : Các thiết bị lưu trữ từ các nhà cung cấp khác nhau. 33 | - SQL DB : Cung cấp một phương tiện dùng để back up dữ liệu từ Swift/Celp, etc,.... 34 | 35 | ### 4. Volume API . 36 | 37 | - Xem thêm tại [đây](https://developer.openstack.org/api-ref/block-storage/) 38 | 39 | ### 5. Cinder Driver. 40 | 41 | - Cinder driver maps các Cinder requests yêu cầu từ dòng lệnh lên external storage platform. 42 | - Có trên 50 loại driver tuy nhiên chúng ta thường sử dụng nhất là LVM (Logical Volume Managerment). 43 | - Để set một volume driver chúng ta dùng tham số `volume_driver` trong file `cinder.conf` 44 | 45 | ```sh 46 | volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver 47 | ``` 48 | 49 | - LVM sẽ maps các thiết bị Block storage vật lý trên các thiết bị Block storage ảo cấp cao hơn. 50 | - Cinder Volume được khởi tạo như Logical Volumes bởi LVM. 51 | - Sử dụng giao thức iSCSI để kết nối các volumes tới các compute nodes. 52 | - Không có nhà cung cấp cụ thể. 53 | 54 | `Cinder Attach Flow` 55 | 56 | ![cinder-attach-flow](/images/cinder-attach-flow.png) 57 | 58 | - Cinder gọi Cinder qua APi của cinder, truyền thông tin kết nối. 59 | - Ví vụ : Host name, iSCSI initiator name, FC WWPNs 60 | - Cinder-API chuyển thông điệp đến Cinder-volume. 61 | - Sau đó trình kiểm tra lỗi đầu vào sẽ làm việc và gọi đến volume driver. 62 | - Volume Driver sẽ chuẩn bị các yếu tố cần thiết để cho phép kết nối. 63 | - Ví dụ : Cho phép máy chủ NOVA có thể truy cập vào Volume. 64 | - Volume driver trả về thông tin kết nối, được truyền cho NOVA. 65 | - Ví dụ : iSCSI iqn and portal, FC WWPN. 66 | - NOVA tạo kết nối đến storage sử dụng thông tin được trả về. 67 | - NOVA chuyển volume device/file tới hypervisor. 68 | 69 | 70 | ### 6. Cinder Status. 71 | 72 | |Status|Mô tả| 73 | |------|-----| 74 | |Creating|Volume được tạo ra| 75 | |Available|Volume ở trạng thái sẵn sàng để attach vào một instane| 76 | |Attaching|Volume đang được gắn vào một instane| 77 | |In-use|Volume đã được gắn thành công vào instane| 78 | |Deleting|Volume đã được xóa thành công| 79 | |Error|Đã xảy ra lỗi khi tạo Volume| 80 | |Error deleting|Xảy ra lỗi khi xóa Volume| 81 | |Backing-up|Volume đang được back up| 82 | |Restore_backup|Trạng thái đang restore lại trạng thái khi back up| 83 | |Error_restoring|Có lỗi xảy ra trong quá trình restore| 84 | |Error_extending|Có lỗi xảy ra khi mở rộng Volume| 85 | 86 | 87 | ### Cinder back up. 88 | - Cinder có thể back up một volume. 89 | - Một bản back up là một bản sao lưu được lưu trữ vào ổ đĩa. Bản backup này được lưu trữ vào object storage. 90 | - Backups có thể cho phép phục hồi từ : 91 | 96 | 97 | ### 7. Advanced Features. 98 | 99 | - Snapshot : 100 | - Một snapshot là một bản sao của một thời điểm của dữ liệu chứa một volume. 101 | - Một snapshot sẽ cùng tồn tại trên storage backend như một volume đang hoạt động. 102 | - Quota : 103 | - Admin sẽ đặt giới hạn cho volume, khả năng backup và snapshot tùy thuộc vào chính sách cài đặt. 104 | - Volume transfer : 105 | - Chuyển một volume từ user này đến một user khác. 106 | - Encryption : 107 | - Mã hóa được thực hiện bởi NOVA sử dụng dm-crypt , là một hệ thống con minh bạch mã hóa đĩa trong Linux kernel. 108 | - Migration (Admin only): 109 | - Chuyển dữ liệu từ back-end hiện tại của volume đến một nơi mới. 110 | - Hai luồng chính phụ thuộc vào việc volume có được gắn vào hay không. 111 | 112 | # Tham khảo. 113 | 114 | - 2 file đính kèm trong thư mục [ref](https://github.com/datkk06/ghichep-OpenStack/tree/master/05-Cinder/ref). -------------------------------------------------------------------------------- /05-Cinder/ghichep-cinder.md: -------------------------------------------------------------------------------- 1 | # Các ghi chép về cinder 2 | 3 | ## Các chú ý về volume 4 | - Có 2 cách sử dụng volume: (http://prntscr.com/b8a9l7) 5 | - Sử dụng để gắn vào máy ảo đã được tạo trước đó: `bootable = false` 6 | - Sử dụng để boot máy ảo: `bootable = true` 7 | - File chứa trong thư mục `/var/lib/cinder/volumes` các các file quản lý volume được tạo ra, trong đó có đường dẫn tới volume. 8 | ``` 9 | root@cinder:/var/lib/cinder/volumes# cat volume-aa2f2db8-c93b-41ca-9119-d74310caa995 10 | 11 | 12 | backing-store /dev/cinder-volumes/volume-aa2f2db8-c93b-41ca-9119-d74310caa995 13 | driver iscsi 14 | incominguser j5GJW8rYpq5cmd263oXE JCYsTBXrX26ium4F 15 | 16 | write-cache on 17 | 18 | ``` 19 | 20 | - Kiểm tra các volume trên LVM bằng lệnh: http://prntscr.com/b8xoz4 21 | ```sh 22 | lvs 23 | 24 | hoặc 25 | 26 | lsbkl 27 | 28 | 29 | ``` 30 | 31 | - Volume được tạo trên LVM KHÔNG sử dụng cơ chế `thin` để cấp phát dung lượng lưu trữ (tạo bao nhiêu cấp bấy nhiêu.) 32 | 33 | - Nếu tách máy Cinder thành 1 node (Cinder node) khác và không sử dụng backend thì mặc định volume được tạo ra sẽ lưu tại node cinder. 34 | 35 | - Nếu boot máy ảo từ volume, file máy ảo sẽ nằm trên node Cinder. Node compute sẽ mount tới node cinder thông qua iscsi: http://prntscr.com/b8a7b3 36 | 37 | ## Các lệnh về volume 38 | 39 | - Khởi động các dịch vụ của `Cinder` 40 | ```sh 41 | # Trên Controller 42 | service cinder-api restart 43 | service cinder-scheduler restart 44 | 45 | # Trên Cinder node (nếu triển khai tách node cinder) 46 | service tgt restart 47 | service cinder-volume restart 48 | ``` 49 | 50 | - Tạo volume 51 | ```sh 52 | # Cú pháp đối với OpenStack Mitaka 53 | openstack volume create --size kich_thuoc ten_volume 54 | 55 | # Ví dụ tạo volume có kích thước 1Gb và tên là `volume01` 56 | openstack volume create --size 1 volume01 57 | ``` 58 | 59 | - Kiểm tra danh sách các volume 60 | ```sh 61 | openstack volume list 62 | ``` 63 | 64 | - Gắn volume và gỡ volume khỏi máy ảo 65 | ```sh 66 | # Cú pháp lệnh gắn volume 67 | openstack server add volume INSTANCE_NAME VOLUME_NAME 68 | 69 | # Cú pháp lệnh gỡ volume 70 | openstack server remove volume INSTANCE_NAME VOLUME_NAME 71 | 72 | # Trong đó: 73 | - INSTANCE_NAME: Tên máy ảo 74 | - VOLUME_NAME: Tên volume 75 | 76 | # Ví dụ: 77 | openstack server add volume vm01 volume01 # Gắn vào máy ảo 78 | 79 | openstack server remove volume vm99999000 vol01-demo # Gỡ ra khỏi máy ảo. 80 | ``` -------------------------------------------------------------------------------- /05-Cinder/images/ceph-in-openstack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/05-Cinder/images/ceph-in-openstack.png -------------------------------------------------------------------------------- /05-Cinder/images/cinder-Architect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/05-Cinder/images/cinder-Architect.png -------------------------------------------------------------------------------- /05-Cinder/images/cinder-attach-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/05-Cinder/images/cinder-attach-flow.png -------------------------------------------------------------------------------- /05-Cinder/images/ip-ceph-openstack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/05-Cinder/images/ip-ceph-openstack.png -------------------------------------------------------------------------------- /05-Cinder/ref/Cinder.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/05-Cinder/ref/Cinder.pptx -------------------------------------------------------------------------------- /05-Cinder/ref/cinder-havana-131111230629-phpapp02-140506113204-phpapp01.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/05-Cinder/ref/cinder-havana-131111230629-phpapp02-140506113204-phpapp01.pdf -------------------------------------------------------------------------------- /07-Horizon/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/07-Horizon/.gitkeep -------------------------------------------------------------------------------- /08-Ceilometer/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/08-Ceilometer/.gitkeep -------------------------------------------------------------------------------- /09-Heat/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/09-Heat/.gitkeep -------------------------------------------------------------------------------- /10-Trove/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/10-Trove/.gitkeep -------------------------------------------------------------------------------- /11. Designate/test-designate.md: -------------------------------------------------------------------------------- 1 | # Designate 2 | 3 | ##Designate cung cấp dịch vụ DNSaaS cho OpenStack. 4 | 5 | - DNS cho openstack với single-tenant(mặc định) hoặc mutil-tenant 6 | - Slave DNS 7 | - Kết hợp với Nova/ Neutron tạo bản ghi tên máy <---> ip 8 | 9 | ##Cài đặt Designate: 10 | 11 | Làm theo bước 1 và bước 2 thoe hướng dẫn ở link sau: 12 | 13 | https://github.com/vietstacker/devstack-note 14 | 15 | Clone git của devstack về bằng lệnh git 16 | 17 | Mặc định (nhánh master) trong git của devstack là source mới nhất của OpenStack. 18 | 19 | Trong git của devstack chứa các phiên bản của OpenStack (Mitaka, Liberty, Kilo, Juno ...) 20 | 21 | Trong hướng dẫn này sẽ thực hiển tải bản OpenStack Liberty 22 | 23 | git clone -b stable/liberty https://github.com/openstack-dev/devstack.git 24 | 25 | Clone git của designate 26 | 27 | git clone -b stable/liberty https://github.com/openstack/designate.git 28 | 29 | Thực hiện vào thư mục designate vừa clone về cà chạy file install.sh 30 | 31 | cd devstack 32 | ../designate/contrib/devstack/install.sh 33 | 34 | Tạo file local.conf 35 | 36 | Các shell trong devstack sẽ tham chiếu tới file local.conf để lấy giá trị các biến khi thực thi các dòng lệnh trong shell đó. 37 | 38 | File local cần phải các các khao báo tối thiểu về password cho các dịch vụ trong OpenStack như: MySQL, RabbitMQ .... Các biến còn lại sẽ lấy giá trị mặc định. 39 | 40 | Tùy vào tính năng cần test mà người dùng có thể khai báo trong file local.conf 41 | Trong ví dụ này chúng tôi sử dụng dải mạng 192.168.1.0/24 cho dải EXTERNAL 42 | Di chuyển vào thư mục devstack 43 | 44 | cd /devstack/ 45 | 46 | Tạo theo link sau: 47 | 48 | https://github.com/vietstacker/devstack-note/blob/master/file-local.conf-sample/devstack-designate-liberty.txt 49 | 50 | chạy file 51 | 52 | cd /home/stack/devstack/ 53 | 54 | ./stack.sh 55 | 56 | ##Tạo domain 57 | 58 | Có thể dùng câu lệnh như sau: 59 | 60 | designate domain-create --name hocchudong.com. --email hocchudong@gmail.vn 61 | 62 | designate domain-list 63 | 64 | 65 | Hoặc có thể dùng giao diện 66 | 67 | 68 | 69 | 70 | 71 | ##Tạo bản ghi cho domain 72 | 73 | Các loại bản ghi mà Designate hỗ trợ 74 | 75 | 76 | 77 | Tạo bản ghi A phân giải từ tên miền về IP (bản ghi AAA tương tự thay data là ipv6) 78 | 79 | designate record-create (id domian vừa tạo) --type A --name home.hocchudong.com. --data 172.16.10.4 80 | 81 | 82 | hoăc sử dụng giao diện: 83 | 84 | 85 | 86 | Tạo bản ghi bí danh CNAME 87 | 88 | designate record-create (id domain vừa tạo) --type CNAME --name home.hocchudong.com. --data www.hocchudong.com. 89 | 90 | với giao diện sẽ như sau: 91 | 92 | 93 | 94 | Đối với bản ghi PTR (bản ghi phân giải ngược từ ip sang tên miền) 95 | 96 | Tạo domain và bản ghi mới hoàn toàn và bằng API theo hướng dẫn sau 97 | 98 | http://docs.openstack.org/developer/designate/howtos/manage-ptr-records.html 99 | 100 | ##Test Designate 101 | 102 | Tạo máy ảo chuyển DNS về địa chỉ máy cài Designate và sử dụng lệnh Nslookup để test 103 | 104 | 105 | ##Link tham khảo 106 | 107 | http://docs.openstack.org/developer/designate/ 108 | 109 | https://support.rc.nectar.org.au/docs/designate-commands 110 | 111 | http://docs.openstack.org/cli-reference/content/designateclient_commands.html 112 | -------------------------------------------------------------------------------- /11. Designate/test.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/11. Designate/test.txt -------------------------------------------------------------------------------- /12.Swift/Test Advance API.md: -------------------------------------------------------------------------------- 1 | ##1. DLO (object lớn hơn 5gb) 2 | - tự động tạo file manifest để link giữa các phần của đối tượng 3 | - đầu tiên upload các phần của đối tượng 4 | 5 | ``` 6 | curl -i -X PUT -H 'X-Auth-Token: 6a36d61dd9f94be28bb4bc12f92a1144' http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/container/myobject/1 --data-binary '1' 7 | curl -i -X PUT -H 'X-Auth-Token: 6a36d61dd9f94be28bb4bc12f92a1144' \ http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/container/myobject/2 --data-binary '2' 8 | curl -i -X PUT -H 'X-Auth-Token: 6a36d61dd9f94be28bb4bc12f92a1144' \ http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/container/myobject/3 --data-binary '3' 9 | 10 | ``` 11 | 12 | ##### tạo file manifest 13 | 14 | ``` 15 | curl -i -X PUT -H 'X-Auth-Token: 3f4a05b2ba6a4d1f9fa50b95da58dfdc' \ 16 | -H 'X-Object-Manifest: container/myobject/' \ http://10.10.10.140:8080/v1/AUTH_11af54a847164d75b8b6ddad0e82c079/container/myobject --data-binary '' 17 | ``` 18 | 19 | ##2. Versioning object 20 | 21 | - Lưu trữ những bản cũ của object ra 1 container riêng tránh trường hợp bị ghi đè 22 | 23 | - tạo 2 container 24 | 25 | ``` 26 | curl -i -X PUT -H "X-Auth-Token: a05228d261fe46f1be1c298802416549" http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/fragile_data 27 | curl -i -X PUT -H "X-Auth-Token: a05228d261fe46f1be1c298802416549" http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/old_versions 28 | ``` 29 | 30 | - tạo trường X-version-location kích hoạt chức năng 31 | 32 | ``` 33 | curl -i -X PUT -H "X-Auth-Token: a05228d261fe46f1be1c298802416549" -H "X-Versions-Location: old_versions" http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/fragile_data 34 | ``` 35 | 36 | - Tạo object và update vào 2 nội dung khác nhau sau đó kiểm tra ở container old_versions sẽ thấy phiên bản có nội dung là 111 37 | 38 | ``` 39 | curl -i -X PUT -H "X-Auth-Token: a05228d261fe46f1be1c298802416549" "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/fragile_data/obj1" --data-binary '111' 40 | curl -i -X PUT -H "X-Auth-Token: a05228d261fe46f1be1c298802416549" "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/fragile_data/obj1" --data-binary '222' 41 | ``` 42 | 43 | ##3. Tempurl (url tạm thời) 44 | - kích hoạt tính năng với url key đặc trưng 45 | 46 | ``` 47 | curl -i -X POST http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf -H "X-Account-Meta-Temp-URL-Key: secret" -H "X-Auth-Token: a7fba3e7e1b447eeb0056922cdbe4460" -i 48 | ``` 49 | 50 | - kiem tra url key 51 | 52 | ``` 53 | curl -i http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf?format=json -X GET -H "X-Auth-Token: a7fba3e7e1b447eeb0056922cdbe4460" 54 | ``` 55 | 56 | - tạo url tạm thời, kết quả của lệnh sau sẽ sinh ra 1 url tạm thời để download đối tượng. 57 | ``` 58 | swift tempurl 59 | ``` 60 | 61 | 62 | 63 | ##4.Custome metadata 64 | - thay đổi metadata của account 65 | 66 | ``` 67 | curl -i -X POST -H "X-Auth-Token: e3a67b06f1a04760bafdd0998d942640" -H "X-Account-Meta-Favorite-Even-Prime: 2" "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf" 68 | ``` 69 | 70 | - thay đổi metadata của container 71 | 72 | ``` 73 | curl -i -X POST -H "X-Auth-Token:e3a67b06f1a04760bafdd0998d942640 " -H "X-Container-Meta-Used-For-Web: No" "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/fragile_data" 74 | ``` 75 | 76 | ##5.Swift cluster info (thông tin của cụm cluster) 77 | `curl -X GET http://172.16.69.238:8080/info "X-auth-token:1f20552b1cc34ba0b0eed62db443166f"`` 78 | 79 | 80 | ##6.range request 81 | - phạm vi yêu cầu (ví dụ đối tượng có 10byte thì chỉ thao tác với 5byte đầu) 82 | 83 | ``` 84 | curl -X GET -H "X-Auth-Token: f6bf5d8f44d04eefa08179ac6ed6359c" -H "Range: bytes=1-5" "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/fragile_data/obj1" 85 | ``` 86 | 87 | ##7.content-type (định dạng đối tượng) 88 | 89 | ``` 90 | curl -i -X PUT -H "X-Auth-Token: 8c29c7a889824abaac03e14acbfca816" "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/tesst/obj2" \ --data-binary @/tmp/myimage/beautiful-resort.jpg -H "Content-Type: image/png" 91 | ``` 92 | 93 | ##8.bulk upload (upload nhiều đối tượng) 94 | - nén nhiều đối tượng vào file nén archive.tar sau khi upload Swift sẽ giải nén và cho vào 1 thư mục 95 | ``` 96 | curl -X PUT -H "X-Auth-Token: 3d6463ed656b4783b9507021ad713760" \ "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/tesst/cont123?extract-archive=.tar" --data-binary @/tmp/myimage/archive.tar 97 | ``` 98 | ##9. bulk delete(delete nhiều đối tượng) 99 | 100 | ``` 101 | curl -i -X DELETE -H "X-Auth-Token: c2fa1269410a46aa8039f8b7d1ce5283" -H "Content-Type: text/plain" -H "Accept: application/json" http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/?bulk-delete --data-binary @bulklist.txt 102 | 103 | ``` 104 | 105 | - tạo 1 bulklist.txt có nội dung là đối tượng muốn xóa theo dạng container/object 106 | 107 | 108 | ##10.Static Web Hosting 109 | - hiển thị container như 1 web tĩnh. tạo file my-index.txt nội dung hello, sau khi thực hiện lệnh dưới, vào trình duyệt với đường dẫn tới container sẽ hiển thị nội dung file index 110 | 111 | ``` 112 | curl -X POST -H "X-Auth-Token: ab189a14361f4a93be5ee783331b2fb2" -H 'X-Container-Read: .r:*' "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/tesst" 113 | 114 | curl -X POST -H "X-Auth-Token: ab189a14361f4a93be5ee783331b2fb2" -H 'X-Container-Meta-Web-Index: my-index.html' "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/tesst" 115 | 116 | ``` 117 | 118 | ##11. make container public 119 | 120 | `curl -X POST -H "X-Auth-Token: $TOKEN" -H 'X-Container-Read: .r:*' "$STORAGE_URL/website"` 121 | -------------------------------------------------------------------------------- /12.Swift/chu-thich.md: -------------------------------------------------------------------------------- 1 | #Metadata: 2 | Là dạng dữ liệu miêu tả về dữ liệu. Bao quát tất cả các phương diện của dữ liệu như những thông tin về người khởi tạo, trường khởi tạo... -------------------------------------------------------------------------------- /12.Swift/ghichep-swift.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/12.Swift/ghichep-swift.txt -------------------------------------------------------------------------------- /12.Swift/test API: -------------------------------------------------------------------------------- 1 | 1. DLO (object lớn hơn 5gb) 2 | tự động tạo file manifest để link giữa các phần của đối tượng 3 | # đầu tiên upload các phần của đối tượng 4 | curl -i -X PUT -H 'X-Auth-Token: 3f4a05b2ba6a4d1f9fa50b95da58dfdc' http://10.10.10.140:8080/v1/AUTH_11af54a847164d75b8b6ddad0e82c079/container/myobject/1 --data-binary '1' 5 | curl -i -X PUT -H 'X-Auth-Token: 3f4a05b2ba6a4d1f9fa50b95da58dfdc' \ http://10.10.10.140:8080/v1/AUTH_11af54a847164d75b8b6ddad0e82c079/container/myobject/2 --data-binary '2' 6 | curl -i -X PUT -H 'X-Auth-Token: 3f4a05b2ba6a4d1f9fa50b95da58dfdc' \ http://10.10.10.140:8080/v1/AUTH_11af54a847164d75b8b6ddad0e82c079/container/myobject/3 --data-binary '3' 7 | 8 | # tạo file manifest 9 | curl -i -X PUT -H 'X-Auth-Token: 3f4a05b2ba6a4d1f9fa50b95da58dfdc' \ 10 | -H 'X-Object-Manifest: container/myobject/' \ http://10.10.10.140:8080/v1/AUTH_11af54a847164d75b8b6ddad0e82c079/container/myobject --data-binary '' 11 | 12 | 13 | 2. Versioning object 14 | Lưu trữ những bản cũ của object ra 1 container riêng tránh trường hợp bị ghi đè 15 | // tạo 2 container 16 | curl -i -X PUT -H "X-Auth-Token: a05228d261fe46f1be1c298802416549" http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/fragile_data 17 | curl -i -X PUT -H "X-Auth-Token: a05228d261fe46f1be1c298802416549" http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/old_versions 18 | 19 | // tạo trường X-version-location kích hoạt chức năng 20 | curl -i -X PUT -H "X-Auth-Token: a05228d261fe46f1be1c298802416549" -H "X-Versions-Location: old_versions" http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/fragile_data 21 | 22 | //Tạo object và update vào 2 nội dung khác nhau sau đó kiểm tra ở container old_versions sẽ thấy phiên bản có nội dung là 111 23 | curl -i -X PUT -H "X-Auth-Token: a05228d261fe46f1be1c298802416549" "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/fragile_data/obj1" --data-binary '111' 24 | curl -i -X PUT -H "X-Auth-Token: a05228d261fe46f1be1c298802416549" "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/fragile_data/obj1" --data-binary '222' 25 | 26 | 27 | 3. Tempurl (url tạm thời) 28 | //kích hoạt tính năng với url key đặc trưng 29 | curl -i -X POST http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf 'X-Account-Meta-Temp-URL-Key: secret' -H 'X-Auth-Token: 60b8d091256a46f193ffcc159357e61f' -i 30 | 31 | //kiem tra url key 32 | curl -i "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf?format=json" -X GET -H "X-Auth-Token: 0cf09060138e4918a39a3528848159ae" //kiem tra url key 33 | 34 | //tạo url tạm thời, kết quả của lệnh sau sẽ sinh ra 1 url tạm thời để download đối tượng. 35 | swift tempurl 36 | 37 | 38 | 39 | 4.Custome metadata 40 | // thay đổi metadata của account 41 | curl -i -X POST -H "X-Auth-Token: e3a67b06f1a04760bafdd0998d942640" -H "X-Account-Meta-Favorite-Even-Prime: 2" "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf" 42 | 43 | //thay đổi metadata của container 44 | curl -i -X POST -H "X-Auth-Token:e3a67b06f1a04760bafdd0998d942640 " -H "X-Container-Meta-Used-For-Web: No" "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/fragile_data" 45 | 46 | 47 | 5.Swift cluster info (thông tin của cụm cluster) 48 | curl -X GET http://172.16.69.238:8080/info "X-auth-token:1f20552b1cc34ba0b0eed62db443166f" 49 | 50 | 51 | 6.range request 52 | // phạm vi yêu cầu (ví dụ đối tượng có 10byte thì chỉ thao tác với 5byte đầu) 53 | curl -X GET -H "X-Auth-Token: f6bf5d8f44d04eefa08179ac6ed6359c" -H "Range: bytes=1-5" "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/fragile_data/obj1" 54 | 55 | 56 | 7.content-type (định dạng đối tượng) 57 | curl -i -X PUT -H "X-Auth-Token: 8c29c7a889824abaac03e14acbfca816" "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/tesst/obj2" \ --data-binary @/tmp/myimage/beautiful-resort.jpg -H "Content-Type: image/png" 58 | 59 | 60 | 8.bulk upload (upload nhiều đối tượng) 61 | //nén nhiều đối tượng vào file nén archive.tar sau khi upload Swift sẽ giải nén và cho vào 1 thư mục 62 | curl -X PUT -H "X-Auth-Token: 3d6463ed656b4783b9507021ad713760" \ "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/tesst/cont123?extract-archive=.tar" --data-binary @/tmp/myimage/archive.tar 63 | 64 | 9. bulk delete(delete nhiều đối tượng) 65 | curl -i -X DELETE -H "X-Auth-Token: c2fa1269410a46aa8039f8b7d1ce5283" -H "Content-Type: text/plain" -H "Accept: application/json" http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/?bulk-delete --data-binary @bulklist.txt 66 | 67 | tạo 1 bulklist.txt có nội dung là đối tượng muốn xóa theo dạng container/object 68 | 69 | 70 | 10.Static Web Hosting 71 | // hiển thị container như 1 web tĩnh. tạo file my-index.txt nội dung hello, sau khi thực hiện lệnh dưới, vào trình duyệt với đường dẫn tới container sẽ hiển thị nội dung file index 72 | 73 | curl -X POST -H "X-Auth-Token: ab189a14361f4a93be5ee783331b2fb2" -H 'X-Container-Read: .r:*' "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/tesst" 74 | 75 | curl -X POST -H "X-Auth-Token: ab189a14361f4a93be5ee783331b2fb2" -H 'X-Container-Meta-Web-Index: my-index.html' "http://172.16.69.238:8080/v1/AUTH_870d62be2c254d428226da346dfe9fbf/tesst" 76 | -------------------------------------------------------------------------------- /12.Swift/testswift.py: -------------------------------------------------------------------------------- 1 | import swiftclient 2 | 3 | auth_url = 'http://10.10.10.140:35357/v2.0' 4 | username = raw_input('Nhap vao ten nguoi dung:') 5 | password = raw_input('Nhap vao password: ') 6 | print "\n" 7 | print "-"*100 8 | tenant = 'admin' 9 | tenant_id = '11af54a847164d75b8b6ddad0e82c079' 10 | region = 'RegionOne' 11 | swift_conn = swiftclient.client.Connection(authurl=auth_url, user=username, key=password, tenant_name=tenant, auth_version='2.0', os_options={'tenant_id':tenant_id, 'region_name': region }) 12 | 13 | container_name = raw_input('Nhap vao ten container: ') 14 | swift_conn.put_container(container_name) 15 | print "\n" 16 | print "-"*100 17 | object_name = raw_input('nhap vao ten object: ') 18 | 19 | data = raw_input ('nhap vao du lieu: ') 20 | swift_conn.put_object(container_name, object_name, data) 21 | 22 | link=raw_input('Nhap vao link dan den file: ') 23 | contai=raw_input('Nhap vao ten container muon up doi tuong: ') 24 | file_name=raw_input('Nhap vao ten file muon luu: ') 25 | with open(link) as localfile: 26 | swift_conn.put_object(contai, file_name, localfile) -------------------------------------------------------------------------------- /13-Kolla/README.md: -------------------------------------------------------------------------------- 1 | # Giới thiệu về kolla 2 | 3 | Kolla là một trong 10 project lớn của Openstack với mục tiêu: 4 | ```sh 5 | To provide production-ready containers and deployment tools for operating 6 | OpenStack clouds. 7 | ``` 8 | 9 | Kolla cung cấp các images (là các OpenStack services và các thành phần hỗ trợ) cho docker containers, ansible playbook, Kubernetes template để deploy OpenStack. 10 | 11 | #### Ý tưởng chính của kolla là: 12 | - Các services như Keystone, glance, horizon, neutron,.... sẽ được chạy trên containers. 13 | - Instance được tạo ra, sẽ chạy trên node compute giống với cài đặt như bình thường. 14 | 15 | #### Ưu điểm khi sử dụng kolla: 16 | - Đơn giản hóa việc triển khai OpenStack: nhanh chóng, dễ dàng. 17 | - Dễ dàng mở rộng (scale), nâng cấp (upgrade) OpenStack. 18 | - Chia nhỏ các services của OpenStack thành micro service (Docker containers). Mỗi micro service sẽ độc lập trong deployment, upgrading và scaling,... 19 | 20 | #### Để dễ dàng trong việc tìm hiểu về kolla, các bạn nên có các kiến thức nền tảng sau: 21 | - Ansible: https://github.com/hocchudong/ghichep-ansible 22 | - Docker: https://github.com/hocchudong/ghichep-docker 23 | - Kubernetes: https://github.com/hocchudong/ghichep-kubernetes 24 | 25 | Kolla sẽ áp dụng các nền tảng công nghệ trên để thực hiện được mục tiêu của mình. 26 | 27 | #### Có thể cài đặt Kolla với 2 phương pháp khác nhau: 28 | - Cài đặt chạy các services openstack trên nền docker thuần. 29 | - Cài đặt chạy các services openstack trên nền kubernetes sử dụng công nghệ containers là docker. -------------------------------------------------------------------------------- /13-Kolla/config_openstack.md: -------------------------------------------------------------------------------- 1 | # Cấu hình openstack trong kolla 2 | File cấu hình các service trong kolla là `/etc/kolla/globals.yaml` 3 | 4 | Dựa vào file cấu hình này mà ansible sẽ tạo ra file config đối với các service. 5 | 6 | Chúng ta sẽ tìm hiểu về nội dung cấu hình trong file này. 7 | 8 | 9 | ## 1. Cấu hình kolla 10 | ```sh 11 | ################### 12 | # Kolla options 13 | ################### 14 | 15 | # Valid options are [ centos, oraclelinux, ubuntu ] 16 | #- kolla_base_distro: "centos"` 17 | 18 | # Valid options are [ binary, source ] 19 | #kolla_install_type: "binary" 20 | 21 | # Valid option is Docker repository tag 22 | #openstack_release: "" 23 | 24 | # This should be a VIP, an unused IP on your network that will float between 25 | # the hosts running keepalived for high-availability. When running an All-In-One 26 | # without haproxy and keepalived, this should be the first IP on your 27 | # 'network_interface' as set in the Networking section below. 28 | - `kolla_internal_vip_address: "10.10.10.254" 29 | ``` 30 | 31 | - `kolla_base_distro: "centos"`: Image các service trong openstack dựa trên nền distro nào? 32 | - `kolla_install_type: "binary"`: Image các service có dưới 2 dạng là binary và source. Tham khảo tại repo chứa image trên docker. https://hub.docker.com/u/kolla/ 33 | - `openstack_release`: Phiên bản image của các service. Mặc định nó sẽ lấy phiên bản mới nhất. Phiên bản mới nhất hiện tại là 4.0.0. 34 | - `kolla_internal_vip_address: "10.10.10.254"`: Địa chỉ VIP chạy HA proxy và keepalived. 35 | 36 | ## 2. Cấu hình docker. 37 | 38 | ```sh 39 | #################### 40 | # Docker options 41 | #################### 42 | 43 | #docker_registry: "172.16.0.10:4000" 44 | #docker_namespace: "companyname" 45 | #docker_registry_username: "sam" 46 | #docker_registry_password: "correcthorsebatterystaple" 47 | ``` 48 | 49 | - Cấu hình repository là nơi chứa image của các service openstack. Nếu không cấu hình, mặc định docker sẽ pull các image từ docker hub. https://hub.docker.com/u/kolla/ 50 | 51 | ## 3. Cấu hình Network 52 | ```sh 53 | ############################### 54 | # Neutron - Networking Options 55 | ############################### 56 | 57 | #network_interface: "eth0" 58 | #`neutron_external_interface: "eth1" 59 | # Valid options are [ openvswitch, linuxbridge ] 60 | #neutron_plugin_agent: "openvswitch" 61 | ``` 62 | 63 | - `network_interface`: interface kết nối các service trên các node. 64 | - `neutron_external_interface`: interface kết nối ra mạng external. 65 | - `neutron_plugin_agent`: Sử dụng giải pháp network nào? Có 2 lựa chọn là openvswitch hoặc linuxbridge. 66 | 67 | ## 4. Cấu hình OpenStack 68 | ```sh 69 | #################### 70 | # OpenStack options 71 | #################### 72 | 73 | # Valid options are [ novnc, spice ] 74 | #nova_console: "novnc" 75 | # OpenStack services can be enabled or disabled with these options 76 | #enable_aodh: "no" 77 | #enable_barbican: "no" 78 | #enable_ceilometer: "no" 79 | #enable_central_logging: "no" 80 | #enable_ceph: "no" 81 | #enable_ceph_rgw: "no" 82 | #enable_chrony: "no" 83 | #enable_cinder: "no" 84 | #enable_cinder_backend_hnas_iscsi: "no" 85 | #enable_cinder_backend_hnas_nfs: "no" 86 | #enable_cinder_backend_iscsi: "no" 87 | #enable_cinder_backend_lvm: "no" 88 | #enable_cinder_backend_nfs: "no" 89 | #enable_cloudkitty: "no" 90 | #enable_collectd: "no" 91 | #enable_congress: "no" 92 | #enable_designate: "no" 93 | #enable_destroy_images: "no" 94 | #enable_etcd: "no" 95 | #enable_freezer: "no" 96 | #enable_gnocchi: "no" 97 | #enable_grafana: "no" 98 | #enable_heat: "yes" 99 | #enable_horizon: "yes" 100 | ``` 101 | 102 | - `nova_console: "novnc": Console đến nova bằng phương pháp nào? 103 | - `enable_horizon: "yes"``: Cấu hình sẽ cài đặt các service nào. (yes or no). 104 | 105 | ### 4.1 Cấu hình keystone 106 | ```sh 107 | ############################## 108 | # Keystone - Identity Options 109 | ############################## 110 | 111 | # Valid options are [ uuid, fernet ] 112 | #`keystone_token_provider: 'uuid'` 113 | #fernet_token_expiry: 86400 114 | ``` 115 | 116 | - `keystone_token_provider: 'uuid'`: Sử dụng dạng token nào. 117 | - `fernet_token_expiry: 86400`: Thời gian hết hạn của token fernet. 118 | 119 | ## 4.2 Cấu hình glance 120 | ```sh 121 | ######################### 122 | # Glance - Image Options 123 | ######################### 124 | # Configure image backend. 125 | #glance_backend_file: "yes" 126 | #glance_backend_ceph: "no" 127 | ``` 128 | 129 | - Cấu hình backend chứa image là file hay ceph? 130 | 131 | ## 4.3 Cấu hình nova 132 | 133 | ```sh 134 | ######################### 135 | # Nova - Compute Options 136 | ######################### 137 | #nova_backend_ceph: "{{ enable_ceph }}" 138 | ``` 139 | 140 | Cấu hình nova có sử dụng ceph không? 141 | 142 | ## 4.4 Cấu hình cinder 143 | ```sh 144 | ################################# 145 | # Cinder - Block Storage Options 146 | ################################# 147 | # Enable / disable Cinder backends 148 | #cinder_backend_ceph: "{{ enable_ceph }}" 149 | #cinder_volume_group: "cinder-volumes" 150 | #cinder_backup_driver: "nfs" 151 | #cinder_backup_share: "" 152 | #cinder_backup_mount_options_nfs: "" 153 | ``` 154 | 155 | Cấu hình cinder có sử dụng ceph? 156 | 157 | #### Ngoài ra còn cấu hình các dịch vụ khác. Các bạn tham khảo file mẫu `globals.yaml` trong thư mục `file_config`. -------------------------------------------------------------------------------- /13-Kolla/kolla-ansible/Kolla-Ansible-Docker.md: -------------------------------------------------------------------------------- 1 | # 1. Mô hình mạng 2 | 3 | ![](https://github.com/hocchudong/ghichep-OpenStack/blob/master/13-Kolla/kolla-ansible/images/openstack-mitaka-network-layout.png?raw=true) 4 | 5 | - Cài đặt phiên bản openstack mitaka trên 2 node controller và compute. 6 | 7 | ### Các yêu cầu về phiên bản phần mềm đối với openstack mitaka. 8 | | Component | Min Version | Max Version | Comment | 9 | |:-------|:------:|-------:|-------:| 10 | | Ansible | 1.9.4 | <2.0.0 | On deployment host | 11 | | Docker | 1.10.0 | none | On target nodes | 12 | | Docker Python | 1.6.0 | none | On target nodes | 13 | | Python Jinja2 | 2.6.0 | none | On deployment host | 14 | 15 | #### Note: Thực hiện lần lượt các bước. Ở từng bước có chú thích là: 16 | - **all**: Tương ứng là thực hiện trên cả 2 node. 17 | - **controller**: Thực hiện trên node controller. 18 | - **compute**: Thực hiện trên node compute. 19 | 20 | ## 1. Upgrade the kernel (all) 21 | ```sh 22 | apt-get update && apt-get -y install linux-image-generic-lts-wily 23 | ``` 24 | 25 | ## 2. Modify the hosts 26 | - On controller 27 | ```sh 28 | vi /etc/hostname 29 | controller 30 | ``` 31 | 32 | - On compute 33 | ```sh 34 | vi /etc/hostname 35 | compute 36 | ``` 37 | 38 | - On all 39 | ```sh 40 | 127.0 .0 .1 localhost 41 | 10.10.10.10 controller 42 | 10.10.10.20 compute 43 | ``` 44 | 45 | ## 3. Install Docker (all) 46 | ```sh 47 | curl -sSL https://get.docker.io | bash 48 | usermod -aG docker root 49 | mount --make-shared /run 50 | service docker restart 51 | apt-get install -y python-pip 52 | pip install -U docker-py 53 | ``` 54 | 55 | ## 4. Install NTP (all) 56 | ```sh 57 | apt-get install ntp -y 58 | ``` 59 | 60 | ## 5. Install Ansible (controller) 61 | ```sh 62 | apt-get install -y software-properties-common 63 | pip install ansible==1.9.6 64 | ``` 65 | 66 | ## 6. Install the ssh key (all) 67 | - Cho phép login với user root 68 | ```sh 69 | $ vi /etc/ssh/sshd_config 70 | "PermitRootLogin Without-password" -> "PermitRootLogin yes" 71 | $ sudo service ssh restart 72 | ``` 73 | 74 | - Tạo và trao đổi khóa cho 2 node. 75 | ```sh 76 | [root@controller ~]# ssh-keygen 77 | [root@compute ~]# ssh-keygen 78 | [root@controller .ssh]# scp root@compute:~/.ssh/id_rsa.pub id_rsa_compute.pub 79 | [root@controller .ssh]# cat id_rsa.pub >> ~/.ssh/authorized_keys 80 | [root@controller .ssh]# cat id_rsa_compute.pub >> ~/.ssh/authorized_keys 81 | [root@controller .ssh]# scp authorized_keys root@compute:~/.ssh/authorized_keys 82 | ``` 83 | 84 | ## 7. Install the openstack client Install the Openstack client (controller) 85 | ```sh 86 | apt-get install -y python-dev libffi-dev libssl-dev gcc 87 | pip install -U python-openstackclient python-neutronclient 88 | ``` 89 | 90 | ## 8. Installing the Kolla (controller) 91 | - Clone Kolla projects: Mitaka. 92 | ```sh 93 | git clone -b stable/mitaka https://github.com/openstack/kolla.git 94 | ``` 95 | 96 | - Install Kolla tools and dependencies: 97 | ```sh 98 | pip install kolla/ (đang ở thư mục cha của thư mục kolla) 99 | ``` 100 | 101 | - Nếu lỗi, chạy các lệnh sau, và tiến hành chạy lại lệnh trên 102 | ```sh 103 | apt-get purge -y python-pip 104 | wget https://bootstrap.pypa.io/get-pip.py 105 | python ./get-pip.py 106 | apt-get install python-pip 107 | ``` 108 | 109 | - Copy file config kolla: 110 | ```sh 111 | $ sudo cd kolla 112 | $ sudo cp -r etc/kolla /etc/ 113 | ``` 114 | 115 | ## 9. Configure the local Docker repository 116 | 117 | ### 9.1. Start the Registry (controller) 118 | ```sh 119 | docker run -d -p 4000:5000 --restart=always --name registry registry:2 120 | ``` 121 | 122 | ### 9.2. Modify the docker daemon default parameters (all) 123 | ```sh 124 | vi /etc/default/docker 125 | DOCKER_OPTS="--insecure-registry 10.10.10.10:4000" 126 | service docker restart 127 | ``` 128 | 129 | ## 10. Modify the configuration of Kolla (controller) 130 | ```sh 131 | vi /usr/local/share/kolla/ansible/inventory/multinode 132 | ``` 133 | 134 | Cấu hình các thành phần sẽ được cài đặt trên các node. Ở đây, tôi cấu hình phần compute sẽ chạy trên node compute, các thành phần còn lại chạy trên node controller. 135 | ```sh 136 | [control] 137 | # These hostname must be resolvable from your deployment host 138 | controller 139 | # The network nodes are where your l3-agent and loadbalancers will run 140 | # This can be the same as a host in the control group 141 | [network] 142 | controller 143 | [compute] 144 | compute 145 | [storage] 146 | controller 147 | ... 148 | ``` 149 | 150 | ## 11. Compile openstack the docker image (controller) 151 | ```sh 152 | kolla-build --base ubuntu --type source --registry 10.10.10.10:4000 --push 153 | ``` 154 | 155 | ## 12. Deploy Kolla (controller) 156 | ```sh 157 | vi /etc/kolla/globals.yml 158 | ``` 159 | 160 | - Cấu hình các thông tin tương ứng. 161 | ```sh 162 | Kolla_base_distro: "ubuntu" 163 | kolla_install_type: "source" 164 | kolla_internal_vip_address: "10.10.10.50" 165 | network_interface: "eth0" 166 | neutron_external_interface: "eth1" 167 | docker_registry: "10.10.10.10:4000" 168 | ... 169 | ``` 170 | 171 | - Sau khi cấu hình, chạy các lệnh sau: 172 | ```sh 173 | kolla-genpwd #Gen password các services. 174 | kolla-ansible prechecks -i /usr/local/share/kolla/ansible/inventory/multinode #Check before deploy. 175 | kolla-ansible deploy -i /usr/local/share/kolla/ansible/inventory/multinode #Deploy. 176 | ``` 177 | 178 | ## 13. Generate an openrc file (controller) 179 | ```sh 180 | kolla-ansible post-deploy 181 | ``` 182 | 183 | - Đến đây, quá trình cài đặt đã hoàn tất. 184 | - Ngoài ra, Openstack còn cung cấp cho ta các scripts tự động hóa thực hiện các công việc như: 185 | - Upload cirros image và tạo một mảng ảo. 186 | ```sh 187 | source /etc/kolla/admin-openrc.sh 188 | kolla/tools/init-runonce 189 | ``` 190 | - Xóa các containers openstack: 191 | ```sh 192 | tools/cleanup-containers 193 | ``` 194 | - Xóa các image openstack 195 | ```sh 196 | tools/cleanup-images 197 | ``` 198 | 199 | 200 | 201 | # Ref: 202 | http://cshuo.top/2016/05/26/kolla-mitaka-ubuntu-14-04/ 203 | https://greatbsky.github.io/kolla-for-openstack-in-docker/en.html 204 | http://egonzalez.org/openstack-kolla-deployment-from-rdo-packages/ 205 | http://ivan.chavero.com.mx/blog/doku.php/blog:installing_containerized_openstack_using_kolla 206 | https://docs.openstack.org/developer/kolla-ansible/quickstart.html -------------------------------------------------------------------------------- /13-Kolla/kolla-ansible/images/openstack-mitaka-network-layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/13-Kolla/kolla-ansible/images/openstack-mitaka-network-layout.png -------------------------------------------------------------------------------- /Masakari/docs/masakari-python-client.md: -------------------------------------------------------------------------------- 1 | # Openstack Python Masakari Client 2 | 3 | ____ 4 | 5 | # Mục lục 6 | 7 | 8 | - [1. Giới thiệu về Python Masakari Client](#about) 9 | - [2. Cài đặt và sử dụng Python Masakari Client](#config) 10 | - [Các nội dung khác](#content-others) 11 | 12 | ____ 13 | 14 | # Nội dung 15 | 16 | - ### 1. Giới thiệu về Python Masakari Client 17 | - Là công cụ cho phép người sử dụng thao tác và quản lý cho Masakari 18 | 19 | - ### 2. Cài đặt và sử dụng Python Masakari Client 20 | - #### Cài đặt python-masakariclient 21 | - Clone python-masakariclient sử dụng git: 22 | 23 | # git clone http://github.com/openstack/python-masakariclient.git 24 | 25 | - Install requirements: 26 | 27 | # pip install -r requirements.txt 28 | 29 | - Chạy file `setup.py` để cài đặt `python-masakariclient`: 30 | 31 | # python setup.py install 32 | 33 | - Tạo Masakari client environment scripts: 34 | 35 | Tạo ra một file với tên là `masakari-openrc` với nội dung như sau: 36 | 37 | export OS_AUTH_PLUGIN=keystone 38 | export OS_AUTH_URL=auth_url 39 | export OS_DOMAIN_ID=default 40 | export OS_IDENTITY_API_VERSION=3 41 | export OS_IMAGE_API_VERSION=2 42 | export OS_PASSWORD=password 43 | export OS_PROJECT_DOMAIN_ID=Default 44 | export OS_PROJECT_NAME=service 45 | export OS_USER_DOMAIN_NAME=Default 46 | export OS_USERNAME=masakari 47 | 48 | thay `auth_url` bởi enpoint của Identity service. 49 | 50 | - Nếu thực hiện cài `python-masakariclient` trên host đã cài đặt `masakari` thì ta không cần phải cầu hình gì thêm. Ngược lại, ta cần phải thực hiện cấu hình tương tự như cấu hình cho `masakari` đối với file `masakari.conf`. Chi tiết tại [Cấu hình masakari](masakari.md#config) 51 | 52 | - Để biết rõ hơn chi tiết về việc sử dụng python-masakariclient, ta sử dụng: 53 | 54 | # masakari --help 55 | ____ 56 | 57 | # Các nội dung khác 58 | -------------------------------------------------------------------------------- /Masakari/docs/overview-masakari.md: -------------------------------------------------------------------------------- 1 | # Giới thiệu về Openstack Masakari 2 | 3 | ____ 4 | 5 | # Mục lục 6 | 7 | 8 | - [1. Giới thiệu về Masakari](#about) 9 | - [2. Tổng quan về các thành phần của Masakari](#overview) 10 | - [3. Cách thức hoạt động của Masakari](#workflow) 11 | - [Các nội dung khác](#content-others) 12 | 13 | ____ 14 | 15 | # Nội dung 16 | 17 | - ### 1. Giới thiệu về Masakari 18 | - Masakari là một project trong Openstack cung cấp Instances High Availability Service bằng việc tự động phục hồi failed instances. Hiện tại Masakari có thể làm việc với Virtual Machine(VM)s sử dụng nền tảng dựa trên KVM từ events bị lỗi chẳng hạn như `VM process down`, `nova-compute host failed`. 19 | - Masakari có thể cung cấp API cho phép ta quản lý và điều khiển các cơ chế phục hồi tự động của Masakari. 20 | 21 | 22 | - ### 2. Tổng quan về các thành phần của Masakari 23 | - Masakari bao gồm các thành phần chính sau: 24 | 1. Masakari-API 25 | - Cung cấp API để các thành phần khác gọi đến và thực hiện tương tác với Masakari-database 26 | 2. Masakari-Engine 27 | - Cung cấp các cơ chế phục hồi, xử lý khi có notifications gửi đến Masakari-API 28 | 3. Masakari-CLI 29 | - Cung cấp giao diện CLI cho phép thực hiện thao tác quản lý các segments, nodes, and notifications được sử dụng trong Masakari. 30 | 4. Masakari-Monitors 31 | - Cung cấp các công cụ giám sát về nova-compute node, process, instances trên các nova-compute (instance monitor và introspective instance monitor) thông qua việc monitor libvert để phát hiện VMs down, monitor manager process để phát hiện process down và monitor thông qua pacemaker-corosync để phát hiện nova-compute host down. 32 | 5. Masakari-database. 33 | - Lưu giữ các thông tin về notifications, nova-compute host, process failed và các cơ chế phục hồi. 34 | 35 | 36 | - ### 3. Cách thức hoạt động của Masakari 37 | - Cách thức hoạt động của các thành phần được sử dụng trong Masakari có thể được minh họa như hình ảnh dưới đây: 38 | 39 | ![masakari-workflow](../images/masakari-workflow.png) 40 | 41 | - Nhìn vào hình trên, ta có thể thấy được như sau: 42 | - Masakari hoạt động thực sự khi và chỉ khi có failed events xảy ra trên các nova-compute host. Lúc này, sẽ có một notification được gửi đến masakari-api bao gồm các thông tin liên quan đến failed events bởi masakari-monitors. 43 | - Khi masakari-api nhận được notifications, nó sẽ thực hiện đọc nội dung chứa trong payload của notifications để insert vào database và thực hiện gọi gửi notifications tới masakari-engine thông qua message queue để có các hành động xử lý tương ứng với các loại notifications. 44 | - Masakari-engine thực hiện gọi tới endpoin của nova để thực hiện các hành động xử lý. 45 | ____ 46 | 47 | # Các nội dung khác 48 | -------------------------------------------------------------------------------- /Masakari/images/masakari-workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/Masakari/images/masakari-workflow.png -------------------------------------------------------------------------------- /OpenStack-Mitaka/README.md: -------------------------------------------------------------------------------- 1 | ## GHI CHÉP VỀ OPENSTACK MITAKA -------------------------------------------------------------------------------- /OpenStack-Ocata/README.md: -------------------------------------------------------------------------------- 1 | ## GHI CHÉP VỀ OPENSTACK OCATA 2 | 3 | ### Cài đặt 4 | - [1. Setup Openstack Ocata](./docs/install.md) 5 | - [2. Cài đặt nâng cao NFS server storage cho glance và nova](./docs/nfs_install.md) 6 | - [3. Cài đặt Swift](./docs/swift_install.md) 7 | --- 8 | 9 | - [Thực hiện tạo máy ảo với Dashboard](./docs/Tao_may_ao_voi_dashboard.md) 10 | 11 | --- 12 | 13 | - Tài liệu tổng hợp dưới đây được thực hiện dựa trên môi trường đã được cài đặt theo hướng dẫn trên. 14 | 15 | ## Keystone 16 | ### Ghi chép Keystone 17 | - [Tổng quan về keystone](./docs/keystone_overview.md) 18 | - [Giải thích file cấu hình cơ bản](./docs/keystone_file_conf.md) 19 | - [Các lệnh cơ bản về keystone](./docs/keystone_cac_lenh_hay_dung.md) 20 | - Giải thích về token trong keystone 21 | - Hướng dẫn cấu hình keystone với LDAP 22 | - Domain trong keystone 23 | - Mutli region trong keystone 24 | 25 | ### LAB với Keystone 26 | - [1. Lab keystone cơ bản](./docs/Keystone_lab_co_ban.md) 27 | - [2. Chuyển từ fernet-token sang UUID token](./docs/keysotne_Chuyen_Tu_Fernet_Sang_UUID.md) 28 | - [3. Định nghĩa một role](./docs/keystone_difine_role.md) 29 | - [4. Thiết lập thời gian tồn tại của token](./docs/keystone_set_time_token.md) 30 | 31 | 32 | ## Glance 33 | ### Ghi chép về Glance 34 | - [Tổng quan về glance](./docs/glance_overview.md) 35 | - [Giải thích file cấu hình cơ bản](./docs/glance_file_conf.md) 36 | - [Các lệnh cơ bản trong Glance](./docs/glance_cac_lenh_co_ban.md) 37 | 38 | ### LAB với Glance 39 | - [1. Lab cơ bản](./docs/glance_lab_co_ban.md) 40 | - [2. Thiết lập multiple store locations for glance images](./docs/glance_multi_location_storage.md) 41 | - [3. Một số thao tác với lệnh cURL](./docs/glance_curl.md) 42 | - [4. Guide định nghĩa role trong glance](./docs/glance_difine_role.md) 43 | 44 | ## Nova 45 | ### Ghi chép Nova 46 | - [Tổng quan về nova](./docs/nova_overview.md) 47 | - [Giải thích file cấu hình cơ bản](./docs/nova_file_conf.md) 48 | - [Các lệnh cơ bản trong Nova](./docs/nova_lenh_co_ban.md) 49 | 50 | ### LAB với Nova 51 | - [Lab cơ bản](./docs/nova_lab_co_ban.md) 52 | 53 | 54 | ## Neutron 55 | ### Ghi chép về Neutron 56 | - Tổng quan về neutron 57 | - Giải thích file cấu hình cơ bản 58 | - Các lệnh cơ bản trong Neutron 59 | 60 | ### LAB với neutron 61 | - Lab cơ bản 62 | 63 | 64 | ## Cinder 65 | ### Ghi chép về Cinder 66 | - [Tổng quan về cinder](./docs/cinder_overview.md) 67 | - [Giải thích file cấu hình cơ bản](./docs/cinder_file_conf.md) 68 | - [Các lệnh cơ bản trong Cinder](./docs/cinder_cac_lenh_co_ban.md) 69 | 70 | ### LAB với Cinder 71 | - [Lab cơ bản](./docs/cinder_lab_co_ban.md) 72 | - [So sánh launch từ image và từ volume](./docs/Launch.md) 73 | 74 | ## Swift 75 | ### Ghi chép về Swift 76 | - [Tổng quan về Swift](./docs/swift_overview.md) 77 | - [Giải thích file cấu hình cơ bản của Swift](./docs/swift_file_config.md) 78 | - [Các lệnh cơ bản](./docs/swift_cac_lenh_co_ban.md) 79 | 80 | ### LAB với Swift 81 | - [Lab cơ bản](./docs/swift_lab_co_ban.md) 82 | 83 | -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/cinder_cac_lenh_co_ban.md: -------------------------------------------------------------------------------- 1 | # Các lệnh cơ bản với cinder 2 | 3 | ## 1. Tạo, xóa, liệt kê, show volume 4 | - Tạo một volume no-source 5 | 6 | ```sh 7 | openstack volume create --size 8 | ``` 9 | 10 | - dung lượng volume tính theo đơn vị GB 11 | 12 | - Tạo một volume từ image 13 | 14 | ```sh 15 | openstack volume create --size --image 16 | ``` 17 | 18 | - Tạo một volume từ volume khác 19 | 20 | ```sh 21 | openstack volume create --source --size 22 | ``` 23 | 24 | - Tạo một volume từ một bản snapshot 25 | 26 | ```sh 27 | openstack volume create --snapshot --size 28 | ``` 29 | 30 | - Xóa volume 31 | 32 | ```sh 33 | openstack volume delete 34 | ``` 35 | 36 | - Liệt kê các volume 37 | 38 | ```sh 39 | openstack volume list 40 | ``` 41 | 42 | - show volume 43 | 44 | ```sh 45 | openstack volume show 46 | ``` 47 | 48 | ## 2. Snapshot volume 49 | - Tạo snapshot 50 | 51 | ```sh 52 | openstack volume snapshot create --volume 53 | ``` 54 | 55 | - List ra danh sách các snapshot của volume 56 | 57 | ```sh 58 | openstack volume snapshot list 59 | ``` 60 | 61 | - Xóa snapshot 62 | 63 | ```sh 64 | openstack volume snapshot delete 65 | ``` 66 | 67 | ## 3. Attach và detach volume cho máy ảo 68 | - Attach volume 69 | 70 | ```sh 71 | openstack server add volume --device 72 | ``` 73 | 74 | ví dụ: 75 | 76 | ```sh 77 | openstack server add volume vm69 volume-empty2 --device /dev/vdb 78 | ``` 79 | 80 | - Detach volume 81 | 82 | ```sh 83 | openstack server remove volume 84 | ``` -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/cinder_file_conf.md: -------------------------------------------------------------------------------- 1 | # File cấu hình của cinder 2 | 3 | ## File cấu hình của cinder trên node controller 4 | - file cấu hình của cinder `/etc/cinder/cinder.conf` 5 | 6 | ```sh 7 | [DEFAULT] 8 | rootwrap_config = /etc/cinder/rootwrap.conf 9 | api_paste_confg = /etc/cinder/api-paste.ini 10 | iscsi_helper = tgtadm 11 | volume_name_template = volume-%s 12 | volume_group = cinder-volumes 13 | verbose = True 14 | auth_strategy = keystone 15 | state_path = /var/lib/cinder 16 | lock_path = /var/lock/cinder 17 | volumes_dir = /var/lib/cinder/volumes 18 | transport_url = rabbit://openstack:Welcome123@controller 19 | my_ip = 10.10.10.190 20 | 21 | [database] 22 | connection = mysql+pymysql://cinder:Welcome123@controller/cinder 23 | 24 | [keystone_authtoken] 25 | auth_uri = http://controller:5000 26 | auth_url = http://controller:35357 27 | memcached_servers = controller:11211 28 | auth_type = password 29 | project_domain_name = default 30 | user_domain_name = default 31 | project_name = service 32 | username = cinder 33 | password = Welcome123 34 | 35 | [oslo_concurrency] 36 | lock_path = /var/lib/cinder/tmp 37 | ``` 38 | 39 | - Giải thích file cấu hình 40 | - Trong [database] section, cấu hình truy cập database: 41 | 42 | ```sh 43 | [database] 44 | # ... 45 | connection = mysql+pymysql://cinder:Welcome123@controller/cinder 46 | ``` 47 | 48 | - Welcome123 là mật khẩu của user `cinder` để truy cập vào database `cinder` 49 | 50 | - Trong [DEFAULT] section, cấu hình truy cập RabbitMQ 51 | 52 | ```sh 53 | [DEFAULT] 54 | # ... 55 | transport_url = rabbit://openstack:Welcome123@controller 56 | ``` 57 | 58 | - Trong [DEFAULT] và [keystone_authtoken] sections, cấu hình truy cập dịch vụ Identity: 59 | 60 | ```sh 61 | [DEFAULT] 62 | # ... 63 | auth_strategy = keystone 64 | 65 | [keystone_authtoken] 66 | # ... 67 | auth_uri = http://controller:5000 68 | auth_url = http://controller:35357 69 | memcached_servers = controller:11211 70 | auth_type = password 71 | project_domain_name = default 72 | user_domain_name = default 73 | project_name = service 74 | username = cinder 75 | password = Welcome123 76 | ``` 77 | 78 | - auth_strategy = keystone : Cấu hình sử dụng keystone để xác thực. 79 | - auth_uri = http://controller:5000 : Cấu hình enpoint Identity service 80 | - auth_url = http://controller:35357 : URL để xác thực Identity service 81 | - memcached_servers = controller:11211 : Địa chỉ Memcache-server 82 | - auth_type = password : Hình thức xác thực sử dụng password 83 | - project_domain_name = default : Chỉ định project domain name openstack 84 | - user_domain_name = default : Chỉ định user domain name openstack 85 | - project_name = service : Chỉ định project name openstack 86 | - username = cinder : Chỉ định username của cinder 87 | - password = Welcome123 : Chỉ đinh pass của nova 88 | 89 | - Trong [DEFAULT] section, cấu hình my_ip option để sử dụng địa chỉ management interface IP của node controller: 90 | 91 | ```sh 92 | [DEFAULT] 93 | # ... 94 | my_ip = 10.10.10.190 95 | ``` 96 | 97 | - Trong [oslo_concurrency] section, cấu hình lock path: 98 | 99 | ```sh 100 | [oslo_concurrency] 101 | # ... 102 | lock_path = /var/lib/cinder/tmp 103 | ``` 104 | 105 | ## File cấu hình của cinder trên node cinder 106 | - file cấu hình của cinder `/etc/cinder/cinder.conf` 107 | 108 | ```sh 109 | [DEFAULT] 110 | rootwrap_config = /etc/cinder/rootwrap.conf 111 | api_paste_confg = /etc/cinder/api-paste.ini 112 | iscsi_helper = tgtadm 113 | volume_name_template = volume-%s 114 | volume_group = cinder-volumes 115 | verbose = True 116 | auth_strategy = keystone 117 | state_path = /var/lib/cinder 118 | lock_path = /var/lock/cinder 119 | volumes_dir = /var/lib/cinder/volumes 120 | 121 | transport_url = rabbit://openstack:Welcome123@controller 122 | my_ip = 10.10.10.192 123 | enabled_backends = lvm 124 | glance_api_servers = http://controller:9292 125 | 126 | [database] 127 | # ... 128 | connection = mysql+pymysql://cinder:Welcome123@controller/cinder 129 | 130 | [keystone_authtoken] 131 | # ... 132 | auth_uri = http://controller:5000 133 | auth_url = http://controller:35357 134 | memcached_servers = controller:11211 135 | auth_type = password 136 | project_domain_name = default 137 | user_domain_name = default 138 | project_name = service 139 | username = cinder 140 | password = Welcome123 141 | 142 | [lvm] 143 | # ... 144 | volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver 145 | volume_group = cinder-volumes 146 | iscsi_protocol = iscsi 147 | iscsi_helper = tgtadm 148 | 149 | [oslo_concurrency] 150 | # ... 151 | lock_path = /var/lib/cinder/tmp 152 | ``` 153 | -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/cinder_overview.md: -------------------------------------------------------------------------------- 1 | # Tổng quan về project Cinder 2 | 3 | ## 1. Giới thiệu về Cinder 4 | - Cinder cung cấp volume cho các VM. 5 | - Các volume sẽ không bị xóa khi xóa bỏ VM, do đó data của người dùng sẽ được lưu lại cùng với volume đó. 6 | - Phục vụ mục đích lưu trữ dữ liệu lâu dài. 7 | 8 | ## 2. Các thành phần của cinder 9 | 10 | ![](../images/cinder.png) 11 | 12 | - cinder-api: cung cấp các HTTP endpoint cho các API requests. 13 | - cinder-scheduler: dịch vụ đọc các requests từ message quêu và chọn node storage phù hợp để tạo và cung cấp volume. 14 | - cinder-volume: dịch vụ làm việc cùng với một storage back end thông qua các drivers. dịch vụ thực hiện tạo các volume. 15 | - cinder-backup: dịch vụ backup làm việc cùng với backup back end thông qua kiến trúc driver. 16 | -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/glance_cac_lenh_co_ban.md: -------------------------------------------------------------------------------- 1 | # Các lệnh cơ bản thường dùng trong Glance 2 | 3 | - 1. Liệt kê các image trong hệ thống 4 | 5 | ```sh 6 | openstack image list 7 | ``` 8 | 9 | - 2. show thông tin chi tiết về một image 10 | 11 | ```sh 12 | openstack image show 13 | ``` 14 | 15 | - 3. Xóa image 16 | 17 | ```sh 18 | openstack image delete 19 | ``` 20 | 21 | - 4. Upload một image lên glance 22 | 23 | ```sh 24 | openstack image create "" \ 25 | --file \ 26 | --disk-format qcow2 --container-format bare \ 27 | --public 28 | ``` -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/glance_difine_role.md: -------------------------------------------------------------------------------- 1 | # Định nghĩa một số role cơ bản trong glance 2 | 3 | - Một số công việc cơ bản trong glance như thêm, sửa, xóa, liệt kê image. User có được thực hiện các việc đó hay không sẽ do role quyết định. Các dòng cấu hình trong file `/etc/glance/policy.json` để thực hiện những việc đó là: 4 | - **add_image**: Tạo một image. 5 | - **delete_image**: xóa iamge. 6 | - **get_image**: show thông tin chi tiết của một image cụ thể. 7 | - **get_images**: Liệt kê tất cả các image 8 | - **modify_image**: Update image 9 | - **publicize_image**: Tạo hoặc Update public image 10 | - **communitize_image**: Tạo hoặc update communitize images 11 | 12 | - Như vậy, để định nghĩa một role được phép làm gì đó thì ta chỉ cần thêm role vào trong dòng cấu hình cho phép làm điều đó. 13 | - Ví dụ: tạo một số role như sau: 14 | ```sh 15 | "add_image": "role:upload", 16 | "delete_image": "role:delete", 17 | "get_image": "role:list", 18 | "get_images": "role:lists", 19 | "modify_image": "role:edit", 20 | "publicize_image": "role:upload_public", 21 | "communitize_image": "role:upload_comm", 22 | ``` 23 | 24 | - upload: có khả năng tạo một image, 25 | - delete: có khả năng delete một image 26 | - list: có khả năng show ra một image với id cụ thể 27 | - lists: liệt kê ra tất cả các image 28 | - edit: có khả năng sửa một số thuộc tính của image 29 | - upload_public: có khả năng tạo một image với visibility là public 30 | - upload_comm: có khả năng tạo một image với visibility là communiti 31 | - Sau khi khai báo như trên, chúng ta tạo ra các user và gán các role tương ứng để kiểm tra. 32 | - Nếu một user muốn có nhiều hơn 1 quyền với image, chúng ta có thể add thêm role cho user hoặc định nghĩa một role khác dành riêng cho user. Sau đó thêm rule đó vào các quyền mà chúng ta muốn cho phép. Ví dụ: 33 | - muốn cho phép một user có hai quyền là liệt kê tất cả các image và xóa một image, ta định nghĩa một role là `role_user1` cho user là user1 như sau: 34 | ```sh 35 | "get_images": "role:role_user1", 36 | "delete_image": "role:role_user1", 37 | ``` 38 | 39 | 1. tạo project 40 | ```sh 41 | root@controller:~# openstack project create --domain default --description "Labs role image" project1 42 | +-------------+----------------------------------+ 43 | | Field | Value | 44 | +-------------+----------------------------------+ 45 | | description | Labs role image | 46 | | domain_id | default | 47 | | enabled | True | 48 | | id | 3205755f8b6d493aa202cea775fd48b2 | 49 | | is_domain | False | 50 | | name | project1 | 51 | | parent_id | default | 52 | +-------------+----------------------------------+ 53 | ``` 54 | 55 | 2. tạo các user 56 | ```sh 57 | root@controller:~# openstack user create --project project1 --domain default --password 123 --description "User1 duoc up image" user1 58 | +---------------------+----------------------------------+ 59 | | Field | Value | 60 | +---------------------+----------------------------------+ 61 | | default_project_id | 3205755f8b6d493aa202cea775fd48b2 | 62 | | description | User1 duoc up image | 63 | | domain_id | default | 64 | | enabled | True | 65 | | id | 0ee8b90e6da14902be1788cfde1ecbd2 | 66 | | name | user1 | 67 | | options | {} | 68 | | password_expires_at | None | 69 | +---------------------+----------------------------------+ 70 | ``` 71 | 72 | 3. tạo role 73 | ```sh 74 | root@controller:~# openstack role create upload 75 | +-----------+----------------------------------+ 76 | | Field | Value | 77 | +-----------+----------------------------------+ 78 | | domain_id | None | 79 | | id | 8f6cb1ad27b446faae22fefef5182f01 | 80 | | name | upload | 81 | +-----------+----------------------------------+ 82 | ``` 83 | 84 | 4. Gán role cho user 85 | ```sh 86 | openstack role add --project project1 --user user1 upload 87 | ``` 88 | 89 | 5. Định nghĩa role upload được upload 1 image public 90 | - Tìm dòng `"publicize_image": "role:admin",` và thêm role `upload` vào như sau: 91 | ```sh 92 | "publicize_image": "role:admin or role:upload", 93 | ``` 94 | 95 | 6. Kiểm tra lại 96 | - Khai báo biến môi trường cho xác thực user1 97 | 98 | ```sh 99 | export OS_PROJECT_DOMAIN_NAME=Default 100 | export OS_USER_DOMAIN_NAME=Default 101 | export OS_PROJECT_NAME=project1 102 | export OS_USERNAME=user1 103 | export OS_PASSWORD=123 104 | export OS_AUTH_URL=http://controller:35357/v3 105 | export OS_IDENTITY_API_VERSION=3 106 | export OS_IMAGE_API_VERSION=2 107 | ``` 108 | 109 | - Thực hiện lệnh tạo một public image để kiểm tra 110 | ```sh 111 | openstack image create "cirros" \ 112 | --file cirros-0.3.5-x86_64-disk.img \ 113 | --disk-format qcow2 --container-format bare \ 114 | --public 115 | ``` 116 | --- 117 | Trên đây là ghi chép của mình về cách định nghĩa role cơ bản. Tài liệu về policy của image được liệt kê đầy đủ ở docs của openstack, link: https://docs.openstack.org/admin-guide/image-policies.html -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/glance_file_conf.md: -------------------------------------------------------------------------------- 1 | # Giải thích các file cấu hình của Glance 2 | - Glance có 2 file cấu hình: 3 | - File cấu hình cho glance API, đường dẫn của file: `/etc/glance/glance-api.conf` 4 | - File cấu hình cho glance Registry, đường dẫn của file: `/etc/glance/glance-registry.conf` 5 | 6 | ## 1. File cấu hình cơ bản của glance API. 7 | - Glance-api: Chấp nhận các lời gọi đến API để phát hiện, truy xuất và lưu trữ image. 8 | 9 | --- 10 | 11 | ### File cấu hình 12 | 13 | ```sh 14 | [database] 15 | connection = mysql+pymysql://glance:Welcome123@controller/glance 16 | backend = sqlalchemy 17 | 18 | 19 | [glance_store] 20 | stores = file,http 21 | default_store = file 22 | filesystem_store_datadir = /var/lib/glance/images/ 23 | 24 | 25 | [image_format] 26 | disk_formats = ami,ari,aki,vhd,vhdx,vmdk,raw,qcow2,vdi,iso,ploop.root-tar 27 | 28 | 29 | [keystone_authtoken] 30 | auth_uri = http://controller:5000 31 | auth_url = http://controller:35357 32 | memcached_servers = controller:11211 33 | auth_type = password 34 | project_domain_name = default 35 | user_domain_name = default 36 | project_name = service 37 | username = glance 38 | password = Welcome123 39 | 40 | 41 | [paste_deploy] 42 | flavor = keystone 43 | 44 | ``` 45 | 46 | ### Giải thích file cấu hình. 47 | - Cấu hình truy cập và sử dụng database 48 | 49 | ```sh 50 | [database] 51 | # 52 | connection = mysql+pymysql://glance:Welcome123@controller/glance 53 | backend = sqlalchemy 54 | ``` 55 | 56 | - connection = mysql+pymysql://glance:Welcome123@controller/glance : cung cấp thông tin truy cập đến database glance, username: `glance` password: `Welcome123` 57 | - backend = sqlalchemy: Khai báo back end để sử dụng cho database. 58 | 59 | - Khai báo lưu trữ images 60 | 61 | ```sh 62 | [glance_store] 63 | stores = file,http 64 | default_store = file 65 | filesystem_store_datadir = /var/lib/glance/images/ 66 | ``` 67 | 68 | - Khai báo các loại định dạng image mà glance hỗ trợ. 69 | 70 | ```sh 71 | [image_format] 72 | disk_formats = ami,ari,aki,vhd,vhdx,vmdk,raw,qcow2,vdi,iso,ploop.root-tar 73 | ``` 74 | - Khai báo xác thực Keystone 75 | 76 | ```sh 77 | [keystone_authtoken] 78 | # ... 79 | auth_uri = http://controller:5000 80 | auth_url = http://controller:35357 81 | memcached_servers = controller:11211 82 | auth_type = password 83 | project_domain_name = default 84 | user_domain_name = default 85 | project_name = service 86 | username = glance 87 | password = Welcome123 88 | 89 | ``` 90 | 91 | - auth_uri = http://controller:5000 : Cấu hình enpoint Identity service 92 | - auth_url = http://controller:35357 : URL để xác thực Identity service 93 | - memcached_servers = controller:11211 : Địa chỉ Memcache-server 94 | - auth_type = password : Hình thức xác thực sử dụng password 95 | - project_domain_name = default : Chỉ định project domain name openstack 96 | - user_domain_name = default : Chỉ định user domain name openstack 97 | - project_name = service : Chỉ định project name openstack 98 | - username = glance : Chỉ định username của nova 99 | - password = Welcome123 : Chỉ đinh pass của nova 100 | 101 | - Khai báo triển khai flavor để sử dụng trong ứng dụng pipeline trên server 102 | 103 | ```sh 104 | [paste_deploy] 105 | # ... 106 | flavor = keystone 107 | ``` 108 | 109 | ## 2. File cấu hình cấu hình cơ bản của glance-registry 110 | - Glane-registry: lưu trữ, xử lý, và lấy thông tin cho image. 111 | 112 | --- 113 | 114 | ### File cấu hình glance-registry ở trong đường dẫn `/etc/glance/glance-registry.conf` 115 | 116 | ```sh 117 | [database] 118 | connection = mysql+pymysql://glance:Welcome123@controller/glance 119 | backend = sqlalchemy 120 | 121 | [keystone_authtoken] 122 | auth_uri = http://controller:5000 123 | auth_url = http://controller:35357 124 | memcached_servers = controller:11211 125 | auth_type = password 126 | project_domain_name = default 127 | user_domain_name = default 128 | project_name = service 129 | username = glance 130 | password = Welcome123 131 | 132 | [paste_deploy] 133 | flavor = keystone 134 | ``` 135 | 136 | - Các thông tin khai báo trong file cấu hình cấu hình của glance-registry giống với glance-api. 137 | 138 | 139 | 140 | 141 | -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/glance_multi_location_storage.md: -------------------------------------------------------------------------------- 1 | # Lab thực hiện thiết lập cho phép lưu Image ở nhiều nơi 2 | 3 | #### 1. Trước tiên cần tạo thư mục để lưu Images 4 | - tạo thư mục images-1 và images-2 trong thư mục `/home/` 5 | ```sh 6 | mkdir /home/images-1 7 | mkdir /home/images-2 8 | ``` 9 | #### 2. Chuyển hai thư mục này vào group `glance` và user `glance`. 10 | 11 | ```sh 12 | chown glance:glance /home/images-1 13 | chown glance:glance /home/images-2 14 | ``` 15 | 16 | #### 3. Bước tiếp theo là cấu hình sử dụng multiple store location 17 | - Để có thể sử dụng multiple store location (lưu trữ image ở nhiều nơi), chúng ta cấu hình trong file `/etc/glance/glance-api.conf` 18 | - Trong section `[glance_store]`, chúng ta tìm kiếm tùy chọn cấu hình `filesystem_store_datadir` và cho giá trị trống. Nếu như comment dòng này, thì glance sẽ sử dụng nó như là vị trí lưu trữ mặc định và sẽ báo lỗi trong quá trình tạo image. 19 | - Thêm các tùy chọn `filesystem_store_datadirs`. Giá trị của tùy chọn này sẽ là đường dẫn tới các thư mục dùng để lưu trữ image 20 | - Chúng ta cũng cần chỉ rõ độ ưu tiên của thư mục dùng để lưu trữ images. Thư mục nào có độ ưu tiên cao hơn sẽ được ưu tiên lưu trữ trước. Nếu chúng ta không chỉ rõ độ ưu cho thư mục thì mặc định thư mục có độ ưu tiên là 0. 21 | - Nội dung trong section [glance_store] như sau (chỉ thêm những dòng cấu hình này, các dòng cấu hình khác giữ nguyên): 22 | ```sh 23 | [glance_store] 24 | filesystem_store_datadir= 25 | filesystem_store_datadirs=/var/lib/glance/images 26 | filesystem_store_datadirs=/home/images-1:200 27 | filesystem_store_datadirs=/home/images-2:100 28 | ``` 29 | - Sau đó khởi động lại dịch vụ glance-api 30 | ```sh 31 | service glance-api restart 32 | ``` 33 | - Theo như cấu hình trên thì thư mục `/home/images-1` sẽ có độ ưu tiên cao nhất, nên khi upload image lên glance thì image sẽ được lưu vào thư mục này. Chúng ta sẽ kiểm tra lại xem có đúng như vậy không. 34 | 35 | #### 4. Kiểm tra lại cấu hình 36 | - Upload image lên glance. Chúng ta sẽ tải file img từ internet về. 37 | ```sh 38 | wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img 39 | ``` 40 | 41 | - upload image vừa tải về lên glance 42 | ```sh 43 | openstack image create "cirros-multiple-store-location" \ 44 | --file cirros-0.3.5-x86_64-disk.img \ 45 | --disk-format qcow2 --container-format bare \ 46 | --public 47 | ``` 48 | - upload thành công 49 | ```sh 50 | +------------------+------------------------------------------------------+ 51 | | Field | Value | 52 | +------------------+------------------------------------------------------+ 53 | | checksum | f8ab98ff5e73ebab884d80c9dc9c7290 | 54 | | container_format | bare | 55 | | created_at | 2017-05-14T08:35:48Z | 56 | | disk_format | qcow2 | 57 | | file | /v2/images/88b19636-37ce-4c06-9025-1972a856dcbc/file | 58 | | id | 88b19636-37ce-4c06-9025-1972a856dcbc | 59 | | min_disk | 0 | 60 | | min_ram | 0 | 61 | | name | cirros-multiple-store-location | 62 | | owner | 1667a274e14647ec8f2c0dd593e661de | 63 | | protected | False | 64 | | schema | /v2/schemas/image | 65 | | size | 13267968 | 66 | | status | active | 67 | | tags | | 68 | | updated_at | 2017-05-14T08:35:53Z | 69 | | virtual_size | None | 70 | | visibility | public | 71 | +------------------+------------------------------------------------------+ 72 | ``` 73 | - Kiểm tra vị trí lưu image. 74 | - đăng nhập vào database và nhập lệnh sau để kiểm tra `select * from glance.image_locations\G` 75 | ```sh 76 | MariaDB [(none)]> select * from glance.image_locations\G 77 | *************************** 1. row *************************** 78 | id: 1 79 | image_id: c051e5d4-89d2-4a3f-973e-eb307a9b551d 80 | value: file:///var/lib/glance/images/c051e5d4-89d2-4a3f-973e-eb307a9b551d 81 | created_at: 2017-04-19 08:38:30 82 | updated_at: 2017-05-14 02:25:29 83 | deleted_at: 2017-05-14 02:25:29 84 | deleted: 1 85 | meta_data: {} 86 | status: deleted 87 | *************************** 2. row *************************** 88 | id: 2 89 | image_id: 615af8b9-9c04-4f0a-94d7-e1ed4516e247 90 | value: file:///var/lib/glance/images/615af8b9-9c04-4f0a-94d7-e1ed4516e247 91 | created_at: 2017-05-14 02:50:09 92 | updated_at: 2017-05-14 02:50:09 93 | deleted_at: NULL 94 | deleted: 0 95 | meta_data: {} 96 | status: active 97 | *************************** 3. row *************************** 98 | id: 3 99 | image_id: 88b19636-37ce-4c06-9025-1972a856dcbc 100 | value: file:///home/images-1/88b19636-37ce-4c06-9025-1972a856dcbc 101 | created_at: 2017-05-14 08:35:53 102 | updated_at: 2017-05-14 08:35:53 103 | deleted_at: NULL 104 | deleted: 0 105 | meta_data: {} 106 | status: active 107 | 3 rows in set (0.04 sec) 108 | ``` 109 | - Sử dụng `openstack image list` 110 | ```sh 111 | root@controller:~# openstack image list 112 | +--------------------------------------+--------------------------------+--------+ 113 | | ID | Name | Status | 114 | +--------------------------------------+--------------------------------+--------+ 115 | | 88b19636-37ce-4c06-9025-1972a856dcbc | cirros-multiple-store-location | active | 116 | | 615af8b9-9c04-4f0a-94d7-e1ed4516e247 | cirros-test-upload-image | active | 117 | +--------------------------------------+--------------------------------+--------+ 118 | ``` 119 | 120 | - Ta thấy rằng image có Id `88b19636-37ce-4c06-9025-1972a856dcbc` là image mà chúng ta vừa tạo sau khi cấu hình multiple store location. Thông tin chúng ta có được trong database chỉ rõ vị trí lưu của image này là ở thư mục `/home/images-1`. Như vậy là đúng với lý thuyết mà mình đã nêu ở trên 121 | 122 | --- 123 | 124 | Trên đây là ghi chép lại của mình về thiết lập multiple store location for image. Các bạn có thể tham khảo [tại đây](http://egonzalez.org/multiple-store-locations-for-glance-images/) 125 | -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/glance_overview.md: -------------------------------------------------------------------------------- 1 | # Tổng quan về Glance 2 | 3 | ## Mục lục 4 | - [1. Glance là gì?](#1) 5 | - [2. Glance Components](#2) 6 | - [3. Glance Architecture](#3) 7 | - [4. Glance Formats](#4) 8 | - [5. Glane Status Flow](#5) 9 | - [6. Glance Configuration Files](#6) 10 | 11 | 12 | ### 1. Glance là gì? 13 | - Openstack glance là một dịch vụ image mà cung cấp các chức năng: discovering, registering, retrieving for disk and server images. 14 | - VM image được tạo sẵn, thông qua glance có thể được lưu trữ trong nhiều vị trí khác nhau từ các hệ thống tệp tin đơn giản đến các hệ thống lưu trữ đối tượng như là OpenStack Swift project. 15 | - Trong glance, các image được lưu trữ như các mẫu mà có thể được sử dụng để tạo các máy ảo mới. 16 | - Glance được thiết kế trở thành một dịch vụ độc lập cho những người cần tổ chức các bộ virtual disk images lớn. 17 | - Nó cũng có thể snapshots từ các máy ảo đang chạy để sao lưu trạng thái của VM. 18 | 19 | 20 | ### 2. Glance Components 21 | - Glane có các thành phần sau : 22 | - Glane-api : Chấp nhận các lời gọi đến API để phát hiện, truy xuất và lưu trữ image. 23 | - Glane-registry: lưu trữ, xử lý, và lấy thông tin cho image. 24 | - database : Là nơi lưu trữ metadata của image. 25 | - storage repository : Tích hợp các thành phần bên ngoài OpenStack khác nhau như hệ thống tập tin thông thường, Amazon S3 và HTTP để lưu trữ image. 26 | 27 | ![](../images/glane_component.png) 28 | 29 | 30 | ### Glance Architecture 31 | - Glance có cấu trúc theo mô hình client-server và cung cấp RESTful API mà thông qua đó các yêu cầu được gửi đến server để thực hiện. Yêu cầu từ các client được chấp nhận thông qua RESTful API và chờ keystone xác thực. 32 | - Glance Domain controller thực hiện quản lý tất cả các hoạt động bên trong. Các hoạt động được chia ra thành các tầng khác nhau. Mỗi tầng thực hiện một chức năng riêng biệt. 33 | - Glane store là lớp giao tiếp giữa glane và storage back end ở ngoài glane hoặc local filesystem và nó cung cấp giao diện thống nhất để truy cập. Glane sử dụng SQL central Database để truy cập cho tất cả các thành phần trong hệ thống. 34 | - Glance bao gồm một vài thành phần sau: 35 | - **Client**: Bất kỳ ứng dụng nào sử dụng Glance server đều được gọi là client. 36 | - **REST API**: dùng để gọi đến các chức năng của Glance thông qua REST. 37 | - **Database Abstraction Layer (DAL)**: một API để thống nhất giao tiếp giữa Glance và database. 38 | - **Glance Domain Controller**: là middleware thực hiện các chức năng chính của Glance là: authorization, notifications, policies, database connections. 39 | - **Glance Store**: tổ chức các tác động giữa Glance và lưu trữ dữ liệu khác. 40 | - **Registry Layer**: Tùy chọn tổ chức một lớp trao đổi thông tin an toàn giữa các miền và các DAL bằng cách sử dụng một dịch vụ riêng biệt. 41 | 42 | ![](../images/architectureglane.png) 43 | 44 | 45 | ### 4. Glance Formats 46 | - Khi upload một image lên glance, chúng ta phải chỉ rõ định dạng của Virtual machine images. 47 | - Glane hỗ trợ nhiều kiểu định dạng như Disk format và Contianer format. 48 | - Virtual disk tương tự như server’s boot driver vật lý, chỉ tập trung vào trong một tệp tin. Điều khác là Virtualation hỗ trợ nhiều định dạng disk khác nhau. 49 | 50 | 51 | ### 5. Glance Status Flow 52 | - Glane Status Flow cho chúng ta thấy tình trạng của Image trong khi chúng ta tải lên. Khi chúng ta khởi tại một image, bước đầu tiên là queuing. Image sẽ được sắp xếp vào một hàng đợi trong một thời gian ngắn để định danh (hàng đợi này dành cho image) và sẵn sàng được upload. Sau khi kết thúc thời gian queuing thì image sẽ được upload đến "Saving" , tuy nhiên ở đây không phải image nào cũng được tải lên hoàn toàn. Những Image nào được tải lên hoàn toàn sẽ trong trạng thái "Active". Khi upload không thành công nó sẽ đến trạng thái "killed" hoặc "deleted" . Chúng ta có thể tắt và tái kích hoạt một Image đang "Active" hoàn toàn bằng một lệnh. 53 | - Sơ đồ về Glance Status Flow 54 | 55 | ![](../images/statusflow.jpg) 56 | 57 | - Các trạng thái: 58 | - **queued**: Bộ nhận diện image đã được dành riêng cho một image trong registry Glance. Không có dữ liệu nào trong image được tải lên Glance và kích thước image không rõ ràng sẽ được đặt thành 0 khi tạo. 59 | - **saving**: Biểu thị rằng dữ liệu của image đang được upload lên glance. Khi một image đăng ký với một call đến POST/image và có một x-image-meta-location vị trí tiêu đề hiện tại, image đó sẽ không bao giờ được trong tình trạng saving (dữ liệu Image đã có sẵn ở vị trí khác). 60 | - **active**: Biểu thị một image đó là hoàn toàn có sẵn trong Glane. Điều này xảy ra khi các dữ liệu image được tải lên hoặc kích thước image được rõ ràng để thiết lập được tạo. 61 | - **deactivated**: Biểu thị rằng quyền truy cập vào Image không được phép truy cập từ bất kỳ ai cả admin-user. 62 | - **killed**: Biểu thị một lỗi xảy ra trong quá trình truyền tải dữ liệu của một image, và image là không thể đọc được. 63 | - **deleted**: Trong Glane đã giữ lại các thông tin về image, nhưng không còn có sẵn để sử dụng. Một image trong trạng thái này sẽ được gỡ bỏ tự động vào một ngày sau đó. 64 | 65 | 66 | ### 6. Glance Configuration Files 67 | - **Glance-api.conf**: File cấu hình cho API của dịch vụ image 68 | - **Glance-registry.conf**: Fiel cấu hình cho đăng ký image mà các lưu trữ metadata về các image. 69 | - **glance-scrubber.conf** : Sử dụng tiện ích này để xóa sạch các images mà đã bị xóa. 70 | - **policy.json**: Bổ sung truy cập kiểm soát áp dụng cho các image service. Trong này, chúng tra có thể xác định vai trò, chính sách, làm tăng tính bảo mật trong Glane OpenStack. 71 | -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/keystone_cac_lenh_hay_dung.md: -------------------------------------------------------------------------------- 1 | # Các lệnh cơ bản thường dùng trong Keystone 2 | 3 | ## 1. Lấy token 4 | - Khai báo thông tin về cridentials của người dùng 5 | 6 | ```sh 7 | export OS_PROJECT_DOMAIN_NAME=Default 8 | export OS_USER_DOMAIN_NAME=Default 9 | export OS_PROJECT_NAME=admin 10 | export OS_USERNAME=admin 11 | export OS_PASSWORD=Welcome123 12 | export OS_AUTH_URL=http://controller:35357/v3 13 | export OS_IDENTITY_API_VERSION=3 14 | export OS_IMAGE_API_VERSION=2 15 | ``` 16 | 17 | - cridential của user `admin` với mật khẩu là `Welcome123` 18 | 19 | - Lệnh để lấy token 20 | 21 | ```sh 22 | openstack token issue` 23 | ``` 24 | 25 | - ví dụ: 26 | 27 | ```sh 28 | root@controller:~# openstack token issue 29 | +------------+-------------------------------------------------------------------------------------------------------------------------------------+ 30 | | Field | Value | 31 | +------------+-------------------------------------------------------------------------------------------------------------------------------------+ 32 | | expires | 2017-04-28T04:19:17+0000 | 33 | | id | gAAAAABZArS1Qgi_MMYf6J4odgU-tU9eoBfD44Ob149egIzNrK_XpnovPkzh9xWp0wWiR4BDM-Vke76EFmk7dDoFtXIQtVksde- | 34 | | | 8uCJSgDJNIVAsgW_pLVR28qQ3DHIhSrcRXHGw8MLSdhMyPJjJrDYqKKhNh6iczBnLN4k9YoB3A52IZUrP9ug | 35 | | project_id | 1667a274e14647ec8f2c0dd593e661de | 36 | | user_id | 3ce3ca843dc7458bb61c851d3a654b8b | 37 | +------------+-------------------------------------------------------------------------------------------------------------------------------------+ 38 | ``` 39 | 40 | ## 2. Liệt kê các thông tin về users, projects, groups, roles, domains 41 | - 1. liệt kê tất cả users 42 | 43 | ```sh 44 | openstack user list 45 | ``` 46 | 47 | - 2. Liệt kê tất cả projects 48 | 49 | ```sh 50 | openstack project list 51 | ``` 52 | 53 | - 3. Liệt kê tất cả groups 54 | 55 | ```sh 56 | openstack group list 57 | ``` 58 | 59 | - 4. Liệt kê roles 60 | 61 | ```sh 62 | openstack role list 63 | ``` 64 | 65 | - 5. Liệt kê domains 66 | 67 | ```sh 68 | openstack domain list 69 | ``` 70 | 71 | ## 3. Tạo mới domain, project, user, role. 72 | - 1. Tạo domain mới. 73 | 74 | ```sh 75 | openstack domain create 76 | ``` 77 | 78 | - Tạo project trong domain 79 | 80 | ```sh 81 | openstack project create --domain --description "" 82 | ``` 83 | 84 | - Tạo user. User phải thuộc 1 domain, cần khai báo user thuộc domain nào 85 | 86 | ```sh 87 | openstack user create --domain --password 88 | ``` 89 | 90 | ## 4. Gán role cho user, kiểm tra user có role gì. 91 | - Gán role cho user 92 | 93 | ```sh 94 | openstack role add --project --project-domain --user --user-domain 95 | ``` 96 | 97 | - Kiểm tra user có role gì 98 | 99 | ```sh 100 | openstack role list --user --project 101 | ``` 102 | -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/keystone_file_conf.md: -------------------------------------------------------------------------------- 1 | # Ghi chép cấu hình Keystone 2 | 3 | ## Mục lục 4 | Giải thích một số dòng cấu hình cơ bản của keystone `/etc/keystone/keystone.conf` 5 | - [Section database](#1) 6 | - [Section fernet_tokens](#2) 7 | - [Section token](#3) 8 | - [Section cache](#4) 9 | 10 | 11 | ## Section [database] 12 | ```sh 13 | [database] 14 | # Đường dẫn đến server database sẽ được sử dụng cho keystone 15 | connection = mysql+pymysql://keystone:Welcome123@controller/keystone 16 | ``` 17 | 18 | 19 | 20 | ## Section [fernet_tokens] 21 | ```sh 22 | [fernet_tokens] 23 | # Thư mục chứa các fernet keys. Đây là thư mục mặc định để lưu các fernet keys. 24 | # Thư mục này phải tồn tại trước khi chạy lệnh`keystone-manage fernet_setup` cho lần đầu tiên 25 | # Và có thể đọc được bởi server của keystone 26 | # Các keys ở trong thư mục này sẽ thuộc 1 trong 3 loại keys: 27 | # - 1 staged key (chỉ số luôn là 0) được sử dụng để giải mã token 28 | # - 2 primary key (luôn có chỉ số cao nhất) được sử dụng để mã hóa và giải mã token 29 | # - các key còn lại là secondry key được sử dụng cho giải mã token 30 | key_repository = /etc/keystone/fernet-keys/ 31 | 32 | # Giới hạn số lượng fernet keys trong thư mục chứa của nó 33 | # Giá trị mặc định là 3 34 | # Chúng ta có thể gán giá trị theo mong muốn của mình 35 | # Giả sử gán giá trị bằng 4, thì trong thư mục chứa key (/etc/keystone/fernet-keys/) 36 | # sẽ có 4 key và luôn có một key với chỉ số là 0 và còn lại 3 key có chỉ số theo thứ tự tăng dần (ví dụ: 0 4 5 6) 37 | max_active_keys = 4 38 | 39 | ``` 40 | 41 | ## Section [token] 42 | ```sh 43 | # Khai báo provider dùng để kiểm soát các công việc thực hiện tạo, xác nhận, thu hồi token trong keystone 44 | # Keystone có hai provider là "uuid" và "fernet" 45 | # UUID token sẽ được lưu lại trong backend, để sử dụng uuid, cần chỉ rõ backend (ở trong tùy chọn `[token] driver`) 46 | # fernet token thì sẽ không được lưu lại như uuid, nhưng yêu cầu chạy lệnh keystone-manage fernet_setup` (cũng như lệnh `keystone-manage fernet_rotate`) để quản lý key 47 | # Nếu sử dụng uuid thì gán giá trị như sau 48 | # provider = uuid 49 | # dòng dưới đây dùng để khai báo sử dụng fernet 50 | provider = fernet 51 | 52 | # Lượng thời gian tồn tại của token, kể từ lúc token được tạo 53 | # Đơn vị tính bằng giây (s) 54 | # Ví dụ: chúng ta muốn token tồn tại trong vòng 5 phút thì số giây tương đương là 5*60 = 300 55 | # Như vậy chỉ cần gán giá trị tham số expiration = 300 56 | expiration = 300 57 | 58 | # Cho phép caching token, để thực hiện được caching token thì phải bật chức năng cache trong section [cache] 59 | caching = true 60 | 61 | # Thời gian cache của token 62 | cache_time = 63 | ``` 64 | 65 | 66 | ## Section [cahe] 67 | ```sh 68 | [cahe] 69 | 70 | # Cho phép toàn bộ hệ thống có thể bật chức năng cache 71 | enabled = true 72 | ``` 73 | 74 | --- 75 | #### Trên đây là một số thông tin cấu hình cơ bản trong `keystone.conf` -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/keystone_overview.md: -------------------------------------------------------------------------------- 1 | # Tổng quan về Keystone 2 | Các môi trường Cloud với mô hình Infrastructure-as-a-Service cung cấp cho người dùng truy cập đến các tài nguyên quan trọng như các máy ảo, lượng lớn lưu trữ và băng thông mạng. Một tính năng quan trọng của bất kỳ một môi trường cloud là cung cấp bảo mật, kiểm soát truy cập tới những tài nguyền có trên cloud. Trong môi trường Openstack, dịch vụ keystone có trách nhiệm đảm nhận việc bảo mật, kiểm soát truy cập tới tất cả các tài nguyên của cloud. Keystone là một thành phần không thể thiếu để bảo mật cho cloud. 3 | 4 | ## Các khái niệm trong keystone 5 | - 1. Project: 6 | - Trong những ngày đầu của Openstack, có một khái niệm là Tenants. Sau đó người ta sử dụng khái niệm Project để thay thế cho trực quan hơn. 7 | - Project là nhóm và cô lập lại các tài nguyên. 8 | - Keystone đăng ký các project và sẽ xác định ai nên được phép truy cập vào những project này và sử dụng tài nguyên của project thông qua role mà user được gán trên từng project. 9 | 10 | - 2. Domain 11 | - Domain là một tập hợp các user, group và project 12 | - Domain sẽ giới hạn khả năng hiện thị các project và user của các tổ chức. 13 | - Để openstack có thể hỗ trợ các tổ chức một các rõ ràng trong việc đặt tên, người ta đã sử dụng một khái niệm Domain. 14 | 15 | - 3. Region 16 | - Mỗi region đều triển khai hệ thống full OPS, bao gồm các API endpoint, network và các tài nguyên compute của chính nó. 17 | - Các Region khác nhau chia sẻ thiết lập chung dịch vụ Keystone và Horizon, để cung cấp khả năng truy cập điều khiển và giao diện web tương tác với hệ thống. 18 | - Khái niệm Region thì giống như là một nhóm các tài nguyên vật lý được gộp nhóm theo khu vực địa lý trong môi trường OPS. Nếu bạn có 2 trung tâm dữ liệu khác nhau, bạn nên đặt một khu vực và region A trong môi trường OPS và khu vực còn lại vào region B. 19 | - Khái niệm region ngày các trở nên hữu dụng nhanh chóng, đặc biệt là khi đi cùng với khái niệm cell và domain. Region được sử dung khi triển khai mô hình cloud lớn, trải dài ra trên nhiều trung tâm dữ liệu trên các vùng địa lý cách biệt khác nhau. 20 | 21 | - 4. User và User Group 22 | - User Group là nhóm các user 23 | - Chúng ta gọi user và user group là actor 24 | 25 | - 5. Roles 26 | - Chỉ ra vai trò của người dùng trong project hoặc trong domain,... 27 | - Mỗi user có thể có vai trò khác nhau đối với từng project. 28 | 29 | - 6. Assignment 30 | - Thể hiện sự kết nối giữa một actor(user và user group) với một actor(domain, project) và một role. 31 | - Role assignment được cấp phát và thu hồi, và có thể được kế thừa giữa các user và group trên project của domains. 32 | 33 | - 7. Target 34 | - Chính là project nào hoặc domain nào sẽ được gán Role cho user. 35 | 36 | - 8. Token 37 | - Keystone là dịch vụ có trách nhiệm tạo ra token này. 38 | - User sẽ nhận token này khi xác thực thành công bởi keystone. 39 | - Token nãy cũng được ủy quyền (nó đại diện cho user). Nó chứa sự ủy quyền của user có trên cloud. 40 | - Một token có cả 1 ID và 1 payload. ID của token là duy nhất trên mỗi cloud, và payload chứa data về user. 41 | 42 | - 9. Catalog 43 | - Chứa URLs và endpoints của các dịch vụ trong cloud. 44 | - Với catalog, người dùng và ứng dụng có thể biết ở đâu để gửi yêu cầu tạo máy ảo hoặc storage objects. 45 | - Dịch vụ catalog chia thành danh sách các endpoint, mỗi endpoint chi thành các admin URL, internal URL, public URL. 46 | -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/nfs_install.md: -------------------------------------------------------------------------------- 1 | # Hướng dẫn cài đặt NFS server cho Glance và Nova 2 | - Sau khi thực hiện cài đặt các thành phần cơ bản theo [hướng dẫn](./install.md), mình thực hiện cài thêm một node thực hiện chức năng storage tập trung cho glance và nova. 3 | 4 | ## Mô hình mạng của hệ thống 5 | 6 | ![](../images/nfs_server.png) 7 | 8 | - Chúng ta sẽ thực hiện cài đặt thêm node **NFS server** 9 | - NFS server có một số thông số như sau: 10 | - OS: Ubuntu server 16.04 - 64 bit 11 | - IP: 12 | - ens3: 10.10.10.193/24 13 | - ens4: 172.16.69.193/24 14 | - ens4: 10.10.20.193/24 15 | 16 | ## Thực hiện cài đặt 17 | 18 | ### I. Thực hiện cài đặt trên node NFS server. 19 | - 1. Chỉnh sửa file **/etc/hosts** có nội dung như sau: 20 | 21 | ```sh 22 | 127.0.0.1 localhost 23 | #127.0.1.1 ubuntu 24 | 25 | 10.10.10.190 controller 26 | 10.10.10.191 compute1 27 | 10.10.10.192 block1 28 | 10.10.10.193 nfs 29 | 30 | # The following lines are desirable for IPv6 capable hosts 31 | ::1 localhost ip6-localhost ip6-loopback 32 | ff02::1 ip6-allnodes 33 | ff02::2 ip6-allrouters 34 | ``` 35 | 36 | - 2. Chỉnh sửa hostname thành nfs. Dùng vi sửa file **/etc/hostname** có nội dung như sau: 37 | 38 | ```sh 39 | nfs 40 | ``` 41 | 42 | - 3. Cấu hình địa chỉ IP. Dùng vi sửa file **/etc/network/interfaces** 43 | 44 | ```sh 45 | auto ens3 46 | iface ens3 inet static 47 | address 10.10.10.193 48 | netmask 255.255.255.0 49 | 50 | auto ens4 51 | iface ens4 inet static 52 | address 172.16.69.193 53 | netmask 255.255.255.0 54 | gateway 172.16.69.1 55 | dns-nameservers 8.8.8.8 56 | 57 | auto ens5 58 | iface ens5 inet static 59 | address 10.10.20.193 60 | netmask 255.255.255.0 61 | ``` 62 | 63 | - 4. Cập nhật và cài đặt gói phần mềm. 64 | 65 | ```sh 66 | apt-get update 67 | apt-get install nfs-kernel-server -y 68 | ``` 69 | 70 | - 5. Tạo thư mục để lưu trữ cho glance và nova 71 | - Tạo thư mục lưu image cho glance 72 | 73 | ```sh 74 | mkdir /nfs/glance -p 75 | 76 | chmod 777 /nfs/glance 77 | ``` 78 | 79 | - Tạo thư mục lưu instance cho nova 80 | 81 | ```sh 82 | mkdir /nfs/nova/instances -p 83 | 84 | chmod 777 /nfs/nova/instances 85 | ``` 86 | 87 | - 6. Cấu hình NFS. Thêm 2 dòng cấu hình sau vào file **/etc/exports** 88 | 89 | ```sh 90 | /nfs/glance 10.10.10.0/24(rw,sync,no_root_squash,no_subtree_check) 91 | /nfs/nova/instances 10.10.10.0/24(rw,sync,no_root_squash,no_subtree_check) 92 | ``` 93 | 94 | - 7. Restart dịch vụ NFS 95 | 96 | ```sh 97 | service nfs-kernel-server restart 98 | ``` 99 | 100 | - 8. Reboot NFS server 101 | 102 | ```sh 103 | init 6 104 | ``` 105 | 106 | ### 2. Cài đặt trên node NFS cho glance 107 | - Cài đặt NFS cho glance, trên node controller đóng vai trò client trong mô hình lưu trữ NFS 108 | - Thực hiện cài đặt trên node controller cho glance 109 | - Đăng nhập vào node controller với quyền root 110 | 111 | - 1. Thêm dòng cấu hình sau vào file **/etc/hosts** 112 | 113 | ```sh 114 | 10.10.10.193 nfs 115 | ``` 116 | 117 | - 2. Cài đặt gói cho nfs 118 | 119 | ```sh 120 | apt-get update 121 | apt-get install nfs-common -y 122 | ``` 123 | 124 | - 3. Mount thư mục mà NFS server cung cấp cho glance để sử dụng 125 | - Thư mục chứa image của glance là **/var/lib/glance/iamges/** 126 | - Thực hiện mount bằng lệnh sau 127 | 128 | ```sh 129 | mount nfs:/nfs/glance /var/lib/glance/images 130 | ``` 131 | 132 | - 4. Cấu hình cho phép mount tự động khi Reboot controller, thêm dòng cấu hình sau vào file **/etc/fstab** 133 | 134 | ```sh 135 | nfs:/nfs/glance /var/lib/glance/images nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 136 | ``` 137 | 138 | - 5. Kiểm tra kết quả mount bằng lệnh sau 139 | 140 | ```sh 141 | df -h 142 | ``` 143 | 144 | - nếu kết quả có dòng thông báo **nfs:/nfs/glance 27G 1.4G 25G 6% /var/lib/glance/images** là đã mount thành công 145 | 146 | - Đến đây hệ thống đã có NFS server lưu trữ image cho glance 147 | 148 | ### II. Cài đặt NFS cho nova 149 | - Cài đặt NFS cho nova, trên node compute1 đóng vai trò client trong mô hình lưu trữ NFS 150 | - Thực hiện cài đặt trên node compute1 cho nova 151 | - Đăng nhập vào node compute1 với quyền root 152 | 153 | - 1. Thêm dòng cấu hình sau vào file **/etc/hosts** 154 | 155 | ```sh 156 | 10.10.10.193 nfs 157 | ``` 158 | 159 | - 2. Cài đặt gói cho nfs 160 | 161 | ```sh 162 | apt-get update 163 | apt-get install nfs-common -y 164 | ``` 165 | 166 | - 3. Mount thư mục mà NFS server cung cấp cho nova để sử dụng 167 | - Thư mục chứa instance của nova là **/var/lib/nova/instances/** 168 | - Thực hiện mount bằng lệnh sau 169 | 170 | ```sh 171 | mount nfs:/nfs/nova/instances /var/lib/nova/instances 172 | ``` 173 | 174 | - 4. Cấu hình cho phép mount tự động khi Reboot compute1, thêm dòng cấu hình sau vào file **/etc/fstab** 175 | 176 | ```sh 177 | nfs:/nfs/nova/instances /var/lib/nova/instances nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 178 | ``` 179 | 180 | - 5. Kiểm tra kết quả mount bằng lệnh sau 181 | 182 | ```sh 183 | df -h 184 | ``` 185 | 186 | - nếu kết quả có dòng thông báo **nfs:/nfs/nova/instances 27G 1.4G 25G 6% /var/lib/nova/instances** là đã mount thành công 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/nova_lenh_co_ban.md: -------------------------------------------------------------------------------- 1 | # Các lệnh nova cơ bản 2 | 3 | ## Quản lý flavor 4 | - 1. Tạo mới 1 flavor 5 | 6 | ```sh 7 | openstack flavor create --id auto --ram --disk --vcpu --public 8 | ``` 9 | 10 | - dung lượng ram tính theo đơn vị MB 11 | - dung lượng disk tính theo đơn vị GB 12 | 13 | - 2. Liệt kê flavors 14 | 15 | ```sh 16 | openstack flavor list 17 | ``` 18 | 19 | - 3. show chi tiết 1 flavor 20 | 21 | ```sh 22 | openstack flavor show 23 | ``` 24 | 25 | - 4. Xóa bỏ 1 flavor 26 | 27 | ```sh 28 | openstack flavor delete 29 | ``` 30 | 31 | ## Quản lý keypair 32 | - 1. Tạo một keypair 33 | 34 | ```sh 35 | ssh-keygen -q -N "" 36 | Enter file in which to save the key (/root/.ssh/id_rsa): 37 | ``` 38 | 39 | - ví dụ: 40 | 41 | ```sh 42 | ~# ssh-keygen -q -N "" 43 | Enter file in which to save the key (/root/.ssh/id_rsa): mykey 44 | ``` 45 | 46 | - Sau khi thực hiện lệnh ssh-keygen -q -N "", nhập tên file sẽ lưu cặp key này. Ở đây tên file là mykey 47 | - Liệt kê ra các file key mà hệ thống đã tạo 48 | 49 | ```sh 50 | ~# ls 51 | mykey mykey.pub 52 | ``` 53 | 54 | - gồm 2 key: mykey chứa private key và mykey.pub chứa public key. 55 | 56 | - 2. add public key vào openstack 57 | 58 | ```sh 59 | openstack keypair create --public-key 60 | ``` 61 | 62 | ví dụ: 63 | 64 | ```sh 65 | openstack keypair create --public-key ~/mykey.pub mykey 66 | ``` 67 | 68 | - 3. List tất cả các key pair có trong openstack. 69 | 70 | ```sh 71 | openstack keypair list 72 | ``` 73 | 74 | - 4. Xóa bỏ 1 keypair 75 | 76 | ```sh 77 | openstack keypair delete 78 | ``` 79 | 80 | ## 3. Tạo, xóa, tắt, bật, reboot, list máy ảo. 81 | - 1. Tạo mới VM 82 | - tạo từ image 83 | 84 | ```sh 85 | openstack server create --flavor --image \ 86 | --nic net-id= --security-group \ 87 | --key-name 88 | ``` 89 | 90 | - Tạo máy ảo từ volume 91 | 92 | ```sh 93 | openstack server create --flavor --volume \ 94 | --nic net-id= --security-group \ 95 | --key-name 96 | ``` 97 | 98 | - 2. Xóa máy ảo 99 | 100 | ```sh 101 | openstack server delete 102 | ``` 103 | 104 | - 3. Tắt máy ảo 105 | 106 | ```sh 107 | openstack server stop 108 | ``` 109 | 110 | - 4. Bật máy ảo 111 | 112 | ```sh 113 | openstack server start 114 | ``` 115 | 116 | - 5. reboot một VM đang chạy. 117 | 118 | ```sh 119 | openstack server reboot 120 | ``` 121 | 122 | - 6. List tất cả VM 123 | 124 | ```sh 125 | openstack server list 126 | ``` -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/nova_overview.md: -------------------------------------------------------------------------------- 1 | # Tổng quan về dịch vụ Compute trong Openstack (Nova) 2 | 3 | ## 1. Giới thiệu về Nova 4 | - Nova được xem là trái tim của Openstack. 5 | - Thực hiện chức năng quản lý cơ bản về máy ảo như tạo, xóa, tắt, bật. 6 | - Chính khả năng cung cấp VM đến người dùng, nó quy định mô hình dịch vụ của Openstack là IaaS (Infrastructure as a Services). 7 | 8 | ## 2. Kiến trúc của Nova 9 | 10 | ![](../images/nova-compute.png) 11 | 12 | - Chức năng các thành phần cơ bản của Nova: 13 | - nova-api: Tiếp nhận và phản hồi các lời gọi API từ người dùng cuối (end user). 14 | - nova-api-metadata: Tiếp nhận yêu cầu lấy metadata từ các instance. Dịch vụ này thường được sử dụng khi triển khai chế độ multi-host với nova-network. 15 | - nova-compute: Một worker daemon thực hiện tác vụ quản lý vòng đời các máy ảo như: tạo và hủy các instance thông qua các hypervisor APIs. Ví dụ: 16 | - XenAPI đối với XenServer/XCP 17 | - libvirt đối với KVM hoặc QEMU 18 | - VMwareAPI đối với VMware 19 | Tiến trình xử lý của nova-compute khá phức tạp, về cơ bản thì daemon này sẽ tiếp nhận các hành động từ hàng đợi và thực hiện một chuỗi các lệnh hệ thống như vận hành máy ảo KVM và cập nhật trạng thái của máy ảo đó vào cơ sở dữ liệu. 20 | - nova-scheduler: Daemon này lấy các yêu cầu tạo máy ảo từ hàng đợi và xác định xem server compute nào sẽ được chọn để vận hành máy ảo. 21 | - nova-conductor: Là module trung gian tương tác giữa nova-compute và cơ sở dữ liệu. Nó hủy tất cả các truy cập trự tiếp vào cơ sở dữ liệu tạo ra bởi nova-compute nhằm mục đích bảo mật, tránh trường hợp máy ảo bị xóa mà không có chủ ý của người dùng. 22 | - nova-cert: Là một worker daemon phục vụ dịch vụ Nova Cert cho chứng chỉ X509, được sử dụng để tạo các chứng chỉ cho euca-bundle-image. Dịch vụ này chỉ cần thiết khi sử dụng EC2 API. 23 | - nova-network: Tương tự như nova-compute, tiếp nhận yêu cầu về network từ hàng đợi và điều khiển mạng, thực hiện các tác vụ như thiết lập các giao diện bridging và thay đổi các luật của IPtables. 24 | - nova-consoleauth: Ủy quyền tokens cho người dùng mà console proxies cung cấp. Dịch vụ này phải chạy với console proxies để làm việc. 25 | - nova-novncproxy: Cung cấp một proxy để truy cập máy ảo đang chạy thông qua kết nối VNC. Hỗ trợ các novnc client chạy trên trình duyệt. 26 | - nova-spicehtml5proxy: Cung cấp một proxy truy cấp máy ảo đang chạy thông qua kết nối SPICE. Hỗ trợ các client chạy trên trình duyệt hỗ trợ HTML5. 27 | - nova-xvpvncproxy: Cung cấp một proxy truy cập máy ảo đang chạy thông qua kết nối VNC. 28 | - nova client: Cho phép người dùng thực hiện tác vụ quản trị hoặc các tác vụ thông thường của người dùng cuối. 29 | - The queue: Là một trung tâm chuyển giao bản tin giữa các daemon. Thông thường queue này cung cấp bởi một phần mềm message queue hỗ trợ giao thức AMQP: RabbitMQ, Zero MQ. 30 | - SQL database: Lưu trữ hầu hết trạng thái ở thời điểm biên dịch và thời điểm chạy cho hạ tầng cloud: 31 | - Các loại máy ảo đang có sẵn 32 | - Các máy tính đang đưa vào sử dụng 33 | - Hệ thống mạng sẵn sàng 34 | - Các projects. 35 | Về cơ bản, OpenStack Compute hỗ trợ bất kỳ hệ quản trị cơ sở dữ liệu nào như SQLite3 (cho việc kiểm tra và phát triển công việc), MySQL, PostgreSQL. -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/swift_cac_lenh_co_ban.md: -------------------------------------------------------------------------------- 1 | # Các lệnh cơ bản với Swift 2 | - Một số thao tác quản trị Swift trên Openstack 3 | 4 | # Mục lục 5 | 6 | - [1. Xem metadata của user](#1) 7 | - [2. Lists các containers](#2) 8 | - [3. Lists các objects trong container](#3) 9 | - [4. Tạo một object](#4) 10 | - [5. Download một object](#5) 11 | - [6. Delete một object](#6) 12 | - [7. Một số lệnh curl cơ bản](#7) 13 | 14 | 15 | ## 1. Xem metadata của user 16 | - Sử dụng lệnh `swift stat` 17 | 18 | ```sh 19 | swift stat 20 | ``` 21 | 22 | 23 | ## 2. Lists các containers 24 | - Xác định tên các containers có trong swift 25 | 26 | ```sh 27 | swift list 28 | ``` 29 | 30 | 31 | ## 3. Lists các objects trong container 32 | - Liệt kê các object trong một container cụ thể 33 | 34 | ```sh 35 | swift list 36 | ``` 37 | 38 | 39 | ## 4. Tạo một object 40 | - Upload 1 file lên container 41 | 42 | ```sh 43 | swift upload 44 | ``` 45 | 46 | - hoặc lệnh 47 | 48 | ```sh 49 | openstack object create 50 | ``` 51 | 52 | - `container name` là tên của container nơi muốn lưu object 53 | - `file path` là đường dẫn đến file cầu upload. 54 | 55 | 56 | ## 5. Download một object 57 | - download một object. 58 | 59 | ```sh 60 | swift download 61 | ``` 62 | 63 | - `container name` là tên của container chứa object cần tải 64 | - `object name` là tên của object cần tải. 65 | 66 | 67 | ## 6. Delete một object 68 | 69 | ```sh 70 | openstack object delete 71 | ``` 72 | 73 | # Ngoài cách sử dụng command line, chúng ta có thể sử dụng lệnh curl để tương tác với swift 74 | 75 | ## 7. Một số lệnh curl cơ bản 76 | - Lệnh cURL phổ biến trong giao thức HTTP. 77 | - Lấy thông tin xác thực và URL của storage, sử dụng lệnh `swift auth` 78 | 79 | ```sh 80 | ~# swift auth 81 | export OS_STORAGE_URL=http://controller:8080/v1/AUTH_b54646bf669746db8c62ec0410bd0528 82 | export OS_AUTH_TOKEN= 83 | ``` 84 | 85 | - chúng ta có được đường dẫn của account và giá trị token 86 | 87 | - Tạo một container mới. 88 | - Sử dụng HTTP PUT. 89 | 90 | ```sh 91 | curl -X PUT -H 'X-Auth-Token: ' \ 92 | http://controller:8080/v1/AUTH_b54646bf669746db8c62ec0410bd0528/ 93 | ``` 94 | 95 | - Sử dụng HTTP GET để liệt kê các container giống như lệnh swift stat. 96 | 97 | ```sh 98 | $ curl -X GET -H 'X-Auth-Token: ' \ 99 | http://controller:8080/v1/AUTH_b54646bf669746db8c62ec0410bd0528/ 100 | ``` 101 | 102 | - Upload file lên container 103 | 104 | ```sh 105 | $ curl -X PUT -H 'X-Auth-Token: ' \ 106 | http://controller:8080/v1/AUTH_b54646bf669746db8c62ec0410bd0528// \ 107 | -T 108 | ``` 109 | 110 | - Lấy nội dung trong container 111 | 112 | ```sh 113 | $ curl -X GET -H 'X-Auth-Token: ' \ 114 | http://controller:8080/v1/AUTH_b54646bf669746db8c62ec0410bd0528/ 115 | ``` 116 | 117 | - Lấy nội dung của object 118 | 119 | ```sh 120 | $ curl -X GET -H 'X-Auth-Token:' \ 121 | http://controller:8080/v1/AUTH_b54646bf669746db8c62ec0410bd0528// 122 | ``` 123 | -------------------------------------------------------------------------------- /OpenStack-Ocata/docs/swift_file_config.md: -------------------------------------------------------------------------------- 1 | # Giải thích file cấu hình cơ bản của swift 2 | 3 | # Mục lục 4 | - [1. File cấu hình proxy-server.conf](#1) 5 | - [2. File cấu hình swift.conf](#2) 6 | - [3. File cấu hình account-server.conf](#3) 7 | - [4. File cấu hình container-server.conf](#4) 8 | - [5. File cấu hình object-server.conf](#5) 9 | 10 | 11 | ## 1. File cấu hình `proxy-server.conf` 12 | 13 | - Trong section `[DEFAULT]` 14 | - `bind_port = 8080` cấu hình port 8080 được sử dụng cho proxy server 15 | - `user = swift` tên user sử dụng swift của hệ thống 16 | - `swift_dir = /etc/swift` là thư mục của swift 17 | 18 | - Section `[pipeline:main]` cấu hình pipeline. 19 | 20 | - Section `[app:proxy-server]`, `account_autocreate = True` sẽ tự động tạo account cho user nếu account chưa tồn tại trên hệ thống. 21 | 22 | - Section `[filter:tempauth]` cấu hình cho hệ thống xác thực có trong swift. Trong tài liệu này sử dụng hệ thống xác thực keystone nên không cần quan tâm đến section này. 23 | 24 | - Section `[filter:authtoken]` cấu hình để sử dụng hệ thống xác thực keystone cung cấp token 25 | 26 | - `paste.filter_factory = keystonemiddleware.auth_token:filter_factory` khai báo truy cập keystone 27 | 28 | ```sh 29 | auth_uri = http://controller:5000 30 | auth_url = http://controller:35357 31 | memcached_servers = controller:11211 32 | auth_type = password 33 | project_domain_name = default 34 | user_domain_name = default 35 | project_name = service 36 | username = swift 37 | password = Welcome123 38 | delay_auth_decision = True 39 | ``` 40 | - Thông tin xác thực của tài khoản admin cho swift. 41 | 42 | - Section `[filter:keystoneauth]` cấu hình các role được phép tương tác với swift. 43 | - User phải có một role trong các role được định nghĩa trong `operator_roles` 44 | 45 | ```sh 46 | operator_roles = admin,user 47 | ``` 48 | 49 | - ở đây có 2 role là admin và user được phép tương tác với swift. 50 | 51 | - Section `[filter:cache]` cấu hình sử dụng memcache server. 52 | 53 | ```sh 54 | memcache_servers = controller:11211 55 | ``` 56 | 57 | 58 | ## 2. File cấu hình swift.conf 59 | - Section `[swift-hash]` cung cấp dãy ký tự được sử dụng trong thuật toán băm 60 | 61 | ```sh 62 | swift_hash_path_suffix = HASH_PATH_SUFFIX 63 | swift_hash_path_prefix = HASH_PATH_PREFIX 64 | ``` 65 | 66 | - Hai giá trị này phải được giữ bí mật mà không được thay đổi. 67 | 68 | - Section `[storage-policy:0]` cấu hình về policy lưu trữ index 0. 69 | 70 | - `name = Policy-0` tên của policy 71 | - `default = yes` cấu hình policy có mặc định hay không 72 | 73 | 74 | ## 3. File cấu hình account-server.conf 75 | - Section `[DEFAULT]`, cấu hình địa chỉ ip, port, user, thư mục và kiểm tra mount point: 76 | 77 | ```sh 78 | bind_ip = MANAGEMENT_INTERFACE_IP_ADDRESS 79 | bind_port = 6202 80 | user = swift 81 | swift_dir = /etc/swift 82 | devices = /srv/node 83 | mount_check = True 84 | ``` 85 | 86 | - `MANAGEMENT_INTERFACE_IP_ADDRESS` địa chỉ ip quản lý của node cài account-server. 87 | - sử dụng port 6202 cho account-server 88 | - user là swift 89 | - sử dụng thư mục /etc/swift 90 | - thiết bị /srv/node 91 | 92 | - Section ` [pipeline:main]`, cấu hình sử dụng các module phù hợp cho account-server 93 | 94 | ```sh 95 | pipeline = healthcheck recon account-server 96 | ``` 97 | 98 | - Section `[filter:recon]`, cấu hình thư mục cho recon cache. 99 | 100 | ```sh 101 | recon_cache_path = /var/cache/swift 102 | ``` 103 | 104 | 105 | ## 4. File cấu hình container-server.conf 106 | - Section `[DEFAULT]`, cấu hình địa chỉ ip, port, user, thư mục và kiểm tra mount point: 107 | 108 | ```sh 109 | bind_ip = MANAGEMENT_INTERFACE_IP_ADDRESS 110 | bind_port = 6201 111 | user = swift 112 | swift_dir = /etc/swift 113 | devices = /srv/node 114 | mount_check = True 115 | ``` 116 | 117 | - `MANAGEMENT_INTERFACE_IP_ADDRESS` địa chỉ ip quản lý của node cài container-server. 118 | - sử dụng port 6201 cho container-server 119 | - user là swift 120 | - sử dụng thư mục /etc/swift 121 | - thiết bị /srv/node 122 | 123 | - Section ` [pipeline:main]`, cấu hình sử dụng các module phù hợp cho container-server 124 | 125 | ```sh 126 | pipeline = healthcheck recon container-server 127 | ``` 128 | 129 | - Section `[filter:recon]`, cấu hình thư mục cho recon cache. 130 | 131 | ```sh 132 | recon_cache_path = /var/cache/swift 133 | ``` 134 | 135 | 136 | 137 | ## 5. File cấu hình object-server.conf 138 | - Section `[DEFAULT]`, cấu hình địa chỉ ip, port, user, thư mục và kiểm tra mount point: 139 | 140 | ```sh 141 | bind_ip = MANAGEMENT_INTERFACE_IP_ADDRESS 142 | bind_port = 6200 143 | user = swift 144 | swift_dir = /etc/swift 145 | devices = /srv/node 146 | mount_check = True 147 | ``` 148 | 149 | - `MANAGEMENT_INTERFACE_IP_ADDRESS` địa chỉ ip quản lý của node cài object-server. 150 | - sử dụng port 6200 cho object-server 151 | - user là swift 152 | - sử dụng thư mục /etc/swift 153 | - thiết bị /srv/node 154 | 155 | - Section ` [pipeline:main]`, cấu hình sử dụng các module phù hợp cho object-server 156 | 157 | ```sh 158 | pipeline = healthcheck recon object-server 159 | ``` 160 | 161 | - Section `[filter:recon]`, cấu hình thư mục cho recon cache. 162 | 163 | ```sh 164 | recon_cache_path = /var/cache/swift 165 | ``` 166 | -------------------------------------------------------------------------------- /OpenStack-Ocata/images/IPBlock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/IPBlock.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/add_rule_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/add_rule_1.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/add_rule_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/add_rule_2.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/add_rule_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/add_rule_3.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/architectureglane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/architectureglane.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/cinder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/cinder.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/diskimg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/diskimg.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/diskv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/diskv.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/flavor_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/flavor_1.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/flavor_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/flavor_2.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/floating_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/floating_1.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/floating_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/floating_2.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/floating_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/floating_3.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/floating_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/floating_4.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/floating_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/floating_5.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/glane_component.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/glane_component.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/hypervisor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/hypervisor.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/layoutnet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/layoutnet.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/layoutswift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/layoutswift.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/login.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/network_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/network_1.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/network_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/network_2.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/network_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/network_3.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/network_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/network_4.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/network_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/network_5.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/network_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/network_6.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/network_admin_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/network_admin_1.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/network_admin_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/network_admin_2.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/network_admin_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/network_admin_3.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/network_admin_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/network_admin_4.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/nfs_server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/nfs_server.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/nova-compute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/nova-compute.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/ping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/ping.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/quota.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/quota.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/router_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/router_1.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/router_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/router_2.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/router_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/router_3.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/router_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/router_4.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/router_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/router_5.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/statusflow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/statusflow.jpg -------------------------------------------------------------------------------- /OpenStack-Ocata/images/swift_create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/swift_create.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/swift_keystone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/swift_keystone.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/swift_logic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/swift_logic.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/swift_modeinstall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/swift_modeinstall.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/swift_physical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/swift_physical.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/swift_servers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/swift_servers.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/topology.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/topology.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm04.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm1.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm2.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm3.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm4.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm5.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm6.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm7.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm8.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_1.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_2.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_3.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_4.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_5.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_6.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_7.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_1.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_10.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_11.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_12.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_13.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_14.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_15.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_2.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_3.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_4.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_5.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_6.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_7.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_8.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vm_keypair_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vm_keypair_9.png -------------------------------------------------------------------------------- /OpenStack-Ocata/images/vmv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Ocata/images/vmv.png -------------------------------------------------------------------------------- /OpenStack-Pike/docs/swift_bai_2_scale.md: -------------------------------------------------------------------------------- 1 | ## Bài 2. Mở rộng hệ thống 2 | - Bài toán đặt ra: với hệ thống lưu trữ ban đầu sau một thời gian sử dụng, hệ thống đã đầy hoặc có nhu cầu mở rộng thêm các node lưu trữ. 3 | - Có 2 yêu cầu: 4 | - 1. Thêm các node lưu trữ mới và dữ liệu được lưu trên cả các node cũ và các node mới. 5 | - 2. Toàn bộ dữ liệu mới sẽ được lưu trên các node mới. 6 | 7 | --- 8 | - Mô hình hệ thống như sau: 9 | 10 | ![](../images/swift_layout.png) 11 | 12 | - Ip planning 13 | 14 | ![](../images/swift_ip_scale.png) 15 | 16 | - 2 node `object1` và `object2` là hệ thống cũ, thêm 2 node mới `object3` và `object4` 17 | 18 | ## Yêu cầu thứ nhất: mở rộng và cho phép lưu trữ trên toàn bộ hệ thống. 19 | - Với 2 node `object3` và `object4` thực hiện các bước cài đặt tương tự như `object1` và `object2`. Tham khảo cài đặt [tại đây](https://github.com/pxduc96/thuctap012017/blob/master/DucPX/Install_PIKE/Pike.md#m) 20 | 21 | - -------------------------------------------------------------------------------- /OpenStack-Pike/images/ip_manila.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Pike/images/ip_manila.png -------------------------------------------------------------------------------- /OpenStack-Pike/images/ip_pike.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Pike/images/ip_pike.png -------------------------------------------------------------------------------- /OpenStack-Pike/images/manila_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Pike/images/manila_layout.png -------------------------------------------------------------------------------- /OpenStack-Pike/images/pike.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Pike/images/pike.png -------------------------------------------------------------------------------- /OpenStack-Pike/images/swift_ip_scale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Pike/images/swift_ip_scale.png -------------------------------------------------------------------------------- /OpenStack-Pike/images/swift_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/OpenStack-Pike/images/swift_layout.png -------------------------------------------------------------------------------- /OpenStack-Pike/readme.md: -------------------------------------------------------------------------------- 1 | ## GHI CHÉP VỀ OPENSTACK PIKE 2 | 3 | ## 1. Cài đặt 4 | - [1. Cài đặt OPS Pike với mô hình 5 node](./docs/install_basic.md) 5 | - [2. Cài đặt manila option 1](./docs/manila_install.md) 6 | ## 2. Lab các tính năng trên Pike 7 | --- 8 | 9 | ## Lab các tính năng của Swift 10 | - [1. Storage policy](./docs/swift_bai_1_storage_policy.md) 11 | - [2. Mở rộng hệ thống](./docs/swift_bai_2_scale.md) 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Repo lưu trữ tổng họp cho Team Thực tập Cloud Computing VSC 2 | 3 | Trưởng nhóm thực hiện tổng hợp kết quả của cả nhóm và viết báo cáo dưới dạng Markdown và đẩy vào thư mục tương ứng. 4 | 5 | Sau đó tạo một đường dẫn đến báo cáo đó tại README.md 6 | 7 | -------------------------------------------------------------------------------- /images/Mitaka-topo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/Mitaka-topo.png -------------------------------------------------------------------------------- /images/README.md: -------------------------------------------------------------------------------- 1 | ## Images file 2 | -------------------------------------------------------------------------------- /images/cinder-Architect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder-Architect.png -------------------------------------------------------------------------------- /images/cinder-attach-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder-attach-flow.png -------------------------------------------------------------------------------- /images/cinder/add_volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/add_volume.png -------------------------------------------------------------------------------- /images/cinder/bootable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/bootable.png -------------------------------------------------------------------------------- /images/cinder/check_backends.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/check_backends.png -------------------------------------------------------------------------------- /images/cinder/cinder-nova-workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/cinder-nova-workflow.png -------------------------------------------------------------------------------- /images/cinder/cinder-process-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/cinder-process-diagram.png -------------------------------------------------------------------------------- /images/cinder/cinder-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/cinder-service.png -------------------------------------------------------------------------------- /images/cinder/cinder-type-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/cinder-type-list.png -------------------------------------------------------------------------------- /images/cinder/cinder_test_nfs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/cinder_test_nfs.png -------------------------------------------------------------------------------- /images/cinder/create-new-volume-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/create-new-volume-diagram.png -------------------------------------------------------------------------------- /images/cinder/create-success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/create-success.png -------------------------------------------------------------------------------- /images/cinder/create-volume-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/create-volume-1.png -------------------------------------------------------------------------------- /images/cinder/create-volume-gfs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/create-volume-gfs.png -------------------------------------------------------------------------------- /images/cinder/create-volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/create-volume.png -------------------------------------------------------------------------------- /images/cinder/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/dashboard.png -------------------------------------------------------------------------------- /images/cinder/details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/details.png -------------------------------------------------------------------------------- /images/cinder/flavor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/flavor.png -------------------------------------------------------------------------------- /images/cinder/flavor_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/flavor_list.png -------------------------------------------------------------------------------- /images/cinder/gfs-mount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/gfs-mount.png -------------------------------------------------------------------------------- /images/cinder/image_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/image_list.png -------------------------------------------------------------------------------- /images/cinder/img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/img.png -------------------------------------------------------------------------------- /images/cinder/instane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/instane.png -------------------------------------------------------------------------------- /images/cinder/instane_id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/instane_id.png -------------------------------------------------------------------------------- /images/cinder/kiemtra-gfs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/kiemtra-gfs.png -------------------------------------------------------------------------------- /images/cinder/launch-instane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/launch-instane.png -------------------------------------------------------------------------------- /images/cinder/launch_instane_volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/launch_instane_volume.png -------------------------------------------------------------------------------- /images/cinder/lsbsk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/lsbsk.png -------------------------------------------------------------------------------- /images/cinder/mohinh-re.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/mohinh-re.png -------------------------------------------------------------------------------- /images/cinder/mohinh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/mohinh.png -------------------------------------------------------------------------------- /images/cinder/multiple_backends-mohinh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/multiple_backends-mohinh.png -------------------------------------------------------------------------------- /images/cinder/network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/network.png -------------------------------------------------------------------------------- /images/cinder/network_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/network_list.png -------------------------------------------------------------------------------- /images/cinder/nfs-mount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/nfs-mount.png -------------------------------------------------------------------------------- /images/cinder/phanhoach-multiple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/phanhoach-multiple.png -------------------------------------------------------------------------------- /images/cinder/phanvung-gfs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/phanvung-gfs.png -------------------------------------------------------------------------------- /images/cinder/server_list_succ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/server_list_succ.png -------------------------------------------------------------------------------- /images/cinder/service_list_test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/service_list_test.png -------------------------------------------------------------------------------- /images/cinder/source.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/source.png -------------------------------------------------------------------------------- /images/cinder/storage/Replicated_Volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/storage/Replicated_Volume.png -------------------------------------------------------------------------------- /images/cinder/storage/backup_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/storage/backup_list.png -------------------------------------------------------------------------------- /images/cinder/storage/bricks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/storage/bricks.png -------------------------------------------------------------------------------- /images/cinder/storage/dis_volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/storage/dis_volume.png -------------------------------------------------------------------------------- /images/cinder/storage/dr_volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/storage/dr_volume.png -------------------------------------------------------------------------------- /images/cinder/storage/ds_volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/storage/ds_volume.png -------------------------------------------------------------------------------- /images/cinder/storage/file_backup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/storage/file_backup.png -------------------------------------------------------------------------------- /images/cinder/storage/ip_plan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/storage/ip_plan.png -------------------------------------------------------------------------------- /images/cinder/storage/kq_lenh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/storage/kq_lenh.png -------------------------------------------------------------------------------- /images/cinder/storage/mohinh_nfs_backup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/storage/mohinh_nfs_backup.png -------------------------------------------------------------------------------- /images/cinder/storage/rs_volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/storage/rs_volume.png -------------------------------------------------------------------------------- /images/cinder/storage/stripe_volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/storage/stripe_volume.png -------------------------------------------------------------------------------- /images/cinder/storage/volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/storage/volume.png -------------------------------------------------------------------------------- /images/cinder/table-phanhoach.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/table-phanhoach.png -------------------------------------------------------------------------------- /images/cinder/vm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/vm.png -------------------------------------------------------------------------------- /images/cinder/volume-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/volume-list.png -------------------------------------------------------------------------------- /images/cinder/volume-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/volume-properties.png -------------------------------------------------------------------------------- /images/cinder/volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/volume.png -------------------------------------------------------------------------------- /images/cinder/volume_create_succ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/volume_create_succ.png -------------------------------------------------------------------------------- /images/cinder/volume_id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/volume_id.png -------------------------------------------------------------------------------- /images/cinder/volume_list_instane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/cinder/volume_list_instane.png -------------------------------------------------------------------------------- /images/nova/brctl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/nova/brctl.png -------------------------------------------------------------------------------- /images/nova/brctl_show.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/nova/brctl_show.png -------------------------------------------------------------------------------- /images/nova/moba_config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/nova/moba_config.png -------------------------------------------------------------------------------- /images/nova/test_boot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hocchudong/ghichep-OpenStack/33c4c41bb9967964870dcd13c6ac928fa9c19cb5/images/nova/test_boot.png --------------------------------------------------------------------------------