├── 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 | 
16 |
17 | và các node có địa chỉ IP như sau:
18 |
19 | 
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 | 
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 | 
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 | 
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 | 
40 |
41 | - Volume :
42 |
43 | 
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 | 
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 | 
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 | 
86 |
87 | ### 3.4. Distributed replicated:
88 |
89 | Kết hợp từ distributed và replicated
90 |
91 | 
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 | 
101 |
102 | ### 3.6. Replicated stripe volume:
103 |
104 | Kết hợp từ replicated và stripe
105 |
106 | 
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 | 
61 |
62 | ### Phân hoạch địa chỉ IP và yêu cầu phần cứng :
63 |
64 | 
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 | 
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 | 
176 |
177 | - Kiểm tra trên node NFS :
178 |
179 | 
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 | 
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 | 
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 |
92 |
Dữ liệu volume bị hư.
93 |
Storage failure.
94 |
Site failure (Cung cấp giải pháp backup an toàn).
95 |
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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